Odpowiedzi:
Podszedłem do tego polecenia po wielu wyszukiwaniach i próbach:
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/'
Przykładem wyniku jest:
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
każdego pliku. Te pliki są w trakcie działania, więc każdy plik zawierający słowo DISPLAY
oznacza, że ten proces go używa. Nie możesz uzyskać pełnej nazwy procesu, ponieważ nazwy na wyjściu są nazwami założonymi, /proc
więc po prostu nie możesz wiedzieć więcej niż oferowana.
Po niewielkiej modyfikacji skryptu Maythux możemy również uzyskać PID procesów za pomocą zmiennej 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
Dane wyjściowe to:
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)
To całkiem fajne skrypty z wiersza poleceń! Zrobię kopię tego skryptu na wypadek, gdybym musiał go zhakować, żeby wymyślić coś innego.
Idealnie wszystkie obecne procesy, które odpowiadają programom uruchamianym na komputerze lokalnym, po zalogowaniu, będą miały tę samą zmienną wyświetlania, co pierwsza otwarta konsola pts (sesja pseudo-terminalowa).
Na przykład, gdy otworzysz pierwszą sesję terminala (gnome-terminal) i uruchomisz komendę who lub w, zauważysz następujące wyniki:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
lub niektórzy ludzie mogą wyglądać tak (ale nie w twoim przypadku)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
za pomocą menedżera wyświetlania światła, jeśli zmienna DISPLAY jest ustawiona inaczej dla wykonania powłok po zalogowaniu (np .: 0,0), to zmienna środowiskowa dla DISPLAY dałaby tę samą zmienną wyświetlania, jak zmienna wyświetlania po zalogowaniu dla pierwszych otwartych pkt (: 0.0), ale zmienna hosta, przy logowaniu, nadal będzie (: 0).
Przez echo zmiennej DISPLAY lub uruchomienie zestawu potoków do mniej, jak pokazano poniżej:
:~$ echo $DISPLAY
lub
:~$ set | less
możesz także sprawdzić bieżącą zmienną wyświetlaną sesji i zobaczyć, co jest ustawione, do wykonania powłoki po zalogowaniu. Zasadniczo więc zmienna wyświetlana procesów, które wykonujesz, będzie miała tę samą zmienną wyświetlaną, co twoje pierwsze otwarte pts, po zalogowaniu.
Dane wyjściowe skryptu, który opublikowałeś, sugerują, że twoje pierwsze otwarte punkty będą miały tę samą zmienną wyświetlania, co login menedżera wyświetlania, w tym przypadku: 0.
Teraz w drugim przykładzie dane wyjściowe wyglądałyby mniej więcej tak:
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)
Również dla dodatkowej lektury możesz zajrzeć na strony podręcznika ptmx
$ man ptmx
Może to dać ci wgląd w relację pseudo-terminali.
Mam nadzieję, że to pomoże!
Skąd masz ten skrypt?