Jak sprawdzić, czy Xvfb działa (już) na wyświetlaczu: 0?

17

Tytuł mówi wszystko. pgrep Xvfbrobi tylko połowę lewy. Nie powie mi numer wyświetlacza.

Paweł Gościcki
źródło

Odpowiedzi:

23

Nie jestem pewien, co próbujesz osiągnąć, ale możesz sprawdzić, czy X Display jest dostępny, uruchamiając „x display info”:

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

Uwaga: jeśli nie możesz uzyskać dostępu do wyświetlacza, zostanie również zgłoszony jako „bezpłatny”. Innym sposobem jest sprawdzenie, czy istnieje /tmp/.X0-lockplik PID serwera X.

Zamiast wyświetlać polecenie, bardziej niezawodnym sposobem byłoby sprawdzenie procesów pasujących do pliku binarnego:

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

Źródło: https://github.com/Bumblebee-Project/Bumblebee/blob/master/install-files/common-functions#L112

Lekensteyn
źródło
1
xdpyinfozałatwia sprawę, dzięki! Btw. Chcę ustawić zmienną DISPLAY env w oparciu o Xvfb działający na: 0.
Paweł Gościcki,
Więc próbujesz uzyskać numer wyświetlany używany przez Xvfb? Spróbuj użyć polecenia ps w mojej odpowiedzi i użyj czegoś takiego, display=":${processes##*:}";display="${%% *}"aby uzyskać numer wyświetlacza (zakładając, że podano go z poleceniem, które jest wykonywane Xorgprzynajmniej)
Lekensteyn
Będę go uruchamiał tylko :0dlatego, że :0wystarczy proste sprawdzenie dla moich potrzeb. Dzięki jeszcze raz!
Paweł Gościcki
Nie zgadzam się z kontrolą procesu. Proces może być uruchomiony, ale nie został w pełni zainicjowany. xdpyinfo wydaje się lepszym rozwiązaniem, ponieważ zakładam, że komunikuje się z Xvfb.
Nathan