我想計算除了我正在使用的視窗管理器之外打開的活動視窗的數量。我知道控制面板但是,當我執行以下操作時可以做到這一點:
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