Risposte:
Sono arrivato a questo comando dopo molte ricerche e tentativi:
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/'
Un esempio dell'output è:
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
ogni file. Quei file sono in realtà i processi in esecuzione, quindi ogni file contenente la parola DISPLAY
significa che questo processo lo sta utilizzando. Non è possibile ottenere il nome completo del processo poiché i nomi nell'output sono i nomi dei file trovati ion /proc
quindi semplicemente non si può sapere più di quello offerto.
Con una piccola modifica allo script Maythux, possiamo anche ottenere il PID dei processi usando la variabile 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
L'output è:
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)
Ecco alcuni script di riga di comando piuttosto eleganti! Ne farò una copia in quella sceneggiatura nel caso dovessi hackerarla per capire qualcos'altro.
Idealmente tutti i processi correnti che corrispondono ai programmi che esegui sul computer locale, dopo l'accesso, porteranno la stessa variabile di visualizzazione della tua prima console pts aperta (sessione pseudo-terminale).
Ad esempio, quando apri la tua prima sessione di terminale (gnome-terminal) ed esegui il comando who o w noterai alcuni output come questo:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
o alcune persone potrebbero apparire così (ma non è il tuo caso)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
usando il display display light se la variabile DISPLAY è impostata diversamente per l'esecuzione post-login delle shell (es. 0.0), la variabile d'ambiente per DISPLAY produrrebbe la stessa variabile display della variabile display post-login dei primi punti aperti (: 0.0), ma la variabile host, al momento dell'accesso, sarebbe comunque (: 0).
Facendo eco alla variabile DISPLAY, o eseguendo il set impostato su less come mostrato di seguito:
:~$ echo $DISPLAY
o
:~$ set | less
puoi anche controllare la variabile di visualizzazione corrente delle tue sessioni e vedere su cosa è impostata, per l'esecuzione post shell delle shell. Quindi sostanzialmente la variabile di visualizzazione dei processi che esegui, avrà la stessa variabile di visualizzazione dei tuoi primi punti aperti, dopo l'accesso.
L'output dello script che hai postato suggerisce che i tuoi primi pts aperti avranno la stessa variabile di visualizzazione dell'account di accesso del tuo display manager, in questo caso: 0.
Ora per il secondo esempio l'output sarebbe simile a questo:
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)
Inoltre per ulteriori letture puoi consultare le pagine man di ptmx
$ man ptmx
Questo potrebbe darti un'idea della relazione master-slave degli pseudo-terminali.
Spero che questo possa essere d'aiuto!
Inoltre dove hai preso quella sceneggiatura?