Qual é exatamente a relação entre wmctrl -d e wmctrl -lG no Unity?

4

do homem wmctrl:

wmctrl é um comando que pode ser usado para interagir com um gerenciador X Window que seja compatível com a especificação EWMH / NetWM. O wmctrl pode consultar o gerenciador de janelas para obter informações e pode solicitar que determinadas ações de gerenciamento de janelas sejam executadas.

A questão especificamente

O comando wmctrl -d pode ser usado para obter informações sobre desktops (viewports / espaços de trabalho), O comando wmctrl -lG lista todas as janelas, incluindo suas informações de geometria.

Como posso (no Unity versus outros gerenciadores de janelas):

  • obter uma visão geral dos espaços de trabalho e como eles são organizados?
  • descubra qual é o espaço de trabalho atual?
  • descubra onde uma janela está localizada em um sentido absoluto ?
  • lista janelas que estão no espaço de trabalho atual?

da linha de comando, usando esses dois comandos?

Informações básicas

O comando wmctrl -d
lista os desktops. No (por exemplo) Xubuntu, quando executo wmctrl -d , posso ver claramente na saída qual é a área de trabalho atual e a resolução da tela (DG) na (s) área (s) de trabalho.

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

A área de trabalho atual está marcada com * .

No Unity, no entanto, a saída de wmctrl -d mostra apenas uma área de trabalho (muito grande) marcada com * , independentemente de qual seja a "área de trabalho" atual, por exemplo:

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

O comando wmctrl -lG
de man wmctrl :
-l : Listar as janelas que estão sendo gerenciadas pelo gerenciador de janelas.
-G- : Incluir informações de geometria na saída da ação -l

Quando executo wmctrl -lG on (por exemplo) Xubuntu, com uma janela de mouse em cada espaço de trabalho:

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

A informação é bastante compreensível; a partir da segunda coluna, conhecemos o espaço de trabalho em que a janela está, sua posição (x, y, coluna 3/4) e o tamanho (x, y, coluna 5/6). A posição é dada em relação ao espaço em que está localizado.

No Unity, no entanto, é uma história bem diferente. Quando eu tenho quatro espaços de trabalho e abro uma janela do gedit em cada uma delas:

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

Algumas janelas têm coordenadas negativas, algumas (podem) ter coordenadas que excedem a resolução da minha tela.

    
por Jacob Vlijm 22.12.2014 / 21:08

1 resposta

4

Viewports versus espaços de trabalho

Como apontado em esta resposta , há uma diferença essencial entre o Compiz / Unity e outros gerenciadores de janelas.

Se olharmos para o Xubuntu (XFCE), todos os espaços de trabalho são espaços autônomos. Tudo o que precisamos saber é o espaço de trabalho em que está uma janela e as coordenadas x e y. Basicamente, não há matriz em que os espaços de trabalho são ordenados, além da ordem "lineair" 1, 2, 3, etc.

Isso é diferente no Unity, onde há apenas um um espaço de trabalho. O espaço de trabalho (abrangendo) é dividido em várias seções, chamadas de viewports. Essas viewports são organizadas em linhas e colunas.

Dessa forma, é possível que uma janela seja parcialmente visível em todas as viewports:

ao contrário dos espaços de trabalho:

Diferenças na saída de wmctrl -d e como interpretar

Para entender a saída de wmctrl -lG , devemos entender sua "anatomia":

  1. número da área de trabalho (primeiro = 0)
  2. marca de área de trabalho atual ("*" se for a área de trabalho atual (área de trabalho), "-" se não for)
  3. geometria da área de trabalho (o tamanho da área de trabalho x-y)
  4. posição da janela de visualização (posição na área de trabalho; consulte Unidade )
  5. geometria da área de trabalho como (tamanho "utilizável" da área de trabalho, menos painéis etc.; a primeira coluna é px da esquerda / superior)
  6. nome da área de trabalho (possivelmente contendo vários espaços)

Como o Unity tem apenas um espaço de trabalho, a saída sempre mostra um * on [2] . Como sabemos como as viewports são organizadas e qual é a viewport atual?

As informações estão em VP: 1680,0 ( [4] ). Não simplesmente como um número de viewport, mas como uma coordenada xey. Essas coordenadas podem ser zero ou x * da resolução da tela. Para saber como as viewports estão configuradas, precisaremos saber também a re-geração da tela (com a ajuda de xrandr ).

Como descobrir:

  • quantas visões existem atualmente e como elas são organizadas:

    Observando o DG: 3360x2100 no exemplo "Unity" e sabendo que a resolução da nossa tela é de 1680x1050, podemos concluir que há duas colunas de viewports (3360/1680) e duas linhas (2100/1050).

  • qual é o espaço de trabalho atual:

    Um exemplo
    A tela tem uma resolução de 1680x1050. A informação da janela de visualização sais VP: 1680,0 . Cordinates são exibidos como o canto superior esquerdo, Então estamos na segunda coluna, primeira linha.

  • em que uma janela está localizada em um sentido absoluto :

    Assim que soubermos qual porta de visualização é a atual, podemos localizar as janelas, observando suas coordenadas na saída de wmctrl -lG [3] :

  1. janela - id
  2. número da área de trabalho (em Unity: sempre 0 conforme indicado)
  3. coordenadas da janela, da perspectiva da viewport atual (x-y)
  4. tamanho da janela, da perspectiva do (w-h)
  5. nome do computador
  6. nome da janela

    Podemos simplesmente localizar a janela, com a origem no topo esquerdo da janela atual.

    Abaixo de um exemplo de uma resolução de tela de 1680x1050, viewports 2x2:

    Coordenadas da janela

    da perspectiva da janela de visualização 1

    Coordenadas da janela

    da perspectiva da janela de visualização 4

    • , que são as janelas na área de trabalho atual:

    Com as informações acima e com a ajuda de wmctrl -lG (as coordenadas da janela, seção [3] ), bem simples:

    se

    1. a coordenada x de uma janela está entre 0 e a resolução (horizontal) da tela, e
    2. a coordenada y de uma janela está entre 0 e a resolução (vertical) da tela

    então uma janela está localizada na viewport atual.

por Jacob Vlijm 22.12.2014 / 21:08