如何轮询 Xvfb 是否准备就绪?

如何轮询 Xvfb 是否准备就绪?

Travis CI 文档sleep 3说开始后运行xvfb“给[它]一些时间来开始”。我在 中找不到任何有关此延迟的参考信息man。这是货物邪教编程吗?如果没有,我该怎么办轮询而不是睡觉保证有空吗?

答案1

默认情况下Xvfb会创建一个 Unix Domain 套接字供客户端连接。在我的系统上,此文件套接字文件是在/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)。

相关内容