ค้นหาแอปพลิเคชันใต้เมาส์


11

มันเกิดขึ้นกับฉันบ่อยครั้งที่แอปพลิเคชันปรากฏคำถามและฉันสงสัยว่าแอปพลิเคชันนี้เป็นของหน้าต่างใดเพราะถ้าฉันดูใน Launcher ไม่มีแอปพลิเคชันใดที่โฟกัสอยู่ในขณะนี้ (ไม่มีสามเหลี่ยมสีขาวทางด้านขวาของไอคอน เมื่อฉันมุ่งเน้นหน้าต่างข้อความ)

มีวิธีหาของที่เป็นของหน้าต่างที่เปิดอยู่หรือไม่?

คำตอบ:


11

ใช้ xdotool

ก่อนอื่นต้องแน่ใจว่าxdotoolมีอยู่ในระบบของคุณ:

sudo apt-get install xdotool

คำสั่งต่อไปนี้จะพิมพ์ชื่อกระบวนการของหน้าต่างที่อยู่ในโฟกัส:

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

เพื่อให้เวลากับตัวคุณเองมากขึ้นในการโฟกัสหน้าต่าง / คลิกที่หน้าต่างคุณสามารถเพิ่มระยะเวลาสลีปล่วงหน้าได้:

sleep 5 && cat "/proc/$(xdotool getwindowpid "$(xdotool getwindowfocus)")/comm"

ชื่อกระบวนการควรจะแสดงหลังจากช่วงเวลาสั้น ๆ


ใช้ wininfo

Wininfo เป็นโปรแกรมกราฟิกที่แสดงข้อมูลต่าง ๆ บน windows และคุณสมบัติต่าง ๆ รวมถึง PID (ID กระบวนการ) ที่เกี่ยวข้องกับหน้าต่าง:

ภาพ PID ใน wininfo

wininfo ควรมีอยู่ในที่เก็บอย่างเป็นทางการ:

sudo apt-get install wininfo

เมื่อพิจารณาถึง PID ของหน้าต่างแล้วคุณสามารถค้นหาชื่อกระบวนการที่เกี่ยวข้องได้ มีหลายวิธีในการทำเช่นโดยดูที่/proc:

$ cat /proc/17002/comm
gnome-terminal

นี้จะเป็นชื่อกระบวนการที่เกี่ยวข้องกับ 17002PID

วิธีที่สง่างามกว่าที่อนุญาตให้ตรวจสอบบริบททรีกระบวนการตามที่แนะนำโดย@Rmano :

$ pstree -a -s -l -p -u 17002
init,1
  └─lightdm,1900
      └─lightdm,3202 --session-child 12 19
          └─lxsession,3307,glutanimate -s LXDE -e LXDE
              └─openbox,3362 --config-file /home/glutanimate/.config/openbox/lxde-rc.xml
                  └─gnome-terminal,17002
                      ├─bash,1841
                      ├─bash,2332
                      ├─bash,2424
                      │   └─pstree,2484 -a -s -l -p -u 17002
                      ├─gnome-pty-helpe,1840
                      ├─{gnome-terminal},1835
                      ├─{gnome-terminal},1836
                      ├─{gnome-terminal},1842
                      └─{gnome-terminal},2269

แน่นอนว่าคุณสามารถรวมpstreeกับxdotoolตัวเลือกด้านบน (ขอบคุณ @ rubo77 สำหรับการชี้เรื่องนี้!):

sleep 2; pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")

แหล่งที่มา:

/unix//q/38867/29245

http://www.linuxquestions.org/questions/debian-26/how-to-find-the-process-associated-with-a-top-level-x-window-907125/

/superuser//q/632979/170160


1
+1 สำหรับคำตอบที่ดี หาก PID เป็นลูกของโปรแกรมหลักที่คุณสามารถแนะนำการใช้งานของpstree -a -s -l -p -u $PIDซึ่งเป็นสิ่งที่ดีมาก ...
Rmano

@Rmano: โอ้เรียบร้อยแล้ว! ฉันเพิ่มไปยังคำตอบ
Glutanimate

echo $()ในคำสั่งของคุณไม่จำเป็นต้องมี
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

@DennisWilliamson ขอบคุณสำหรับตัวชี้ แก้ไข
Glutanimate

1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac

2

คุณสามารถสร้างแป้นพิมพ์ลัดด้วยคำสั่งนี้:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)

1
นั่นเป็นทางออกที่ดีมาก +1 อย่างไรก็ตามปัญหาหนึ่งที่มีขนาดเล็ก: หากแอปพลิเคชันไม่ได้กำหนด WMCLASS ที่เหมาะสม (ซึ่งอาจเกิดกรณีที่มีกล่องโต้ตอบลับๆ) xprop จะไม่ช่วยอะไรเลย
Glutanimate

คุณมีตัวอย่างของแอปพลิเคชัน (ป๊อปอัป) ที่ใช้งานไม่ได้หรือไม่ขอบคุณ
TuKsn

1
ฉันไม่มีอะไรที่เฉพาะเจาะจง แต่ฉันจำได้ว่ามีปัญหากับแอปพลิเคชัน Java หลายตัวและโปรแกรมที่ไม่ชัดเจนอื่น ๆ ที่ไม่มีชุด WMCLASS (หรือตั้งค่าเป็นสิ่งทั่วไปเช่นjava-window) ฉันพบปัญหาเหล่านี้เมื่อไม่นานมานี้เมื่อฉันพยายามใช้กฎเฉพาะแอปพลิเคชันในการกำหนดค่าตัวจัดการหน้าต่าง
Glutanimate

1
คุณมีปัญหาที่คล้ายกันกับแอปที่สร้างขึ้นด้วย qml / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn

คุณจะสร้างแป้นพิมพ์ลัดสำหรับสิ่งนี้ได้อย่างไร ฉันพยายามดังที่แสดงด้านล่าง แต่ความสนุกไม่ปรากฏขึ้น
rubo77

2

คุณสามารถใช้xpropเพื่อรับ ID กระบวนการของหน้าต่างที่คลิก:

xprop $win_id _NET_WM_PID

จากนั้นวิเคราะห์ด้วยpstree:

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)

สิ่งนี้คุณสามารถเปลี่ยนเส้นทางไปยังหน้าต่างข้อมูลข้อความด้วย

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)|zenity --text-info --title "pstree of clicked Window"

ฉันพยายามสร้างแป้นพิมพ์ลัดสำหรับคำสั่งสุดท้ายนี้ (ถ้าคุณต้องการมันเป็นประจำ) แต่ด้วยเหตุผลบางอย่างมันไม่ทำงาน


0

ด้วยการติดตั้ง xdtool และ yad คุณสามารถมีแอพ GUI ที่ดี

#!/bin/bash
while true; do cat "/proc/$(xdotool getwindowpid "$(xdotool 
getwindowfocus)")/comm"; sleep 1; echo -e '\f'; done | yad --no- 
buttons --no-focus --geometry 250x10 --fixed --text-info -- 
title="Active window" --listen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.