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.
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
$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.
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.
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)....
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 #
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 >)
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).
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
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.