web-dev-qa-db-fra.com

Quelle est exactement la relation entre wmctrl -d et wmctrl -lG dans Unity?

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 question spécifiquement

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):

  • avoir un aperçu des espaces de travail et comment ils sont organisés?
  • savoir quel est l'espace de travail actuel?
  • savoir où se trouve une fenêtre dans un sens absol?
  • liste les fenêtres qui sont sur l'espace de travail actuel?

à partir de la ligne de commande, en utilisant ces deux commandes?

Informations d'arrière-plan


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.

4
Jacob Vlijm

Fenêtres et espaces de travail

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:

enter image description here

contrairement aux espaces de travail:

enter image description here

Différences dans la sortie de wmctrl -d et comment interpréter

Pour comprendre le résultat de wmctrl -lG, nous devons comprendre son "anatomie":

enter image description here

  1. numéro de bureau (premier = 0)
  2. marque du bureau actuel ("*" s'il s'agit du bureau actuel (espace de travail), "-" sinon)
  3. géométrie du bureau (la taille du bureau x-y)
  4. position de la fenêtre d'affichage (position sur le bureau; voir Unité )
  5. géométrie de la zone de travail en tant que (taille "utilisable" du bureau, panneaux moins, etc.; la première colonne est le px de gauche/haut)
  6. nom du bureau (contenant éventuellement plusieurs espaces)

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).

Comment savoir:

  • 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]:

enter image description here

  1. fenêtre - id
  2. numéro de bureau (sous Unity: toujours 0 comme indiqué)
  3. coordonnées de la fenêtre, du point de vue de la fenêtre courante (x-y)
  4. taille de la fenêtre, du point de vue de la (w-h)
  5. nom de l'ordinateur
  6. 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

    enter image description here

    coordonnées de la fenêtre du point de vue de la fenêtre d'affichage 4

    enter image description here

    • quelles sont les fenêtres de l'espace de travail actuel:

    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

    1. la coordonnée x d'une fenêtre est comprise entre 0 et la résolution (horizontale) de l'écran, et
    2. la coordonnée y d'une fenêtre est comprise entre 0 et la résolution (verticale) de l'écran

    alors une fenêtre est située sur la fenêtre courante.

4
Jacob Vlijm