Gostaria de contar o número de janelas ativas abertas além do gerenciador de janelas que estou usando. Estou ciente de quewmctrlposso fazer isso, no entanto, quando faço o seguinte:
wmctrl -l
na minha área de trabalho Ubuntu 14.04 de 64 bits usando o Unity como gerenciador de janelas, a saída que recebo é:
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 o Unity/gnome/KDE, etc. usa e contar apenas as janelas que o usuário abriu por conta própria. Como faço isso?
Responder1
Não existe uma definição formal de janela pertencente ao gerenciador de janelas ou “aberta por conta própria”. Tecnicamente, a função de gerenciador de janelas não exige nenhuma janela: são outras partes do ambiente de área de trabalho (normalmente chamadas de widgets) que possuem janelas. Não há nenhum atributo em uma janela ou aplicativo que diga “isso faz parte do ambiente de desktop”.
Você pode executar wmctrl -lx
e identificar as janelas que não lhe interessam por sua classe. 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)$/'
Como alternativa, talvez a detecção de janelas não adesivas seja adequada para você. Janelas fixas 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