Wie kann ich Xvfb abfragen, um bereit zu sein?

11

In der Travis CI-Dokumentation heißt es, dass sleep 3nach dem Start ausgeführt werden soll, xvfbum "etwas Zeit zum Starten zu geben". Ich konnte auf der manSeite keinen Hinweis auf diese Verzögerung finden . Ist das Frachtkultprogramm? Wenn nicht, wie kann ich eher abfragen als schlafen, um sicherzustellen, dass es verfügbar ist?

l0b0
quelle

Antworten:

6

Standardmäßig Xvfbwird ein Unix Domain-Socket erstellt, über den Clients eine Verbindung herstellen können. Auf meinem System wird diese Datei-Socket-Datei in erstellt /tmp/.X11-unix/. Sie können verwenden inotifywait, um auf Ereignisse in diesem Verzeichnis zu warten. Beispielsweise,

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

und dann ausführen Xvfb :9(z. B. Anzeige 9). Wenn es fertig ist, sollten Sie sehen

/tmp/.X11-unix/ CREATE X9

von dem inotifywaitwas enden wird. Sie sollten jetzt in der Lage sein, eine Verbindung herzustellen DISPLAY=:9.

meuh
quelle
Dies würde den Job auf einem System erledigen, auf dem ich eine ordnungsgemäße Jobsteuerung erwarten kann, aber ich versuche dies in einer Travis CI-Konfigurationsdatei. Ich glaube nicht, dass ich mich darauf verlassen kann, Hintergrundjobs verwenden zu können und darauf zu warten, dass sie abgeschlossen sind.
10.
3
Ein einfacher while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; donetatsächlich hat den Trick . Markierung als gelöst wegen der Pfadspitze.
10.
1

Für diejenigen, die vollwertige Skripte ausführen können, wäre eine andere Option die Verwendung xdpyinfoauf der gewünschten Anzeige:

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

(Antwort inspiriert von https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).

Anton
quelle
Vielen Dank! Nur die einzige xdpyinfoZeile würde ausreichen; Die Schleife könnte auf millionenfache Weise durchgeführt werden.
10b0
Sicher kann es auf viele Arten gemacht werden. Dieses Snippet erstellt jedoch eine hübsch gedruckte Ausgabe, die Ihnen auch eine Vorstellung davon gibt, wie lange es gedauert hat, bis Xvfb bereit ist. Ich habe das für meinen eigenen Gebrauch geschrieben, aber mir wurde klar, dass auch andere davon profitieren können.
Anton