Respuestas:
Llegué a este comando después de muchas búsquedas e intentos:
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '(.*)' $file/stat; done | sed 'N;s/\n/\t/'
Una muestra de la salida es:
DISPLAY=:0 (unity-files-dae)
DISPLAY=:0 (unity-music-dae)
DISPLAY=:0 (unity-lens-vide)
DISPLAY=:0 (zeitgeist-daemo)
DISPLAY=:0 (zeitgeist-fts)
DISPLAY=:0 (zeitgeist-datah)
DISPLAY=:0 (cat)
DISPLAY=:0 (unity-scope-vid)
DISPLAY=:0 (unity-musicstor)
DISPLAY=:0 (dconf-service)
DISPLAY=:0 (gdu-notificatio)
DISPLAY=:0 (telepathy-indic)
DISPLAY=:0 (mission-control)
DISPLAY=:0 (goa-daemon)
DISPLAY=:0 (VBoxXPCOMIPCD)
DISPLAY
en cada archivo. Esos archivos están realmente en los procesos que se ejecutan, por lo que cada archivo que contiene la palabra DISPLAY
significa que este proceso lo está utilizando. No puede obtener el nombre completo del proceso ya que los nombres en la salida son los nombres de los archivos fundados, /proc
por lo que simplemente no puede saber más de lo ofrecido.
Con una pequeña modificación al script Maythux, también podemos obtener el PID de los procesos usando la variable DISPLAY.
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '[0-9]* (.*)' $file/stat; done | sed 'N;s/\n/\t/' |column -t |sort -n -k2
El resultado es:
DISPLAY=:0 590 (lxsession)
DISPLAY=:0 645 (unclutter)
DISPLAY=:0 705 (gvfsd)
DISPLAY=:0 710 (gvfsd-fuse)
DISPLAY=:0 727 (openbox)
DISPLAY=:0 729 (lxpolkit)
DISPLAY=:0 732 (lxpanel)
DISPLAY=:0 734 (pcmanfm)
DISPLAY=:0 772 (menu-cached)
DISPLAY=:0 781 (gvfs-udisks2-vo)
DISPLAY=:0 791 (gvfs-gphoto2-vo)
DISPLAY=:0 795 (gvfs-mtp-volume)
DISPLAY=:0 799 (gvfs-afc-volume)
DISPLAY=:0 804 (gvfs-goa-volume)
DISPLAY=:0 816 (gvfsd-trash)
DISPLAY=:0 21053 (npm)
DISPLAY=:0 21102 (sh)
DISPLAY=:0 21103 (sh)
DISPLAY=:0 21104 (node)
DISPLAY=:0 21110 (electron)
DISPLAY=:0 21112 (electron)
DISPLAY=:0 21149 (electron)
DISPLAY=:0 21154 (electron)
DISPLAY=:0 21180 (rec)
¡Eso es una secuencia de comandos de línea de comando bastante ingeniosa! Voy a hacer una copia de ese guión en caso de que tenga que hackearlo para descubrir otra cosa.
Idealmente, todos los procesos actuales que corresponden a los programas que ejecuta en la máquina local, después del inicio de sesión, llevarán la misma variable de visualización que su primera consola abierta de pts (sesión de pseudo-terminal).
Por ejemplo, cuando abra su primera sesión de terminal (gnome-terminal) y ejecute el comando who o w, notará algunos resultados como este:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
o algunas personas podrían verse así (pero no es su caso)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
usando el administrador de visualización de luz si la variable DISPLAY se configura de manera diferente para la ejecución de shells después del inicio de sesión (por ejemplo: 0.0), entonces la variable de entorno para DISPLAY produciría la misma variable de visualización que la variable de visualización posterior al inicio de sesión de los primeros pts abiertos (: 0.0), pero la variable del host, al iniciar sesión, seguiría siendo (: 0).
Haciendo eco de la variable DISPLAY, o ejecutando el conjunto canalizado a menos como se muestra a continuación:
:~$ echo $DISPLAY
o
:~$ set | less
también puede verificar la variable de visualización actual de sus sesiones y ver en qué está configurada para la ejecución de shells después del inicio de sesión. Básicamente, la variable de visualización de los procesos que ejecutas tendrá la misma variable de visualización que tus primeros pts abiertos, inicio de sesión posterior.
El resultado del script que publicó, sugiere que sus primeros pts abiertos tendrán la misma variable de visualización que el inicio de sesión de su administrador de visualización, en este caso: 0.
Ahora para el segundo ejemplo, la salida se vería así:
DISPLAY=:0.0 (gvfs-udisks2-vo)
DISPLAY=:0.0 (zeitgeist-daemo)
DISPLAY=:0.0 (zeitgeist-fts)
DISPLAY=:0.0 (zeitgeist-datah)
DISPLAY=:0.0 (gvfs-mtp-volume)
DISPLAY=:0.0 (gvfs-gphoto2-vo)
DISPLAY=:0.0 (gvfs-afc-volume)
DISPLAY=:0.0 (geyes_applet2)
DISPLAY=:0.0 (indicator-apple)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (python)
DISPLAY=:0.0 (gvfsd-trash)
DISPLAY=:0.0 (indicator-keybo)
DISPLAY=:0.0 (gvfsd-burn)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (gnome-terminal)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (sed)
También para leer más, puede consultar las páginas del manual para ptmx
$ man ptmx
Esto podría brindarle una idea de la relación maestro-esclavo de los pseudo terminales.
¡Espero que esto ayude!
Además, ¿de dónde sacaste ese guión?