¿Cómo contar el número de ventanas activas abiertas además de las del administrador de ventanas?

¿Cómo contar el número de ventanas activas abiertas además de las del administrador de ventanas?

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 -lxe 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

información relacionada