Unter X11 verfügen Fenster über XWindowdAttributes-Struktur- und XClassHint-Struktureigenschaften, von denen Anwendungen Informationen zu Fenstern abrufen . Insbesondere ist der letzte für die WM_CLASS
Eigenschaft verantwortlich, zwei durch Kommas getrennte Zeichenfolgen, die über einen xprop
Befehl leicht angezeigt werden können. Zum Beispiel hat Chrome
WM_CLASS(STRING) = "google-chrome", "Google-chrome"
Diese beiden sind dokumentiert als:
- Eine Zeichenfolge, die die bestimmte Instanz der Anwendung benennt, zu der der Client gehört, dem dieses Fenster gehört. ...
- Eine Zeichenfolge, die die allgemeine Klasse von Anwendungen benennt, zu denen der Client gehört, dem dieses Fenster gehört. Von der Klasse angegebene Ressourcen gelten für alle Anwendungen mit demselben Klassennamen ....
So hat beispielsweise die Hangouts-Erweiterung für Chrome denselben Klassennamen, aber einen anderen Instanznamen:
$ xprop | grep 'CLASS'
WM_CLASS(STRING) = "crx_nckgahadagoaajjgafhacjanaoiihapd", "Google-chrome"
Dies ermöglicht Tools wie das xdotool
Durchsuchen aller Fenster eines bestimmten Anwendungstyps oder einer bestimmten Fensterinstanz. Dies kann beispielsweise auch eine nützliche Eigenschaft für Docks sein, die Fenster unter demselben Symbol einer Anwendung gruppieren.
Insbesondere xdotool
, classname
korrespondiert mit der ersten Zeichenfolge und class
entspricht die zweite Saite. In meinem Beispiel mit Chrome- und Hangouts-Apps:
$ xdotool search -classname crx_nckgahadagoaajjgafhacjanaoiihapd
96469129
$ xdotool search -class Google-chrome
96469069
109051905
109051907
96468993
96469129
109051912
109051924
Dies kann auch aus dem Quellcode ersichtlich werden. Konzentrieren wir uns zum Beispiel auf den Klassennamen. In cmd_search.c haben wir eine Suchstruktur aufgebaut, die eine Suchmaskeneigenschaft hat (Zeilen 171 bis 173).
Dies wird an xdo_search_windows
die in xdo_search.c definierte Funktion übergeben , die wiederum aufruft check_window_match
, die wiederum an _xdo_match_window_classname geht , wodurch schließlich beide am Anfang dieser Antwort erwähnten Strukturen mit den Standard- Xlib- Funktionen XGetWindowAttributes und XGetClassHint abgerufen werden .
Randnotiz: Gtk-Apps erstellen anscheinend immer ein kleines übergeordnetes Fenster mit einem untergeordneten Fenster , was bedeutet, dass Sie bei der Suche nach einem bestimmten Fenster verwirrende Ergebnisse erhalten können.
xprop
Instanzname " angegeben, indem sie "Klasse", "Klassenname" oder "Name" entsprechenxdotool search
?A
class
wäre das,urxvt
was tatsächlich beides enthälturxvt
undrxvt
welches das Unicode-RXVT-Terminal ist. Dasclassname
zerlegt diese in die tatsächlichen Namen. Ich werde unten ein Beispiel zeigen.Ich habe 4 rxvt Terminalfenster geöffnet.
Als ich dann ein
urxvt
Terminal startete, bekam ich Folgendes.Mit der
xprop
Anwendung können wir auf die Fenster klicken und es wird uns das mitteilenWM_CLASS(STRING)
. Der erste ist derclassname
und der zweite ist derclass
.Beispiel:
Ausführen des Befehls und Klicken auf ein RXVT-Terminalfenster:
Gleicher Befehl durch Klicken auf ein URXVT-Fenster:
Gleicher Befehl erneut durch Klicken auf einen Google Chrome-Browser:
Klicken Sie auf ein
xfce4-terminal
Fenster:Klicken Sie auf ein
gnome-terminal
Fenster:Klicken Sie auf ein Firefox-Fenster (das anders ist):
Ich hoffe, dies hilft dabei, die Unterschiede zu beleuchten.
quelle