À la lumière de https://unix.stackexchange.com/a/254854/674 et https://unix.stackexchange.com/questions/458895/how-can-i- apportez-un-fond-gui-job-au-devant-de-mon-burea , il y a un exemple tiré de la page de manuel de xdotool
# Activate google-chrome when you move the mouse to the bottom-left corner:
xdotool behave_screen_Edge bottom-left search --class google-chrome windowactivate
La page de manuel dit
--class Correspond à la classe de fenêtre.
--classname Apparie le nom de classe de la fenêtre.
Que sont "classe" et "nom de classe"?
Quelles valeurs possibles ont-ils?
Comment puis-je connaître la classe et le nom de classe d'une fenêtre?
Merci.
Sous X11, les fenêtres ont structure XWindowdAttributes et structures XClassHint à partir desquelles les applications obtiennent des informations sur les fenêtres. Plus précisément, le dernier est responsable de la propriété WM_CLASS
, deux chaînes séparées par des virgules, qui peuvent être facilement visualisées via la commande xprop
name__. Par exemple, Chrome a
WM_CLASS(STRING) = "google-chrome", "Google-chrome"
Ces deux sont documentés comme:
- Une chaîne qui nomme l'instance particulière de l'application à laquelle appartient le client propriétaire de cette fenêtre. ...
- Une chaîne qui nomme la classe générale des applications à laquelle appartient le client propriétaire de cette fenêtre. Les ressources spécifiées par classe s'appliquent à toutes les applications ayant le même nom de classe ....
Ainsi, par exemple, l'extension Hangouts pour Chrome a le même nom de classe, mais un nom d'instance différent:
$ xprop | grep 'CLASS'
WM_CLASS(STRING) = "crx_nckgahadagoaajjgafhacjanaoiihapd", "Google-chrome"
Cela permet à des outils tels que xdotool
de rechercher toutes les fenêtres d’un type d’application particulier ou une instance de fenêtre spécifique. Par exemple, cela peut également être une propriété utile pour quelque chose comme les docks qui regroupent les fenêtres sous la même icône d’une application.
En particulier pour xdotool
name__, classname
correspond à la première chaîne et class
correspond à la deuxième chaîne. Dans mon exemple avec Chrome et les applications Hangouts:
$ xdotool search -classname crx_nckgahadagoaajjgafhacjanaoiihapd
96469129
$ xdotool search -class Google-chrome
96469069
109051905
109051907
96468993
96469129
109051912
109051924
Cela peut aussi être évident en regardant le code source. Concentrons-nous sur classname par exemple. Dans le cmd_search.c , nous avons construit une structure de recherche qui possède une propriété de masque de recherche (lignes 171 à 173).
Ceci est passé à la fonction xdo_search_windows
définie dans xdo_search.c , qui appelle à son tour check_window_match
, qui passe à son tour à _ xdo_match_window_classname , qui finit par arriver récupération des deux structures mentionné au début de cette réponse avec les fonctions standard XlibXGetWindowAttributes et XGetClassHint .
Note latérale: Les applications Gtk apparemment créez toujours une petite fenêtre parent avec une fenêtre enfant , ce qui signifie que vous obtiendrez peut-être des résultats confus lors de la recherche d'une fenêtre spécifique.
class
serait comme urxvt
qui contient à la fois urxvt
et rxvt
qui est le terminal unicode rxvt. classname
divise ces noms en noms réels. Je vais montrer un exemple ci-dessous.
J'ai 4 fenêtres de terminal rxvt ouvertes.
terrance-Linux:~$ xdotool search -class rxvt
130023435
127926283
125829131
132120587
terrance-Linux:~$ xdotool search -class urxvt
130023435
127926283
125829131
132120587
terrance-Linux:~$ xdotool search -classname urxvt
terrance-Linux:~$ xdotool search -classname rxvt
130023435
127926283
125829131
132120587
Puis, lorsque j'ai lancé un terminal urxvt
name__, voici ce que j'ai obtenu.
terrance-Linux:~$ xdotool search -classname urxvt
140509193
En utilisant l'application xprop
name__, nous pouvons cliquer sur les fenêtres pour nous indiquer la WM_CLASS(STRING)
. Le premier est le classname
et le second le class
name__.
Exemple:
Lancer la commande et cliquer sur une fenêtre de terminal RXVT:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "rxvt", "URxvt"
Même commande en cliquant sur une fenêtre URXVT:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "urxvt", "URxvt"
Même commande en cliquant à nouveau sur un navigateur Google Chrome:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "google-chrome", "Google-chrome"
En cliquant sur une fenêtre xfce4-terminal
:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "xfce4-terminal", "Xfce4-terminal"
En cliquant sur une fenêtre gnome-terminal
:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"
En cliquant sur une fenêtre Firefox (différente):
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "Navigator", "Firefox"
J'espère que cela aidera à faire la lumière sur les différences.