¿Cómo sondear para que Xvfb esté listo?

11

La documentación de Travis CI dice que se ejecute sleep 3después de comenzar xvfba "darle [algo de tiempo] para comenzar". No pude encontrar ninguna referencia a este retraso en la manpágina . ¿Es esta la programación de culto de carga? Si no, ¿cómo hago una encuesta en lugar de dormir para garantizar que esté disponible?

l0b0
fuente

Respuestas:

6

Por defecto Xvfbcreará un socket de dominio Unix para que los clientes se conecten. En mi sistema este archivo de socket de archivo se crea en /tmp/.X11-unix/. Puede usar inotifywaitpara escuchar eventos en este directorio. Por ejemplo,

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

y luego ejecutar Xvfb :9(mostrar 9, por ejemplo). Cuando esté listo deberías ver

/tmp/.X11-unix/ CREATE X9

del inotifywaitcual terminará. Ahora debería poder conectarse DISPLAY=:9.

meuh
fuente
Esto haría el trabajo en un sistema donde puedo esperar un control de trabajo adecuado, pero estoy tratando de hacer esto en un archivo de configuración de Travis CI. No creo que pueda confiar en poder usar trabajos en segundo plano y esperar a que terminen.
l0b0
3
Un simple while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; donerealmente hizo el truco . Marcado como resuelto debido a la punta del camino.
l0b0
1

Para aquellos que pueden ejecutar scripts completos, otra opción sería usar xdpyinfoen la pantalla deseada:

# 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!"

(Respuesta inspirada en https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).

Anton
fuente
¡Gracias! Solo una xdpyinfolínea sería suficiente; El bucle podría hacerse de un millón de maneras diferentes.
l0b0
Claro que se puede hacer de muchas maneras. Sin embargo, este fragmento crea una salida impresa bonita que también le da una idea de cuánto tiempo le tomó a Xvfb estar listo. Escribí eso para mi propio uso, pero me di cuenta de que otros también pueden beneficiarse de eso.
Anton