เป็นไปได้ไหมที่จะเรียกกระบวนการ / ชื่อหน้าต่างที่ใช้งานอยู่ใน Gnome?


28

ฉันต้องการวิธีแก้ปัญหาในการรับข้อมูลหน้าต่างแอคทีฟ (เน้น) ปัจจุบันบนเดสก์ท็อป Gnome 2 ฉันส่วนใหญ่สนใจกระบวนการที่เรียกใช้ชื่อหน้าต่างและหน้าต่างนั้น

มันเป็นไปได้?

วิธีการแก้:

รับชื่อหน้าต่าง:

xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1

รับชื่อกระบวนการ:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

หรือ:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

คำตอบ:


17

คุณสามารถใช้xdotoolซึ่งเป็นเครื่องมืออัตโนมัติหน้าต่าง X อเนกประสงค์

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(ฉันไม่รู้ว่าความแตกต่างระหว่างการโฟกัสและการใช้งานคืออะไร)

(ฉันคิดว่าwmctrlสามารถทำสิ่งนี้ได้ แต่ไม่ชัดเจน)


26

มันง่ายเหมือนอย่างนี้:

xdotool getactivewindow getwindowname

ขอให้โชคดีมันเหมาะกับคุณ!


ผลงานนี้ทุกคนสามารถอธิบายได้หรือไม่ว่าทำไมมันจึงถูกลดระดับลง
lfzawacki

8

ที่เรียบง่าย (IMO) มากกว่าการแก้ปัญหาของ OP (เช่นโดยไม่ต้องps, grepและawk) จะได้รับชื่อกระบวนการ:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

หรือถ้าคุณต้องการจุดสิ้นสุดของบรรทัด:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)

ใช่cat /proc/มันดี (และเร็วกว่าเพราะมันไม่ได้เกี่ยวข้องกับการpsเอาออกทั้งหมด) ฉันเพิ่มลงในโซลูชันในเนื้อหาคำถามดังนั้นผู้ใช้ในอนาคตจะสามารถค้นหาได้
Rogach

4

ลองใช้คำสั่ง xwininfo http://www.xfree86.org/4.2.0/xwininfo.1.htmlมันจะส่งคืนชื่อหน้าต่างอย่างแน่นอนและตราบใดที่กระบวนการดำเนินไปด้วย ...

X ได้กำหนด ID และกลายเป็น PID หลักของหน้าต่างและจะปกปิดโดยค่าเริ่มต้นดังนั้นสมมติว่า Gnome ได้รับการสนับสนุน NET_WM_PID เนื่องจากโปรแกรมปรับปรุงนี้จากปี 2001 ระบุว่ามีhttp://mail.gnome.org/ archives / gtk-devel-list / 2001-October / msg00238.htmlจากนั้นเราสามารถตรวจสอบโพสต์นี้http://www.mail-archive.com/devel@xfree86.org/msg05809.htmlที่ผู้เขียนเขียน โปรแกรม C สั้น ๆ เพื่อแปลง Window ID เป็น PID, voila


แต่ดูเหมือนว่าxwininfoฉันต้องเลือกหน้าต่างที่ต้องการด้วยตนเอง ฉันหวังว่าจะได้หน้าต่างที่เน้นจากการทุบตี
Rogach

มีบางอย่างใน `xwininfo -root -children | grep -oEi 'รหัสหน้าต่าง: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - แก้ไข: นิ้วของฉันลื่น, regex ของฉันสำหรับ id หน้าต่างไม่ดี ตรวจสอบเว็บไซต์อื่น ๆ นี้เพื่อการอ้างอิงที่แตกต่างกัน: davygoat.com/software/rizzle/How_it_works.html
rhoyerboat

คำสั่งนี้จะให้ ID หน้าต่าง "รูท" เท่านั้นและไม่ใช่แอคทีฟที่ใช้งานอยู่ :(
Rogach

1

ฉันรู้ว่าคำถามนั้นเก่า แต่ฉันก็รู้สึกว่าxpropควรพูดถึงเช่นกัน พร้อมใช้งานภายใต้ X ซึ่งสามารถใช้ได้ทั้งในแบบโต้ตอบ:

  1. พิมพ์xpropและเลือกหน้าต่างที่คุณต้องการโดยใช้เคอร์เซอร์ของเมาส์จากนั้น
  2. WM_NAMEให้ชื่อของหน้าต่าง_NET_WM_PIDให้ pid

หรือคุณสามารถบอกได้โดยตรงว่าxpropต้องการหน้าต่างใดโดยการผ่าน-idหรือ-nameตัวเลือก ใช้awkคุณสามารถรับ id หน้าต่างที่ใช้งานและส่งกลับไปxpropเช่นนั้น (นำมาจากที่นี่ ):

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

สุดท้ายใช้ Your Favorite Tool ™ (เช่นgrepหรือsed) คุณสามารถ grep-out ค่าที่ต้องการ ตัวอย่างเช่นสำหรับpidเอาต์พุตของคำสั่งด้านบนสามารถไพพ์ไปที่sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.