Comment sonder pour que Xvfb soit prêt?


11

La documentation de Travis CI dit de s'exécuter sleep 3après avoir commencé xvfbà "lui donner un certain temps pour démarrer". Je n'ai trouvé aucune référence à ce retard dans la manpage . Est-ce une programmation culte du fret? Sinon, comment puis-je interroger plutôt que dormir pour garantir qu'il est disponible?

Réponses:


6

Par défaut Xvfb, un socket de domaine Unix sera créé pour que les clients se connectent. Sur mon système, ce fichier socket est créé dans /tmp/.X11-unix/. Vous pouvez utiliser inotifywaitpour écouter les événements dans ce répertoire. Par exemple,

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

puis exécutez Xvfb :9(affichage 9, par exemple). Quand il est prêt, vous devriez voir

/tmp/.X11-unix/ CREATE X9

à partir de inotifywaitlaquelle prendra fin. Vous devriez maintenant pouvoir vous connecter à DISPLAY=:9.


Cela ferait le travail sur un système où je peux m'attendre à un contrôle de travail approprié, mais j'essaie de le faire dans un fichier de configuration Travis CI. Je ne pense pas pouvoir compter sur la possibilité d'utiliser des tâches d'arrière-plan et attendre qu'elles se terminent.
l0b0

3
Un simple a while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; donefait l'affaire . Marquage comme résolu à cause de la pointe du chemin.
l0b0

1

Pour ceux qui peuvent exécuter des scripts à part entière, une autre option serait d'utiliser xdpyinfosur l'affichage souhaité:

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

(Réponse inspirée de https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).


Merci! Une seule xdpyinfoligne suffirait; la boucle pourrait se faire de plusieurs manières différentes.
l0b0

Bien sûr, cela peut se faire de plusieurs façons. Cependant, cet extrait crée une sortie assez imprimée qui vous donne également une idée du temps qu'il a fallu pour que Xvfb soit prêt. J'ai écrit cela pour mon propre usage, mais j'ai réalisé que d'autres pouvaient également en bénéficier.
Anton
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.