Xvfb가 준비되었는지 폴링하는 방법은 무엇입니까?

Xvfb가 준비되었는지 폴링하는 방법은 무엇입니까?

이것트래비스 CI 문서sleep 3실행 후 시작하라고 말합니다 xvfb. "시작할 시간을 주세요". 이 지연에 대한 참조를 찾을 수 없습니다.man페이지. 이게 카고 컬트 프로그래밍인가요? 그렇지 않다면 어떻게 해야 합니까?투표자는 대신보장하다시간이?

답변1

기본적으로 Xvfb클라이언트가 연결할 Unix 도메인 소켓이 생성됩니다. 내 시스템에서는 이 파일 소켓 파일이 에 있습니다 /tmp/.X11-unix/. 이를 사용하여 inotifywait이 디렉터리의 이벤트를 수신할 수 있습니다. 예를 들어,

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

그런 다음 실행합니다 Xvfb :9(예: 디스플레이 9). 준비가 되면 봐야 할 것

/tmp/.X11-unix/ CREATE X9

종료 됩니다 inotifywait. 이제 에 연결할 수 있습니다 DISPLAY=:9.

답변2

완전한 스크립트를 실행할 수 있는 사람들을 위한 또 다른 옵션은 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).

관련 정보