Как подсчитать количество открытых активных окон, не считая оконного менеджера?

Как подсчитать количество открытых активных окон, не считая оконного менеджера?

Я хотел бы посчитать количество активных открытых окон, помимо оконного менеджера, который я использую. Я знаю, чтоwmctrlОднако я могу сделать это, если сделаю следующее:

wmctrl -l

На моем рабочем столе Ubuntu 14.04 64-бит, использующем Unity в качестве оконного менеджера, я получаю следующий вывод:

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

Однако я хотел бы игнорировать окна, которые использует unity/gnome/KDE и т. д., и учитывать только те окна, которые пользователь открыл самостоятельно. Как это сделать?

решение1

Не существует формального определения окна, принадлежащего оконному менеджеру или «открытого самостоятельно». Технически роль оконного менеджера не требует никаких окон: это другие части среды рабочего стола (обычно называемые виджетами), которые имеют окна. Нет атрибута в окне или приложении, который бы говорил «это часть среды рабочего стола».

Вы можете запустить wmctrl -lxи определить окна, которые вам не нужны, по их классу. Я не проверял, какие классы используют различные общие среды рабочего стола, заполните список по желанию.

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

В качестве альтернативы, возможно, вам подойдет обнаружение нелипких окон. Липкие окна — это те, которые отображаются на всех рабочих пространствах. Я не знаю, работает ли это со всеми оконными менеджерами.

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

Связанный контент