Comment vérifier si le serveur X est en cours d'exécution?

y a-t-il un moyen de savoir si L'utilisateur de la session courante utilise un Xserver (sous Linux) ?

j'ai commencé avec des choses comme:

ps -e | grep X 

mais cela ne fonctionne pas toujours

et une autre chose que j'ai essayé est de vérifier le $DISPLAY variable

existe-il d'autres moyens de le vérifier?

modifier: Certaines personnes ont suggéré d'utiliser les variables $ DISPLAY mais que se passe-t-il si l'utilisateur manipule cette variable ? que si il essaie de le faire quelque chose et change cette variable et quand je la vérifie, elle ne reflète plus un état précis du système. N'est-il pas de façon spécifique de faire ce qui retourne toujours une réponse correcte ?

j'ai trouvé qu'il peut être fait par programmation ainsi:

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

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

Mais je suis à la recherche d'un script.

43

11 réponses

j'ai souvent besoin d'exécuter une commande X sur un serveur qui exécute de nombreux serveurs X, donc ps réponses ne fonctionnent pas. Naturellement, $DISPLAY doit être réglé de manière appropriée. Pour vérifier que cela est valide, utilisez xset q dans un fragment comme:

if ! xset q &>/dev/null; then
    echo "No X server at $DISPLAY [$DISPLAY]" >&2
    exit 1
fi
47
répondu bobbogo 2012-08-15 07:52:41

$AFFICHAGE est la façon standard. C'est ainsi que les utilisateurs communiquent avec les programmes sur le serveur X à utiliser, le cas échéant.

17
répondu Ken 2009-03-12 01:38:21

j'utilise

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

pgrep et $ DISPLAY sont d'autres options.

d'Autres considérations:

su alors $DISPLAY ne sera pas défini. Les choses qui changent l'environnement du programme en cours d'exécution peuvent faire que cela ne fonctionne pas.

Je ne recommande pas ps-E / grep X car cela va trouver procX, qui n'est pas le serveur X.

7
répondu Ian Kelling 2009-03-12 02:58:49

un truc que j'utilise pour dire si X est en cours d'exécution est:

telnet 127.0.0.1 6000

si elle se connecte, vous avez un serveur X en cours d'exécution et il accepte les connexions TCP entrantes (ce n'est généralement pas le cas par défaut ces jours-ci)....

6
répondu dicroce 2009-03-12 01:48:35

exécuter xdpyinfo et voir si elle renvoie un zéro

6
répondu shuckc 2013-06-14 15:23:37

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
#
3
répondu vitaly.v.ch 2009-03-12 08:53:45
xprop -root &> /dev/null 

...est mon vrais commande pour tester un "X" de la situation. Et, il est à peu près garanti d'être sur n'importe quel système fonctionnant avec X, bien sûr, la commande échoue si elle n'est pas trouvée de toute façon, donc même si elle n'existe pas, vous pouvez à peu près supposer qu'il n'y a pas de X non plus. (c'est pourquoi j'ai d'utilisation et d'> au lieu de >)

3
répondu osirisgothra 2014-10-27 15:56:44

j'ai écrit xdpyprobe programme qui est prévu à cet effet. Contrairement à xset, xdpyinfo et d'autres outils généraux, il ne fait pas d'actions supplémentaires (il vérifie simplement le serveur X et les sorties) et ne peut pas produire de sortie (si l'option "-q" est spécifiée).

1
répondu Alex Kost 2016-04-03 05:12:52

vous devez d'Abord vous assurer fondamentaux X11 paquets sont correctement installés sur votre serveur:

rpm -qa | grep xorg-x11-xauth

si ce n'est pas le cas, veuillez installer tous les paquets :

sudo yum install xorg-x11-xauth xterm

S'assurer que le serveur openssh est configuré pour transmettre les connexions x11:

edit file : vim /etc/ssh/sshd_config

X11Forwarding yes

NOTE : si cette ligne est précédée d'un commentaire (#) ou est définie à no, mettez à jour le fichier pour correspondre à ce qui précède, et redémarrez votre démon SSH server (faites attention ici - si vous avez fait une erreur, vous pouvez vous verrouiller vous-même de du serveur)

sudo /etc/init.d/sshd restart

maintenant, configurez l'application SSH pour transmettre les requêtes X11:

ssh -Y your_username@your_server.your_domain.com
1
répondu Srijan Chaudhary 2017-06-19 20:41:48

c'est un script PHP à vérifier.

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

une commande similaire peut aussi être utilisée dans le script shell. comme la commande pidof.

0
répondu user3607430 2016-10-17 10:21:05
if [[ $DISPLAY ]]; then 
  …
fi
0
répondu Serge Stroobandt 2017-10-16 20:37:48