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


11

트래비스 CI 문서는 실행 말한다 sleep 3시작한 후 xvfb"주고 [가] 약간의 시간이 시작하는"에. man페이지 에서이 지연에 대한 참조를 찾을 수 없습니다 . 이화물 컬트 프로그래밍입니까? 그렇지 않은 경우, 사용 가능 하도록 보장 하기 위해 잠보다 폴링을 어떻게합니까 ?

답변:


6

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

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

그런 다음 실행하십시오 Xvfb :9(예 : 디스플레이 9). 준비가되면

/tmp/.X11-unix/ CREATE X9

에서 inotifywait종료됩니다. 에 연결할 수 있어야합니다 DISPLAY=:9.


이것은 적절한 작업 제어를 기대할 수있는 시스템에서 작업을 수행하지만 Travis CI 구성 파일 에서이 작업을 수행하려고합니다. 백그라운드 작업을 사용하고 완료 될 때까지 기다릴 수 있다고 생각하지 않습니다.
l0b0

3
while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; done실제로 간단한 트릭을 수행했습니다 . 경로 팁으로 인해 해결 된 것으로 표시합니다.
l0b0

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충분합니다. 루프는 백만 가지 방식으로 수행 될 수 있습니다.
l0b0

물론 여러 가지 방법으로 수행 할 수 있습니다. 이 스 니펫은 Xvfb를 준비하는 데 걸리는 시간에 대한 아이디어를 제공하는 꽤 인쇄 된 출력을 만듭니다. 나는 그것을 내 자신의 용도로 썼지 만 다른 사람들도 그로부터 이익을 얻을 수 있다는 것을 깨달았습니다.
Anton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.