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

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

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

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

相關內容