Como contar o número de janelas ativas abertas à parte do gerenciador de janelas?

1

Gostaria de contar o número de janelas ativas abertas em relação ao número do gerenciador de janelas que estou usando. Estou ciente de que wmctrl pode fazer isso, no entanto, quando eu faço o seguinte:

wmctrl -l

na minha área de trabalho de 64 bits do Ubuntu 14.04 usando unity como gerenciador de janelas, a saída que obtenho é:

0x03c00002  0 stepup XdndCollectionWindowImp
0x03c00005  0 stepup unity-launcher
0x03c00008  0 stepup unity-panel
0x03c0000b  0 stepup unity-dash
0x03c0000c  0 stepup Hud
0x02c0000a  0 stepup Desktop
0x02e000b3  0 stepup How to count the number of active windows open irrespective of window manager? - Unix & Linux Stack Exchange - Mozilla Firefox
0x0340000c  0 stepup Terminal

No entanto, eu gostaria de ignorar as janelas que unity / gnome / KDE, etc. usam e contam apenas as janelas que o usuário abriu sozinho. Como eu faço isso?

    
por jobin 08.05.2014 / 18:03

1 resposta

1

Não há definição formal de janela pertencente ao gerenciador de janelas ou "aberto por conta própria". Tecnicamente, a função de gerenciador de janelas não requer nenhuma janela: são outras partes do ambiente da área de trabalho (normalmente chamadas de widgets) que possuem janelas. Não há nenhum atributo em uma janela ou em um aplicativo que diz “isso faz parte do ambiente de área de trabalho”.

Você pode executar wmctrl -lx e identificar as janelas das quais você não se importa com a turma. Eu não verifiquei quais classes os vários ambientes de desktop comuns usam, preencha a lista conforme desejado.

wmctrl -lx | awk '$3 !~ /^(Unity-.*|Kwin|Boringstuff)$/'

Alternativamente, talvez a detecção de janelas não aderentes caiba na sua conta. Janelas pegajosas são aquelas exibidas em todos os espaços de trabalho. Não sei se isso funciona com todos os gerenciadores de janelas.

for w in $(wmctrl -l | awk '{print $1}'); do
  if ! xprop -id $w _NET_WM_STATE | grep -q _NET_WM_STATE_STICKY; then
    wmctrl -l -i $w
  fi
done
    
por 09.05.2014 / 02:27