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