Cari tahu aplikasi di bawah mouse

11

Sering terjadi pada saya, bahwa sebuah aplikasi muncul pertanyaan dan saya bertanya-tanya di mana aplikasi yang tepat milik jendela ini, karena jika saya melihat di Peluncur tidak ada aplikasi yang saat ini memiliki fokus (tidak ada segitiga putih di sisi kanan ikon ketika saya memfokuskan jendela pesan)

Apakah ada cara untuk mengetahui kepemilikan jendela yang terbuka?

rubo77
sumber

Jawaban:

11

Menggunakan xdotool

Pastikan terlebih dahulu xdotooltersedia di sistem Anda:

sudo apt-get install xdotool

Perintah berikut akan mencetak nama proses dari jendela yang sedang dalam fokus:

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

Untuk memberi diri Anda lebih banyak waktu untuk memfokuskan jendela / mengkliknya Anda dapat menambahkan sedikit durasi tidur:

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

Nama proses harus ditampilkan setelah waktu singkat.


Menggunakan wininfo

Wininfo adalah utilitas grafis yang menampilkan berbagai informasi di windows dan propertinya, termasuk PID (ID proses) yang terkait dengan jendela:

gambar PID dalam wininfo

wininfo harus tersedia di repositori resmi:

sudo apt-get install wininfo

Setelah menentukan PID dari jendela Anda kemudian dapat mencari nama proses yang terkait dengannya. Ada berbagai cara untuk melakukan ini, misalnya dengan melihat /proc:

$ cat /proc/17002/comm
gnome-terminal

Ini akan menjadi nama proses yang terkait dengan PID 17002.

Cara yang lebih elegan yang memungkinkan memeriksa konteks pohon proses, seperti yang disarankan oleh @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

Tentu saja Anda juga dapat menggabungkan pstreedengan xdotoolopsi di atas (terima kasih kepada @ rubo77 untuk menunjukkan ini!):

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

Sumber:

/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

Glutanimate
sumber
1
+1 untuk jawaban yang bagus. Jika PID adalah aplikasi anak utama, Anda dapat menyarankan penggunaan pstree -a -s -l -p -u $PIDyang cukup bagus ...
Rmano
@Rmano: Oh, itu rapi! Saya menambahkannya ke jawabannya.
Glutanimate
Di echo $()dalam perintah Anda tidak perlu.
Dijeda sampai pemberitahuan lebih lanjut.
@ DennisWilliamson Terima kasih atas penunjuknya. Diedit.
Glutanimate
1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac
2

Anda dapat membuat pintasan keyboard dengan perintah ini:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)
TuKsn
sumber
1
Itu solusi yang sangat bagus, +1. Namun, satu masalah yang lebih kecil: jika aplikasi tidak menetapkan WMCLASS yang tepat (yang seringkali merupakan kasus dengan dialog samar), xprop tidak akan membantu.
Glutanimate
Apakah Anda memiliki contoh untuk aplikasi (popup) yang tidak berfungsi, terima kasih.
TuKsn
1
Saya tidak memiliki sesuatu yang spesifik di tangan tetapi saya ingat memiliki masalah dengan beberapa aplikasi Java dan program tidak jelas lainnya yang tidak memiliki set WMCLASS (atau diatur ke sesuatu seperti generik java-window). Saya mengalami masalah seperti ini beberapa waktu lalu ketika saya mencoba menerapkan aturan khusus aplikasi dalam konfigurasi window manager saya.
Glutanimate
1
Anda benar ada masalah serupa dengan aplikasi yang dibuat dengan qml / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn
Bagaimana Anda membuat pintasan keyboard untuk ini? Saya mencoba, seperti yang ditunjukkan di bawah ini, tetapi zenity tidak muncul
rubo77
2

Anda dapat menggunakan xpropuntuk mendapatkan ID Proses dari Jendela yang diklik:

xprop $win_id _NET_WM_PID

kemudian menganalisisnya dengan pstree:

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

Ini Anda dapat dialihkan ke jendela dengan info teks

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

Saya mencoba membuat pintasan keyboard untuk perintah terakhir ini (jika Anda membutuhkannya secara teratur), tetapi untuk beberapa alasan, ini tidak berhasil.

rubo77
sumber
0

Dengan xdtool dan yad terinstal, Anda dapat memiliki Aplikasi GUI yang bagus.

#!/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
Peter Bauer
sumber