除窗口管理器之外,如何计算打开的活动窗口数?

除窗口管理器之外,如何计算打开的活动窗口数?

我想计算除了我正在使用的窗口管理器之外打开的活动窗口的数量。我知道控制面板但是,当我执行以下操作时可以做到这一点:

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

相关内容