linux - gui - ¿Cómo verificar si el servidor X se está ejecutando?
ubuntu server 17.10 install gui (11)
$ DISPLAY es la forma estándar. Así es como los usuarios se comunican con los programas sobre qué servidor X usar, si lo hay.
¿Hay alguna forma de averiguar si el usuario de la sesión actual está ejecutando un Xserver (en Linux)?
Empecé con cosas como:
ps -e | grep X
pero esto no funciona siempre
y una cosa más que probé es verificar la variable $DISPLAY
¿Hay alguna otra forma de verificar esto?
EDITAR: Algunas personas sugirieron usar las variables $ DISPLAY, pero ¿qué sucede si el usuario juega con esta variable? ¿Qué pasa si él trata de hacer algo y cambia esta variable y luego cuando la reviso, ya no refleja un estado preciso del sistema? ¿No hay una forma específica de hacer esto que siempre devolverá una respuesta correcta?
Descubrí que se puede hacer programáticamente así:
#include <X11/Xlib.h>
int main()
{ exit(XOpenDisplay(NULL) ? 0 : 1); }
$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11
Pero estoy buscando una forma de script.
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 #
A menudo necesito ejecutar un comando X en un servidor que ejecuta muchos servidores X, por lo que las respuestas basadas en ps
no funcionan. Naturalmente, $DISPLAY
tiene que establecerse adecuadamente. Para verificar que eso sea válido, use xset q
en algún fragmento como:
if ! xset q &>/dev/null; then
echo "No X server at /$DISPLAY [$DISPLAY]" >&2
exit 1
fi
Escribí el programa xdpyprobe que está destinado para este propósito. A diferencia de xset, xdpyinfo y otras herramientas generales, no realiza ninguna acción adicional (solo comprueba el servidor X y sale) y es posible que no produzca ningún resultado (si se especifica la opción "-q").
Este es un script PHP para verificar.
$xsession = `pidof X`;
if (!$xsession) {
echo "There is no active X session, aborting../n";
exit;
}
Comando similar también se puede usar en script de shell. como el comando pidof.
Primero, debe asegurarse de que los paquetes fundacionales de X11 estén instalados correctamente en su servidor:
rpm -qa | grep xorg-x11-xauth
Si no es así, instale amablemente todos los paquetes:
sudo yum install xorg-x11-xauth xterm
Asegúrese de que el servidor openssh esté configurado para reenviar conexiones x11:
edit file : vim /etc/ssh/sshd_config
X11Forwarding yes
NOTA: Si esa línea está precedida por un comentario (#) o está configurada en no, actualice el archivo para que coincida con el anterior y reinicie su daemon del servidor ssh (tenga cuidado aquí; si cometió un error, puede bloquearlo). servidor)
sudo /etc/init.d/sshd restart
Ahora, configure la aplicación SSH para reenviar solicitudes X11:
ssh -Y your_username@your_server.your_domain.com
Un truco que uso para decir si X se está ejecutando es:
telnet 127.0.0.1 6000
Si se conecta, tiene un servidor X ejecutándose y aceptando conexiones entrantes de TCP (generalmente no es el predeterminado actualmente) ....
ejecutar xdpyinfo
y ver si devuelve un cero
yo suelo
pidof X && echo "yup X server is running"
pgrep y $ DISPLAY son otras opciones.
Otras Consideraciones:
su luego $ DISPLAY no se establecerá. Las cosas que cambian el entorno del programa en ejecución pueden hacer que esto no funcione.
No recomiendo ps -e | grep X ya que este buscará procX, que no es el servidor X.
if [[ $DISPLAY ]]; then
…
fi
xprop -root &> /dev/null
... es mi comando probado y verdadero para probar una situación de "X-able". Y, está casi garantizado que estará en cualquier sistema que ejecute X, por supuesto, el comando falla si no se encuentra de todos modos, por lo que incluso si no existe, puede suponer que tampoco hay X. (Es por eso que uso &> en lugar de>)