de l'homme wmctrl:
wmctrl est une commande qui peut être utilisée pour interagir avec un gestionnaire de fenêtre X compatible avec la spécification EWMH/NetWM. wmctrl peut interroger le gestionnaire de fenêtre pour obtenir des informations et demander que certaines actions de gestion de fenêtre soient prises.
La commande wmctrl -d
peut être utilisée pour obtenir des informations sur les bureaux (fenêtres/espaces de travail). La commande wmctrl -lG
répertorie toutes les fenêtres, y compris leurs informations de géométrie.
Comment puis-je (dans Unity par rapport aux autres gestionnaires de fenêtres):
à partir de la ligne de commande, en utilisant ces deux commandes?
La commande wmctrl -d
répertorie les ordinateurs de bureau. Sous Xubuntu, par exemple, lorsque je lance wmctrl -d
, je vois clairement dans la sortie quel est l'espace de travail actuel et la résolution de l'écran (DG) sur le ou les espaces de travail.
0 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 1
1 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 2
2 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 3
3 * DG: 1024x600 VP: 0,0 WA: 0,31 1024x569 4
L'espace de travail actuel est marqué d'un *
.
Sous Unity cependant, la sortie de wmctrl -d
ne montre qu’un seul (très grand) espace de travail, marqué d’un *
, quel que soit le "espace de travail" actuel, par exemple:
0 * DG: 3360x2100 VP: 1680,0 WA: 65,24 1615x1026 N/A
La commande wmctrl -lG
de man wmctrl
:-l
: Répertorie les fenêtres gérées par le gestionnaire de fenêtres.-G-
: Inclure les informations de géométrie dans le résultat de l'action -l
Lorsque j'exécute wmctrl -lG
sur (par exemple) Xubuntu, avec une fenêtre de souris sur chaque espace de travail:
0x03400003 0 241 197 533 244 jacob-1001PX Untitled 1 - Mousepad
0x03400197 1 299 222 533 244 jacob-1001PX Untitled 2 - Mousepad
0x034001be 2 236 201 533 244 jacob-1001PX Untitled 3 - Mousepad
0x034001e3 3 283 228 533 244 jacob-1001PX Untitled 4 - Mousepad
L'information est assez compréhensible. dans la deuxième colonne, nous connaissons l’espace de travail dans lequel se trouve la fenêtre, sa position (x, y, colonne 3/4) et sa taille (x, y, colonne 5/6). La position est donnée par rapport à l'espace de travail sur lequel il se trouve.
Sur Unity cependant, c'est une histoire assez différente. Lorsque j'ai quatre espaces de travail et que j'ouvre une fenêtre gedit sur chacun d'entre eux:
0x03c03b81 0 468 -884 875 741 jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
0x03c03e74 0 369 164 1111 741 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
0x03c03f8e 0 -1269 214 1111 741 jacob-System-Product-Name Niet-opgeslagen document 3 - gedit
0x03c00085 0 -1376 -917 1111 741 jacob-System-Product-Name Niet-opgeslagen document 4 - gedit
Certaines fenêtres ont des coordonnées négatives, d'autres (peuvent) avoir des coordonnées qui dépassent la résolution de mon écran.
Comme indiqué dans cette réponse , il existe une différence essentielle entre Compiz/Unity et les autres gestionnaires de fenêtres.
Si nous examinons Xubuntu (XFCE), tous les espaces de travail sont des espaces autonomes. Tout ce que nous avons besoin de savoir, c'est l'espace de travail dans lequel se trouve une fenêtre et les coordonnées x et y. Fondamentalement, il n'y a pas de matrice dans laquelle les espaces de travail sont ordonnés, à l'exception de l'ordre "linéaire" 1, 2, 3, etc.
C'est différent dans Unity, où il n'y a en fait qu'un un espace de travail. L'espace de travail (fractionné) est divisé en plusieurs sections, appelées fenêtres. Ces fenêtres sont organisées en lignes et en colonnes.
De cette façon, il est possible qu'une fenêtre soit partiellement visible sur toutes les fenêtres:
contrairement aux espaces de travail:
Pour comprendre le résultat de wmctrl -lG
, nous devons comprendre son "anatomie":
Comme Unity n'a qu'un seul espace de travail, la sortie affiche toujours un *
sur [2]
. Comment savons-nous comment les fenêtres sont organisées et quelle est la fenêtre actuelle?
Les informations sont dans VP: 1680,0
([4]
). Pas simplement comme un numéro de fenêtre, mais comme une coordonnée x et y. Ces coordonnées peuvent être zéro ou x
* la résolution de l'écran. Pour savoir comment les fenêtres sont configurées, nous devons également connaître la résolution de l'écran (à l'aide de xrandr
).
combien de fenêtres y a-t-il actuellement et comment sont-elles organisées:
En regardant DG: 3360x2100
dans l'exemple "Unity" et en sachant que la résolution de notre écran est de 1680x1050, nous pouvons conclure qu'il existe deux colonnes de fenêtres de visualisation (3360/1680) et deux lignes (2100/1050).
quel est l'espace de travail actuel:
Un exemple
L’écran a une résolution de 1680x1050. Les informations de la fenêtre saisissent VP: 1680,0
. Les coordonnées sont affichées dans le coin supérieur gauche. Nous sommes donc dans la deuxième colonne, première ligne.
où une fenêtre est située dans un sens absolu :
Une fois que nous savons quelle fenêtre est la fenêtre actuelle, nous pouvons localiser les fenêtres, en regardant leurs coordonnées dans la sortie de wmctrl -lG
[3]
:
nom de la fenêtre
Nous pouvons simplement localiser la fenêtre, l’origine en haut à gauche de la fenêtre actuelle.
Ci-dessous un exemple de résolution d'écran de 1680x1050, fenêtres 2x2:
coordonnées de la fenêtre du point de vue de la fenêtre 1
coordonnées de la fenêtre du point de vue de la fenêtre d'affichage 4
Avec les informations ci-dessus et l'aide de wmctrl -lG
(les coordonnées de la fenêtre, section [3]
), c'est assez simple:
si
alors une fenêtre est située sur la fenêtre courante.