Как опросить, чтобы Xvfb был готов?

11

Документация Travis CI говорит о том, что sleep 3после запуска xvfbнужно «дать [ей] время на начало». Я не нашел ссылки на эту задержку на manстранице . Это культ грузового программирования? Если нет, то как мне опросить, а не спать, чтобы гарантировать, что он доступен?

l0b0
источник

Ответы:

6

По умолчанию Xvfbбудет создан сокет Unix Domain для подключения клиентов. В моей системе этот файл сокета создается в /tmp/.X11-unix/. Вы можете использовать inotifywaitдля прослушивания событий в этом каталоге. Например,

 $ inotifywait -e create /tmp/.X11-unix/

и затем запустите Xvfb :9(например, дисплей 9). Когда он будет готов, вы должны увидеть

/tmp/.X11-unix/ CREATE X9

от inotifywaitкоторого закончится. Теперь вы должны иметь возможность подключиться к DISPLAY=:9.

meuh
источник
Это будет делать работу в системе, где я могу ожидать надлежащего контроля за работой, но я пытаюсь сделать это в файле конфигурации Travis CI. Я не думаю, что могу рассчитывать на возможность использовать фоновые задания и ждать их завершения.
10
3
Простой на while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; doneсамом деле сделал свое дело . Маркировка решена из-за кончика пути.
10
1

Для тех, кто может запускать полноценные скрипты, другой вариант будет использовать xdpyinfoна желаемом дисплее:

# Start Xvfb
sudo /usr/bin/Xvfb ${DISPLAY} -screen 0 1280x800x24 &

# Wait for Xvfb
MAX_ATTEMPTS=120 # About 60 seconds
COUNT=0
echo -n "Waiting for Xvfb to be ready..."
while ! xdpyinfo -display ${DISPLAY} >/dev/null 2>&1; do
  echo -n "."
  sleep 0.50s
  COUNT=$(( COUNT + 1 ))
  if [ "${COUNT}" -ge "${MAX_ATTEMPTS}" ]; then
    echo "  Gave up waiting for X server on ${DISPLAY}"
    exit 1
  fi
done
echo "  Done - Xvfb is ready!"

(Ответ вдохновлен https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).

Антон
источник
Спасибо! Достаточно одной xdpyinfoстроки; цикл может быть сделан миллионами разных способов.
10
Конечно, это можно сделать разными способами. Тем не менее, этот фрагмент создает довольно распечатанный вывод, который также дает представление о том, сколько времени понадобилось Xvfb для подготовки. Я написал это для себя, но понял, что другие тоже могут извлечь из этого пользу.
Антон