У меня есть некоторые модульные тесты, которым нужен дисплей X11, таким образом, я планирую запустить Xvfb прежде, чем выполнить их, но запустить Xvfb мне будет нужно свободное число дисплея для соединения его с. Мое лучшее предположение должно видеть то, что свободно в /tmp/.X11-unix
но я не уверен, как обработать гонку, если много тестов пытаются запуститься одновременно.
sshd должен сделать это, кто-либо знает как?
Нет смысла пытаться найти свободный номер дисплея. Как вы уже догадались, между тем, как вы найдете свободный номер, и тем, как запустится Xvfb, другой X-сервер может занять порт, который вы считали свободным. Поэтому лучше просто попытаться запустить Xvfb, обработать неудачу, если порт занят, а затем повторить попытку на следующем порту, пока вы не добьетесь успеха или не исчерпаете все порты для попыток.
#!/bin/bash
DISPLAY_NUM=0
unset TEST_HAS_RUN
until [ $TEST_HAS_RUN ] || (( $DISPLAY_NUM > 10 ))
do
Xvfb :$DISPLAY_NUM &
jobs
sleep 2 # assumption here is that Xvfb will exit quickly if it can't launch
if jobs | grep Xvfb
then
echo launching test on :$DISPLAY_NUM
xterm -display :$DISPLAY_NUM
TEST_HAS_RUN=1
kill %-
else
let DISPLAY_NUM=$DISPLAY_NUM+1
fi
done