私が使用しているウィンドウマネージャに加えて、開いているアクティブウィンドウの数を計算したいと思います。わかりましたコントロールパネルただし、次のような場合はこれを行うことができます。
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