Finden Sie die Anwendung unter der Maus heraus

11

Es kommt mir oft vor, dass eine Anwendung eine Frage aufwirft und ich frage mich, zu welcher genauen Anwendung dieses Fenster gehört, denn wenn ich in den Launcher schaue, gibt es keine Anwendung, die derzeit den Fokus hat (kein weißes Dreieck auf der rechten Seite des Symbols) wenn ich das Nachrichtenfenster fokussiere)

Gibt es eine Möglichkeit, die Zugehörigkeit eines offenen Fensters herauszufinden?

rubo77
quelle

Antworten:

11

Xdotool verwenden

Stellen Sie zunächst sicher, dass xdotoolauf Ihrem System Folgendes verfügbar ist:

sudo apt-get install xdotool

Der folgende Befehl gibt den Prozessnamen des aktuell fokussierten Fensters aus:

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

Um sich mehr Zeit zu geben, um das Fenster zu fokussieren / darauf zu klicken, können Sie eine kleine Schlafdauer voranstellen:

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

Der Prozessname sollte nach kurzer Zeit angezeigt werden.


Mit wininfo

Wininfo ist ein grafisches Dienstprogramm, das verschiedene Informationen zu Fenstern und deren Eigenschaften anzeigt, einschließlich der dem Fenster zugeordneten PID (Prozess-ID):

Bild von PID in wininfo

wininfo sollte in den offiziellen Repositories verfügbar sein:

sudo apt-get install wininfo

Nachdem Sie die PID des Fensters ermittelt haben, können Sie den zugehörigen Prozessnamen nachschlagen. Es gibt verschiedene Möglichkeiten, dies zu tun, z. B /proc.:

$ cat /proc/17002/comm
gnome-terminal

Dies wäre der der PID zugeordnete Prozessname 17002.

Eine elegantere Methode, mit der der Prozessbaumkontext überprüft werden kann , wie von @Rmano vorgeschlagen :

$ 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

Natürlich können Sie auch pstreemit der xdotoolobigen Option kombinieren (danke an @ rubo77 für den Hinweis!):

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

Quellen:

/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

Glutanimat
quelle
1
+1 für die nette Antwort. Wenn die PID von einem Kind der Hauptanwendung stammt, können Sie vorschlagen, dass die Verwendung pstree -a -s -l -p -u $PIDganz nett ist ...
Rmano
@Rmano: Oh, das ist ordentlich! Ich habe es der Antwort hinzugefügt.
Glutanimate
Das echo $()in Ihren Befehlen ist nicht notwendig.
Bis auf weiteres angehalten.
@ TennisWilliamson Danke für den Zeiger. Bearbeitet.
Glutanimate
1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac
2

Mit diesem Befehl können Sie eine Tastenkombination erstellen:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)
TuKsn
quelle
1
Das ist eine sehr schöne Lösung, +1. Ein kleineres Problem: Wenn die Anwendung keine richtige WMCLASS zuweist (was bei kryptischen Dialogen häufig der Fall ist), hilft xprop nicht weiter.
Glutanimate
Hatten Sie ein Beispiel für eine Anwendung (Popup), die nicht funktioniert hat? Danke.
TuKsn
1
Ich habe nichts Spezielles zur Hand, aber ich erinnere mich, dass ich Probleme mit mehreren Java-Anwendungen und anderen obskuren Programmen hatte, für die WMCLASS nicht (oder auf etwas Allgemeines wie java-window) eingestellt war. Ich bin vor einiger Zeit auf solche Probleme gestoßen, als ich versuchte, anwendungsspezifische Regeln in meiner Fenstermanager-Konfiguration zu implementieren.
Glutanimate
1
Sie haben Recht, es gibt ein ähnliches Problem mit Apps, die mit qml / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn
Wie erstellt man dafür eine Tastenkombination? Ich habe es versucht, wie unten gezeigt, aber Zenity wird nicht
angezeigt
2

Sie können verwenden xprop, um die Prozess-ID des angeklickten Fensters abzurufen:

xprop $win_id _NET_WM_PID

dann analysieren Sie es mit pstree:

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

Dies können Sie mit zu einem Text-Info-Fenster umleiten

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

Ich habe versucht , eine Tastenkombination für diesen letzten Befehl zu erstellen (wenn Sie ihn regelmäßig benötigen), aber aus irgendeinem Grund funktioniert dies nicht.

rubo77
quelle
0

Mit xdtool und yad können Sie eine schöne GUI-App haben.

#!/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
quelle