Подтвердить что ты не робот

Как проверить, запущен ли сервер X?

Есть ли способ узнать, работает ли текущий пользователь сеанса 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 

Но я ищу способ script.

4b9b3361

Ответ 1

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

if ! xset q &>/dev/null; then
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2
    exit 1
fi

Ответ 2

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

Ответ 3

Я использую

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

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

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

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

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

Ответ 4

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

telnet 127.0.0.1 6000

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

Ответ 5

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

Возвращает 0, если X-сервер работает.

Ответ 6

xprop -root &> /dev/null 

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

Ответ 7

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
#

Ответ 8

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

Ответ 9

if [[ $DISPLAY ]]; then 
  …
fi

Ответ 10

Сначала вам нужно убедиться, что базовые пакеты 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 [email protected]_server.your_domain.com

Ответ 11

Для проверки это PHP script.

$xsession = `pidof X`;
if (!$xsession) {
    echo "There is no active X session, aborting..\n";
    exit;
}

Аналогичная команда может использоваться и в оболочке script. как команда pidof.

Ответ 12

Решение bash-скрипта:

if ! xset q &>/dev/null; then
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2
    exit 1
fi

Не работает, если вы входите в систему с другой консоли (Ctrl + Alt + F?) Или ssh. Для меня это решение работает в моем Archlinux:

#!/bin/sh
ps aux|grep -v grep|grep "/usr/lib/Xorg"
EXITSTATUS=$?
if [ $EXITSTATUS -eq 0 ]; then
  echo "X server running"
  exit 1
fi

Вы можете изменить /usr/lib/Xorg только для Xorg или для соответствующей команды в вашей системе.