Me gustaría contar la cantidad de ventanas activas abiertas además de las del administrador de ventanas que estoy usando. Estoy consciente dewmctrlPuedo hacer esto, sin embargo, cuando hago lo siguiente:
wmctrl -l
en mi escritorio Ubuntu 14.04 de 64 bits usando unity como administrador de ventanas, el resultado que obtengo es:
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
Sin embargo, me gustaría ignorar las ventanas que usa unity/gnome/KDE, etc. y contar solo las ventanas que el usuario ha abierto por su cuenta. ¿Cómo hago esto?
Respuesta1
No existe una definición formal de ventana que pertenezca al administrador de ventanas o que “se abra por sí sola”. Técnicamente, la función de administrador de ventanas no requiere ninguna ventana: son otras partes del entorno de escritorio (normalmente llamadas widgets) las que tienen ventanas. No hay ningún atributo en una ventana o en una aplicación que diga "esto es parte del entorno de escritorio".
Puede ejecutar wmctrl -lx
e identificar las ventanas que no le interesan por su clase. No he comprobado qué clases utilizan los distintos entornos de escritorio comunes; complete la lista como desee.
wmctrl -lx | awk '$3 !~ /^(Unity-.*|Kwin|Boringstuff)$/'
Alternativamente, tal vez detectar ventanas no adhesivas se ajuste a sus necesidades. Las ventanas adhesivas son las que se muestran en todos los espacios de trabajo. No sé si esto funciona con todos los administradores de ventanas.
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