![如何轮询 Xvfb 是否准备就绪?](https://linux22.com/image/94703/%E5%A6%82%E4%BD%95%E8%BD%AE%E8%AF%A2%20Xvfb%20%E6%98%AF%E5%90%A6%E5%87%86%E5%A4%87%E5%B0%B1%E7%BB%AA%EF%BC%9F.png)
这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)。