Window-Manager

除了視窗管理器之外,如何計算打開的活動視窗的數量?

  • May 9, 2014

除了我正在使用的視窗管理器之外,我想計算打開的活動視窗的數量。我知道wmctrl可以做到這一點,但是,當我執行以下操作時:

wmctrl -l

在我使用 unity 作為視窗管理器的 Ubuntu 14.04 64 位桌面上,我得到的輸出是:

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 等使用的視窗,只計算使用者自己打開的視窗。我該怎麼做?

沒有屬於視窗管理器或“自行打開”的視窗的正式定義。從技術上講,視窗管理器角色不需要任何視窗:它是桌面環境的其他部分(通常稱為小元件)具有視窗。視窗或應用程序上沒有屬性表明“這是桌面環境的一部分”。

您可以通過他們的班級執行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

引用自:https://unix.stackexchange.com/questions/128506