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

4

de l'homme wmctrl:

wmctrl est une commande permettant d'interagir avec un gestionnaire X Window compatible avec la spécification EWMH / NetWM. wmctrl peut interroger le gestionnaire de fenêtres pour obtenir des informations et demander que certaines actions de gestion de fenêtres soient prises.

La question spécifiquement

La wmctrl -dcommande peut être utilisée pour obtenir des informations sur les bureaux (fenêtres / espaces de travail). La wmctrl -lGcommande répertorie toutes les fenêtres, y compris leurs informations géométriques.

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 absolu ?
  • 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 bureaux. Sur Xubuntu (par exemple), lorsque je cours wmctrl -d, je vois clairement dans la sortie 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 *.

Cependant, sous Unity, la sortie de wmctrl -dn’affiche qu’un seul (très grand) espace de travail, marqué d’un *, quel que soit l’actuel "espace de travail", par exemple:

0  * DG: 3360x2100  VP: 1680,0  WA: 65,24 1615x1026  N/A

La commande du wmctrl
de man wmctrl:
-l: Dresser la liste des fenêtres gérées par le gestionnaire de fenêtres.
-G-: Inclure des informations de géométrie dans la sortie de l'action -l

Quand je cours wmctrl -lGsur (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.

Jacob Vlijm
la source

Réponses:

4

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 réalité qu'un seul 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:

entrez la description de l'image ici

contrairement aux espaces de travail:

entrez la description de l'image ici

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

entrez la description de l'image ici

  1. numéro de bureau (premier = 0)
  2. marque du bureau actuel ("*" s'il s'agit du bureau actuel (espace de travail), "-" si ce n'est pas le cas)
  3. la géométrie du bureau (la taille du bureau xy)
  4. position de la fenêtre d'affichage (position sur le bureau; voir Unity )
  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)

La sortie depuis l' unité ne possède qu'un seul espace de travail, toujours montre un *sur [2]. Comment savons-nous comment les fenêtres sont organisées et quelle est la fenêtre actuelle?

L'information est 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 (avec l'aide de xrandr).

Comment savoir:

  • combien de fenêtres y a-t-il actuellement et comment sont-elles organisées:

    En regardant l'exemple DG: 3360x2100dans "Unity", et sachant que la résolution de notre écran est de 1680x1050, nous pouvons conclure qu'il existe deux colonnes de fenêtres (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 les résultats suivants wmctrl -lG [3]:

entrez la description de l'image ici

  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 actuelle (xy)
  4. taille de la fenêtre, du point de vue du (wh)
  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

    entrez la description de l'image ici

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

    entrez la description de l'image ici

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

    Avec les informations ci-dessus et l'aide de wmctrl -lG(coordonnées de la fenêtre, section [3]), c'est 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.

Jacob Vlijm
la source