บางครั้งฉันประสบปัญหาในการแสดงผลและส่วนใหญ่ฉันต้องการทราบว่าไฟล์หรือกระบวนการใดบ้างที่ใช้ตัวแปรสภาพแวดล้อม DISPLAY
ดังนั้นจะแสดงรายการกระบวนการทั้งหมดที่มีการตั้งค่าการแสดงผลได้อย่างไร
บางครั้งฉันประสบปัญหาในการแสดงผลและส่วนใหญ่ฉันต้องการทราบว่าไฟล์หรือกระบวนการใดบ้างที่ใช้ตัวแปรสภาพแวดล้อม DISPLAY
ดังนั้นจะแสดงรายการกระบวนการทั้งหมดที่มีการตั้งค่าการแสดงผลได้อย่างไร
คำตอบ:
ฉันมาถึงคำสั่งนี้หลังจากค้นหาหลายครั้งและลอง:
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/'
ตัวอย่างของผลลัพธ์คือ:
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
ในแต่ละไฟล์ ไฟล์เหล่านั้นอยู่ในกระบวนการทำงานจริง ๆ ดังนั้นทุกไฟล์ที่มีคำDISPLAY
ว่าหมายความว่ากระบวนการนี้ใช้งานอยู่ คุณไม่สามารถรับชื่อกระบวนการแบบเต็มได้เนื่องจากชื่อในเอาต์พุตเป็นชื่อไฟล์ที่ก่อตั้งขึ้น/proc
ดังนั้นคุณจึงไม่สามารถรู้ได้มากกว่าข้อเสนอ
ด้วยการดัดแปลงเล็กน้อยเพื่อสคริปต์ Maythux เรายังสามารถรับ PID ของกระบวนการโดยใช้ตัวแปร 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
ผลลัพธ์คือ:
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)
นั่นเป็นสคริปต์บรรทัดคำสั่งที่ดีงาม! ฉันจะทำสำเนาที่สคริปต์นั้นในกรณีที่ฉันต้องแฮ็คไฟล์เพื่อคิดอย่างอื่น
กระบวนการปัจจุบันทั้งหมดที่ตรงกับโปรแกรมที่คุณรันบนเครื่องโลคอลโพสต์ล็อกอินจะเป็นการดำเนินการกับตัวแปรการแสดงผลเดียวกับคอนโซล pts (pseudo-terminal session) ที่เปิดครั้งแรกของคุณ
ตัวอย่างเช่นเมื่อคุณเปิดเซสชันเทอร์มินัลแรกของคุณ (gnome-terminal) และเรียกใช้คำสั่ง who หรือ w คุณจะสังเกตเห็นผลลัพธ์บางอย่างเช่นนี้:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
หรือคนบางคนอาจมีลักษณะเช่นนี้ (แต่ไม่ใช่กรณีของคุณ)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
ใช้ light display manager หากตัวแปร DISPLAY ถูกตั้งค่าแตกต่างกันสำหรับการดำเนินการโพสต์เข้าสู่ระบบของเชลล์ (เช่น: 0.0) จากนั้นตัวแปรสภาพแวดล้อมสำหรับ DISPLAY จะให้ตัวแปรการแสดงผลเช่นเดียวกับตัวแปรการแสดงผลหลังการเข้าสู่ระบบ 0.0) แต่ตัวแปรโฮสต์ที่ล็อกอินจะยังคงเป็น (: 0)
ด้วยการสะท้อนตัวแปร DISPLAY หรือการตั้งค่า piped ให้น้อยลงดังแสดงด้านล่าง:
:~$ echo $DISPLAY
หรือ
:~$ set | less
คุณยังสามารถตรวจสอบตัวแปรการแสดงผลเซสชันปัจจุบันของคุณและดูว่ามันถูกตั้งค่าไว้สำหรับการดำเนินการโพสต์เข้าสู่ระบบของเปลือก ดังนั้นโดยทั่วไปแล้วตัวแปรการแสดงผลของกระบวนการที่คุณดำเนินการจะมีตัวแปรการแสดงผลเช่นเดียวกับ pts ที่เปิดครั้งแรกของคุณโพสต์ล็อกอิน
ผลลัพธ์ของสคริปต์ที่คุณโพสต์แนะนำว่า pts ที่เปิดครั้งแรกของคุณจะมีตัวแปรการแสดงผลเหมือนกับการเข้าสู่ระบบของผู้จัดการการแสดงผลของคุณในกรณีนี้: 0
ตอนนี้สำหรับตัวอย่างที่สองเอาต์พุตจะมีลักษณะดังนี้:
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)
นอกจากนี้สำหรับการอ่านเพิ่มเติมคุณสามารถดูหน้าคนสำหรับ ptmx
$ man ptmx
สิ่งนี้อาจทำให้คุณเข้าใจถึงความสัมพันธ์ระหว่างทาสกับเทอร์มินัลเทียม
ฉันหวังว่านี่จะช่วยได้!
คุณไปที่สคริปต์นั้นด้วยที่ไหน