Znajdź aplikację pod myszą


11

Często zdarza mi się, że aplikacja wyskakuje z pytaniem i zastanawiam się, do której dokładnie aplikacji należy to okno, ponieważ jeśli zajrzę do Launchera, nie ma aktualnie aktywnej aplikacji (brak białego trójkąta po prawej stronie ikony kiedy skupię okno wiadomości)

Czy istnieje sposób, aby ustalić przynależność do otwartego okna?

Odpowiedzi:


11

Korzystanie z xdotool

Najpierw upewnij się, że xdotooljest dostępny w twoim systemie:

sudo apt-get install xdotool

Następujące polecenie wyświetli nazwę procesu okna, na którym aktualnie jest ustawiony fokus:

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

Aby dać sobie więcej czasu na skupienie okna / kliknięcie na niego, możesz przedłużyć krótki czas snu:

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

Nazwa procesu powinna zostać wyświetlona po krótkim czasie.


Korzystanie z wininfo

Wininfo to narzędzie graficzne, które wyświetla różne informacje o oknach i ich właściwościach, w tym PID (identyfikator procesu) powiązany z oknem:

obraz PID w wininfo

wininfo powinny być dostępne w oficjalnych repozytoriach:

sudo apt-get install wininfo

Po ustaleniu PID okna możesz następnie wyszukać nazwę procesu z nim powiązaną. Można to zrobić na różne sposoby, np. Patrząc na /proc:

$ cat /proc/17002/comm
gnome-terminal

To byłaby nazwa procesu powiązana z PID 17002.

Bardziej elegancki sposób, który pozwala na sprawdzenie kontekstu drzewa procesów, jak sugeruje @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

Oczywiście możesz również połączyć pstreez xdotoolpowyższą opcją (dzięki @ rubo77 za zwrócenie na to uwagi!):

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

Źródła:

/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 za miłą odpowiedź. Jeśli PID jest dzieckiem głównej aplikacji, możesz zasugerować użycie, pstree -a -s -l -p -u $PIDktóre jest całkiem miłe ...
Rmano

@Rmano: Och, to fajnie! Dodałem to do odpowiedzi.
Glutanimate,

echo $()W twoich poleceń nie jest konieczne.
Wstrzymano do odwołania.

@DennisWilliamson Dzięki za wskaźnik. Edytowane.
Glutanimate

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

2

Za pomocą tego polecenia możesz utworzyć skrót klawiaturowy:

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

1
To bardzo fajne rozwiązanie, +1. Jednak jeden mniejszy problem: jeśli aplikacja nie przypisuje odpowiedniego WMCLASS (co często ma miejsce w przypadku tajemniczych okien dialogowych), xprop nie będzie żadnej pomocy.
Glutanimate,

Czy masz przykład aplikacji, która nie działała, dziękuję.
TuKsn

1
Nie mam pod ręką nic konkretnego, ale pamiętam problemy z kilkoma aplikacjami Java i innymi niejasnymi programami, które nie miały ustawionego WMCLASS (lub ustawionego na coś ogólnego java-window). Tego rodzaju problemy napotkałem jakiś czas temu, kiedy próbowałem zaimplementować reguły specyficzne dla aplikacji w konfiguracji menedżera okien.
Glutanimate,

1
Masz rację, istnieje podobny problem z aplikacji stworzonych z QML / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn

Jak utworzyć do tego skrót klawiaturowy? Próbowałem, jak pokazano poniżej, ale zenity się nie pojawia
rubo77

2

Możesz użyć, xpropaby uzyskać identyfikator procesu klikniętego okna:

xprop $win_id _NET_WM_PID

następnie przeanalizuj to za pomocą pstree:

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

Możesz przekierować do okna informacji tekstowych za pomocą

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

Próbowałem utworzyć skrót klawiaturowy dla tego ostatniego polecenia (jeśli potrzebujesz go regularnie), ale z jakiegoś powodu To nie działa.


0

Po zainstalowaniu xdtool i yad możesz mieć ładną aplikację 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.