¿Cómo saber qué procesos tienen establecida la variable DISPLAY?


8

A veces me enfrento a algunos problemas de visualización y, sobre todo, quiero saber qué archivos o procesos están utilizando la variable de entorno DISPLAY.

Entonces, ¿cómo enumerar todos los procesos que tienen configurado DISPLAY?

Respuestas:


13

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)

1
Buena solución ¿Podría por favor agregar alguna explicación de lo que sucede detrás de escena? Además, la salida es cropt, ¿qué puedo hacer para obtener los nombres completos de los procesos?
Danatela

1
Este comando busca recursivamente en el directorio / proc. grep para el DISPLAYen cada archivo. Esos archivos están realmente en los procesos que se ejecutan, por lo que cada archivo que contiene la palabra DISPLAYsignifica 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, /procpor lo que simplemente no puede saber más de lo ofrecido.
Maythux

1
Por favor, edite su respuesta y solo informe al usuario que ha actualizado su publicación.
Braiam

Había desordenado la variable DISPLAY env y quería saber cuáles eran los valores de DISPLAY antes de cambiarla, no conozco ningún comando que pueda contarme sobre su historial, así que al usar este comando descubrí qué procesos anteriores tenían Utilicé qué valor de DISPLAY y mi problema se resolvió.
yaxe

1

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)

0

¡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?

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.