xlsclients
ist nah (und ein Standardteil von X), listet es die Clients des X-Servers auf. Aber könnte es nicht sein , eine 1: 1 - Zuordnung zwischen dem, was man bedenkt , eine „Anwendung“ und was X betrachtet einen „Client“. Meine einzelne laufende Instanz von LyX verbraucht beispielsweise 13 Clients. Wenn ich xlsclients -l
(Langformausgabe) verwende, kann ich sehen, dass nur einer von ihnen einen definierten "Symbolnamen" hat, dies ist jedoch nur ein Hinweis. Da es verwendet wird XQueryTree()
, fehlen möglicherweise einige Fenster (es werden keine xpdf
Fenster gefunden, die ich geöffnet habe).
Es gibt auch nicht sehr viele Informationen. Sie können jedoch xlsclients -l
die Fenster-ID abrufen und jedes Fenster mit abfragen xprop -id $ID
. Verwenden xwinifo
Sie für weitere Details zu einem Fenster, obwohl es sich um "Fenster" handelt, die nicht mit Clients oder Anwendungen identisch sind:
xwininfo -root -children
xwininfo -root -tree # indented view
Abhängig von Ihrem Fenstermanager können Sie möglicherweise bestimmte Fenstereigenschaften (z. B. _NET_xxx
oder _NET_WM_xxxx
Eigenschaften ) überprüfen, um festzustellen, ob es sich um eine "Anwendung" handelt. Wenn der Fenstermanager- Client oder die GUI-Bibliothek dies festlegt (was auch immer zeitgemäß sein sollte), ist die _NET_WM_PID
Eigenschaft die einfachste ( wenn auch unvollständige ) Möglichkeit, eine PID einem bestimmten Fenster zuzuordnen. Ich kenne kein Werkzeug, das all diese Teile zusammenhält.
Ich benutze den Fenstermanager FVWM, ich kann direkt mit ihm sprechen FvwmCommand
, zB FvwmCommand -i1 send_windowlist
zeigt mir die Liste der Fenster. @Arkadiusz 'Vorschlag zur Verwendung wmctrl
scheint eine gute und Fenstermanager-agnostische Methode zu sein, um dasselbe zu tun.
Ein weiterer Trick besteht darin, die Stammfenster abzufragen _WIN_CLIENT_LIST
über bash
:
$ xwininfo -root
xwininfo: Window id: 0x69 (the root window) (has no name)
[..]
$ IFS=",= " read -a win < <(xprop -notype -id 0x69 32x _WIN_CLIENT_LIST )
$ for ((ww=1; ww<${#win[*]}; ww++)); do
printf "%i %s\n" $ww ${win[$ww]};
xprop -id ${win[ww]} -notype _NET_WM_PID WM_NAME WM_CLASS \
WM_ICON_NAME WM_CLIENT_LEADER;
done
Dies entspricht genau dem, was meine WM als Fenster auflistet (ohne die, die ich so konfiguriert habe, dass sie von der WM-Fensterliste ausgeschlossen werden). Untergeordnete Fenster werden WM_CLIENT_LEADER
auf das übergeordnete Fenster festgelegt (für die Sitzungsverwaltung ), obwohl das übergeordnete Fenster möglicherweise nicht sichtbar ist (Firefox führt dies aus) und möglicherweise auf sich selbst verweist.
xrestop
bekommt aber meine Stimme.