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?

l0b0
la source

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.

meuh
la source
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 ).

Anton
la source
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