Como saber quais processos têm a variável DISPLAY configurada?

6

Às vezes eu enfrento alguns problemas na exibição e principalmente quero saber quais arquivos ou processos estão usando a variável de ambiente DISPLAY.

Então, como listar todos os processos que tenham o DISPLAY configurado?

    
por Maythux 11.03.2014 / 09:48

3 respostas

11

Eu cheguei a este comando depois de muitas pesquisas e tentativas:

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/'

Uma amostra da saída é:

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)
    
por Maythux 11.03.2014 / 09:48
0

Isso é um script de linha de comando muito bacana! Eu vou fazer uma cópia nesse roteiro no caso de ter que cortar para descobrir outra coisa.

Idealmente, todos os processos atuais que correspondem aos programas que você executa na máquina local, após o login, carregam a mesma variável de exibição que seu primeiro console aberto (sessão de pseudo-terminal).

Por exemplo, quando você abre sua primeira sessão de terminal (gnome-terminal) e executa o comando who ou w, você notará alguma saída como esta:

$ who

yourusername   :0        2015-06-08 14:05 (:0)
yourusername   pts/0     2015-06-08 14:22 (:0)

ou algumas pessoas podem se parecer com isso (mas não é o seu caso)

yourusername   :0        2015-06-08 14:05 (:0)
yourusername   pts/0     2015-06-08 14:22 (:0.0)

usando o gerenciador de exibição de luz se a variável DISPLAY for configurada diferentemente para a execução de login dos shells (por exemplo: 0.0), então a variável de ambiente para DISPLAY produziria a mesma variável de exibição que a variável de exibição pós-login do primeiro pts (: 0.0), mas a variável do host, no login, ainda seria (: 0).

Fazendo eco na variável DISPLAY ou executando o conjunto de canais para menos conforme mostrado abaixo:

:~$ echo $DISPLAY

ou

:~$ set | less

você também pode verificar sua variável de exibição atual de sessões e ver para que ela está definida, para a execução do login de postagens. Então, basicamente, a variável de exibição dos processos que você executa terá a mesma variável de exibição de seus primeiros pts abertos, após o login.

A saída do script que você postou, sugere que seus primeiros pts abertos terão a mesma variável de exibição que o login do seu gerenciador de exibição, neste caso: 0.

Agora, para o segundo exemplo, a saída seria algo como isto:

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)

Também para leitura adicional, você pode ver as páginas man do ptmx

$ man ptmx

Isso pode lhe dar algumas dicas sobre a relação mestre-escravo de pseudo-terminais.

Espero que isso ajude!

Além disso, onde você conseguiu esse roteiro?

    
por oOpSgEo 08.06.2015 / 20:58
0

Com uma pequena modificação no script Maythux, também podemos obter o PID dos processos usando a variável 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

A saída é:

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)
    
por not2qubit 09.05.2018 / 10:44