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)。

関連情報