xlsclientsist 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 xpdfFenster gefunden, die ich geöffnet habe).
Es gibt auch nicht sehr viele Informationen. Sie können jedoch xlsclients -ldie Fenster-ID abrufen und jedes Fenster mit abfragen xprop -id $ID. Verwenden xwinifoSie 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_xxxoder _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_PIDEigenschaft 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_windowlistzeigt mir die Liste der Fenster. @Arkadiusz 'Vorschlag zur Verwendung wmctrlscheint 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_LEADERauf 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.