Как проверить, работает ли X-сервер? - PullRequest
52 голосов
/ 12 марта 2009

Есть ли способ узнать, работает ли текущий пользователь сеанса с Xserver (под Linux)?

Я начал с таких вещей, как:

ps -e | grep X 

но это не всегда работает

и еще одна вещь, которую я попробовал, это проверка переменной $DISPLAY

Есть ли другие способы проверить это?

EDIT: Некоторые люди предлагали использовать переменные $ DISPLAY, но что если пользователь возится с этой переменной? Что делать, если он пытается что-то сделать и изменяет эту переменную, а затем, когда я проверяю ее, она больше не отражает точное состояние системы. Нет ли конкретного способа сделать это, который всегда будет давать правильный ответ?

Я обнаружил, что это можно сделать программно таким образом:

#include <X11/Xlib.h> 
int main()
    { exit(XOpenDisplay(NULL) ? 0 : 1);  } 

$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11 

Но я ищу сценарий.

Ответы [ 12 ]

54 голосов
/ 15 августа 2012

Мне часто нужно запускать команду X на сервере, на котором работает много серверов X, поэтому ответы на основе ps не работают. Естественно, $DISPLAY должен быть установлен соответствующим образом. Чтобы проверить, что это действительно, используйте xset q в некотором фрагменте, таком как:

if ! xset q &>/dev/null; then
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2
    exit 1
fi
17 голосов
/ 12 марта 2009

$ DISPLAY - это стандартный способ. Именно так пользователи общаются с программами о том, какой X-сервер использовать, если таковой имеется.

9 голосов
/ 12 марта 2009

Я использую

pidof X && echo "yup X server is running"

pgrep и $ DISPLAY - другие варианты.

Другие соображения:

su, тогда $ DISPLAY не будет установлен. Вещи, которые изменяют среду выполнения программы, могут заставить это не работать.

Я не рекомендую ps -e | grep X, поскольку это найдет procX, который не является X-сервером.

8 голосов
/ 12 марта 2009

Один трюк, который я использую, чтобы узнать, работает ли X:

телнет 127.0.0.1 6000

Если он подключается, у вас работает X-сервер и он принимает входящие TCP-подключения (обычно это не по умолчанию в наши дни) ....

6 голосов
/ 14 июня 2013

Вы можете использовать xdpyinfo (может быть установлен через apt-get install x11-utils).

4 голосов
/ 27 октября 2014
xprop -root &> /dev/null 

... - это моя проверенная и проверенная команда для проверки ситуации "X-able". И это в значительной степени гарантированно будет в любой системе, в которой работает X, конечно, команда не выполнится, если не найдется, так что даже если она не существует, вы можете в значительной степени предположить, что X также не существует. (именно поэтому я использую &> вместо>)

3 голосов
/ 12 марта 2009

1)

# netstat -lp|grep -i x
tcp        0      0 *:x11                   *:*                     LISTEN      2937/X          
tcp6       0      0 [::]:x11                [::]:*                  LISTEN      2937/X          
Active UNIX domain sockets (only servers)
unix  2      [ ACC ]     STREAM     LISTENING     8940     2937/X              @/tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     8941     2937/X              /tmp/.X11-unix/X0
#

2) nmap

# nmap localhost|grep -i x
6000/tcp open  X11
#
2 голосов
/ 03 апреля 2016

Я написал xdpyprobe программу, которая предназначена для этой цели. В отличие от xset, xdpyinfo и других общих инструментов, он не выполняет никаких дополнительных действий (просто проверяет X-сервер и завершает работу) и может не выдавать никаких выходных данных (если указана опция -q).

1 голос
/ 16 октября 2017
if [[ $DISPLAY ]]; then 
  …
fi
1 голос
/ 25 января 2017

Сначала необходимо убедиться, что базовые пакеты X11 правильно установлены на вашем сервере:

rpm -qa | grep xorg-x11-xauth

Если нет, пожалуйста, установите все пакеты:

sudo yum install xorg-x11-xauth xterm

Убедитесь, что сервер openssh настроен для пересылки соединений x11:

edit file : vim /etc/ssh/sshd_config

X11Forwarding yes

ПРИМЕЧАНИЕ. Если этой строке предшествует комментарий (#) или задано значение no, обновите файл в соответствии с приведенным выше описанием и перезапустите демон ssh-сервера (будьте осторожны - если вы допустили ошибку, вы можете заблокировать себя) вне сервера)

sudo /etc/init.d/sshd restart

Теперь настройте приложение SSH для пересылки запросов X11:

ssh -Y your_username@your_server.your_domain.com
...