GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo obtener el número de pantalla que me asignó X

Si conoce un ID de proceso que se ejecuta en la sesión del usuario y tiene permiso para acceder a la información de ese proceso, puede grep su entorno para el DISPLAY variables:

cat /proc/$pid/environ | tr '\0' '\n' | grep ^DISPLAY=

Como ejemplo, para enumerar todas las pantallas principales utilizadas por su UID en la computadora actual, use:

ps -u $(id -u) -o pid= \
    | xargs -I PID -r cat /proc/PID/environ 2> /dev/null \
    | tr '\0' '\n' \
    | grep ^DISPLAY=: \
    | sort -u

Si solo ha iniciado sesión en una sesión X, lo anterior debería generar solo una línea con algo como DISPLAY=:0 .


En la sesión X, siempre puedes consultar el DISPLAY variable de entorno para obtener su número de visualización actual (echo $DISPLAY ).

Descubrir otros Mostrar números es más difícil. No creo que haya una forma estándar de obtener la información que no sea preguntar a todos los usuarios a qué pantalla están conectados, por lo que cualquier intento de obtener esta información requiere algún tipo de piratería y no funcionará en todos los casos.

Hay algunas opciones en otros lugares de SE, pero no funcionarán en Debian Wheezy, por ejemplo. Sin embargo, enumerar las pantallas actualmente activas es fácil, como se muestra en la publicación que vinculé arriba:

ps axu | grep "X " le mostrará los procesos X que se están ejecutando actualmente, algo como lo siguiente:

root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:58 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a

El primer parámetro después de /usr/bin/X es el número de pantalla precedido por dos puntos, y el siguiente le muestra el terminal virtual asignado a la sesión.

Sin embargo, puede obtener su respuesta mirando la lista de procesos:

ps axu |grep -3 "X "

root      1990  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1991  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1992  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      2359  0.0  0.0   5264  2228 ?        S    Sep15   0:00 -:1            
user_1     2378  0.0  0.0   4920  1348 ?        Ss   Sep15   0:00 /bin/sh /usr/bin/startkde
user_1     2443  0.0  0.0   3868   348 ?        Ss   Sep15   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/openbox-kde-session
--
root      7500  0.0  0.0   6460  1080 ?        Ss   Sep14   0:00 /usr/sbin/sshd
ntp       7841  0.0  0.0   5352  1760 ?        Ss   Sep14   0:17 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:111
root      7882  0.0  0.0   3964   716 ?        Ss   Sep14   0:00 /usr/bin/kdm -config /var/run/kdm/kdmrc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:59 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a
root      7906  0.0  0.0   5260  2224 ?        S    Sep14   0:00 -:0            
user_2    7925  0.0  0.0  12924  1560 ?        Ssl  Sep14   0:00 /usr/bin/lxsession -s LXDE -e LXDE
user_2    7990  0.0  0.0   3868   348 ?        Ss   Sep14   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/startlxde

Mira las líneas después de /usr/bin/X - cuando se inicia la sesión X, normalmente se inicia un administrador de ventanas como el usuario al que pertenece la sesión, y allí obtiene el nombre de usuario. En mi caso, user_1 usa KDE y user_2 usa LXDE. Sin embargo, esta solución se basa únicamente en el hecho de que el kernel asigna nuevos ID de proceso en secuencia ascendente, lo que podría no ser siempre el caso.


Esta respuesta tiene una sola línea, basada en who &grep

https://askubuntu.com/a/230838/152287

who se puede abreviar como w

puede leer más en el enlace que incluye una sola línea para obtener el valor.

Funciona. Aquí está la salida de raspberrypi (rasbian), donde el valor de visualización está en la columna DESDE

[email protected]:~ $ w
 19:19:30 up  8:15,  2 users,  load average: 0.12, 0.11, 0.09
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
pi       tty7     :0               11:04    8:15m  1:15   0.89s /usr/bin/lxsess
tim      pts/0    192.168.0.29     19:17    0.00s  1.00s  0.09s w

Linux
  1. ¿Cómo funcionan las partes internas de Sudo?

  2. ¿Cómo obtener el tipo de lector de tarjetas interno?

  3. ¿Cómo obtener la cantidad de CPU en Linux usando C?

  4. Cómo cambiar la contraseña de root mysql

  5. Cómo obtener solo el número de líneas de un archivo

Cómo ha crecido el escritorio de Linux

Cómo obtener el tamaño de un directorio en Linux

Cómo aprovechar al máximo Qmmp 1.0

Cómo encontrar el número de puerto de un servicio en Linux

Cómo obtener la cantidad de procesadores/núcleos en Linux

Cómo cambiar la contraseña de root en Linux