Jawaban:
Saya datang ke perintah ini setelah banyak pencarian dan mencoba:
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/'
Contoh dari output adalah:
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
setiap file. File-file itu benar-benar dalam proses yang berjalan sehingga setiap file yang mengandung kata DISPLAY
berarti bahwa proses ini menggunakannya. Anda tidak bisa mendapatkan nama proses lengkap karena nama-nama dalam output adalah nama file yang didirikan /proc
sehingga Anda tidak bisa tahu lebih banyak dari yang ditawarkan.
Dengan sedikit modifikasi pada skrip Maythux, kita juga bisa mendapatkan PID dari proses menggunakan variabel 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
Outputnya adalah:
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)
Itulah beberapa skrip baris perintah yang cukup bagus! Saya akan membuat salinan di skrip itu jika saya harus meretasnya untuk mencari sesuatu yang lain.
Idealnya semua proses saat ini yang sesuai dengan program yang Anda jalankan pada mesin lokal, posting login, akan membawa variabel tampilan yang sama dengan konsol pts (sesi semu-terminal) pertama Anda.
Sebagai contoh ketika Anda membuka sesi terminal pertama Anda (gnome-terminal) dan menjalankan perintah who atau w Anda akan melihat beberapa output seperti ini:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
atau beberapa orang mungkin terlihat seperti ini (tetapi bukan itu kasus Anda)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
menggunakan light display manager jika variabel DISPLAY diatur secara berbeda untuk eksekusi shell setelah masuk (misalnya: 0,0), maka variabel lingkungan untuk DISPLAY akan menghasilkan variabel tampilan yang sama dengan variabel tampilan pasca-masuk dari titik terbuka pertama (: 0,0), tetapi variabel host, saat login, masih tetap (: 0).
Dengan menggemakan variabel DISPLAY, atau menjalankan set piped menjadi kurang seperti yang ditunjukkan di bawah ini:
:~$ echo $DISPLAY
atau
:~$ set | less
Anda juga dapat memeriksa sesi Anda variabel tampilan saat ini, dan melihat apa yang diatur, untuk eksekusi shell setelah posting login. Jadi pada dasarnya variabel tampilan dari proses yang Anda jalankan, akan memiliki variabel tampilan yang sama dengan Poin terbuka pertama Anda, setelah login.
Output dari skrip yang Anda posting, menunjukkan bahwa Poin terbuka pertama Anda akan memiliki variabel tampilan yang sama dengan login manajer tampilan Anda, dalam hal ini: 0.
Sekarang untuk contoh kedua output akan terlihat seperti ini:
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)
Juga untuk bacaan tambahan Anda dapat melihat halaman manual untuk ptmx
$ man ptmx
Ini mungkin memberi Anda wawasan tentang hubungan master-slave dari pseudo-terminal.
Saya harap ini membantu!
Di mana Anda mendapatkan skrip itu?