![除窗口管理器之外,如何计算打开的活动窗口数?](https://linux22.com/image/36293/%E9%99%A4%E7%AA%97%E5%8F%A3%E7%AE%A1%E7%90%86%E5%99%A8%E4%B9%8B%E5%A4%96%EF%BC%8C%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E6%89%93%E5%BC%80%E7%9A%84%E6%B4%BB%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%95%B0%EF%BC%9F.png)
我想计算除了我正在使用的窗口管理器之外打开的活动窗口的数量。我知道控制面板但是,当我执行以下操作时可以做到这一点:
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