Wie überprüfe ich, ob Xvfb (bereits) auf dem Display läuft: 0?

17

Titel sagt alles. pgrep Xvfbmacht nur die Hälfte des Tricks. Es wird mir nicht die Display-Nummer sagen.

Paweł Gościcki
quelle

Antworten:

23

Ich bin nicht sicher, was Sie erreichen möchten, aber Sie können überprüfen, ob eine X-Anzeige verfügbar ist, indem Sie "x display info" ausführen:

xdpyinfo -display :0 >/dev/null 2>&1 && echo "In use" || echo "Free"

Hinweis: Wenn Sie nicht auf das Display zugreifen können, wird es ebenfalls als "Frei" gemeldet. Eine andere Möglichkeit besteht darin, zu überprüfen, ob /tmp/.X0-lockdie PID-Datei eines X-Servers vorhanden ist.

Anstatt den Befehl anzuzeigen, wäre es zuverlässiger, nach Prozessen zu suchen, die mit der Binärdatei übereinstimmen:

pids=$(pidof /usr/bin/Xvfb)
if [ -n "$pids" ]; then
    processes="$(ps --format command --no-headers -ww --pid $pids)"
else
    echo "Not running"
fi

Quelle: https://github.com/Bumblebee-Project/Bumblebee/blob/master/install-files/common-functions#L112

Lekensteyn
quelle
1
xdpyinfomacht den Trick für mich, danke! Btw. Ich möchte die DISPLAY env-Variable basierend auf Xvfb einstellen, das auf: 0 ausgeführt wird.
Paweł Gościcki
Sie versuchen also, die von Xvfb verwendete Anzeigenummer zu ermitteln? Versuchen Sie, den Befehl ps in meiner Antwort zu verwenden, und verwenden Sie so etwas wie display=":${processes##*:}";display="${%% *}", um die Anzeigenummer zu erhalten (vorausgesetzt, sie wird mit dem Befehl angegeben, der Xorgmindestens ausgeführt wird)
Lekensteyn,
Ich werde es nur laufen lassen :0, so dass eine einfache Überprüfung :0für meine Bedürfnisse ausreicht. Danke noch einmal!
Paweł Gościcki
Ich bin mit der Prozesskontrolle nicht einverstanden. Der Prozess kann ausgeführt werden, ist jedoch noch nicht vollständig initialisiert. xdpyinfo scheint eine bessere Lösung zu sein, da ich davon ausgehe, dass es mit Xvfb kommuniziert.
Nathan