man wmctrlから:
wmctrlは、EWMH/NetWM仕様と互換性のあるXウィンドウマネージャーと対話するために使用できるコマンドです。wmctrlは、ウィンドウマネージャーに情報を照会し、特定のウィンドウ管理アクションの実行を要求できます。
wmctrl -d
コマンドを使用して、デスクトップ(ビューポート/ワークスペース)に関する情報を取得できます。wmctrl -lG
コマンドは、ジオメトリ情報を含むすべてのウィンドウを一覧表示します。
どうすれば(Unityと他のウィンドウマネージャーで):
これらの2つのコマンドを使用して、コマンドラインから?
wmctrl -dコマンド
デスクトップをリストします。 (たとえば)Xubuntuでは、wmctrl -d
を実行すると、現在のワークスペースである出力と、ワークスペースでの画面の解像度(DG)をはっきりと見ることができます。
0 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 1
1 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 2
2 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 3
3 * DG: 1024x600 VP: 0,0 WA: 0,31 1024x569 4
現在のワークスペースは、*
でマークされています。
ただし、Unityでは、wmctrl -d
の出力には、現在の「ワークスペース」に関係なく、*
でマークされた1つの(非常に大きな)ワークスペースのみが表示されます。
0 * DG: 3360x2100 VP: 1680,0 WA: 65,24 1615x1026 N/A
wmctrl -lGコマンド
from man wmctrl
:-l
:ウィンドウマネージャーによって管理されているウィンドウを一覧表示します。-G-
:-lアクションの出力にジオメトリ情報を含める
Xubuntuでwmctrl -lG
を実行すると、各ワークスペースにマウスパッドウィンドウがあります:
0x03400003 0 241 197 533 244 jacob-1001PX Untitled 1 - Mousepad
0x03400197 1 299 222 533 244 jacob-1001PX Untitled 2 - Mousepad
0x034001be 2 236 201 533 244 jacob-1001PX Untitled 3 - Mousepad
0x034001e3 3 283 228 533 244 jacob-1001PX Untitled 4 - Mousepad
情報は非常に理解しやすいものです。 2番目の列から、ウィンドウが配置されているワークスペース、その位置(x、y、列3/4)、およびサイズ(x、y、列5/6)がわかります。位置は、それが置かれているワークスペースに関連して与えられます。
ただし、Unityでは、まったく異なる話です。 4つのワークスペースがあり、それらのすべてでgeditウィンドウを開く場合:
0x03c03b81 0 468 -884 875 741 jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
0x03c03e74 0 369 164 1111 741 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
0x03c03f8e 0 -1269 214 1111 741 jacob-System-Product-Name Niet-opgeslagen document 3 - gedit
0x03c00085 0 -1376 -917 1111 741 jacob-System-Product-Name Niet-opgeslagen document 4 - gedit
一部のウィンドウには負の座標があり、一部の(場合によっては)画面の解像度を超える座標があります。
この回答 で指摘したように、Compiz/Unityと他のウィンドウマネージャーには本質的な違いがあります。
Xubuntu(XFCE)を見ると、すべてのワークスペースはスタンドアロンスペースです。知る必要があるのは、ウィンドウが置かれているワークスペースと、x座標とy座標だけです。基本的に、「lineair」の順序1、2、3などを除き、ワークスペースが順序付けられているマトリックスはありません。
これはUnityでは異なり、実際にはoneワークスペースのみがあります。 (スパニング)ワークスペースは、ビューポートと呼ばれるいくつかのセクションに分割されています。これらのビューポートは行と列に配置されます。
これにより、すべてのビューポートで1つのウィンドウが部分的に表示される可能性があります。
ワークスペースとは異なり:
wmctrl -lG
の出力を理解するには、その「構造」を理解する必要があります。
Unityには1つのワークスペースしかないため、出力alwaysは*
on [2]
を示します。ビューポートがどのように配置され、現在のビューポートが何であるかをどのように知るのですか?
情報はVP: 1680,0
([4]
)にあります。ビューポート番号としてではなく、xおよびy座標として。これらの座標は、ゼロまたはx
*画面の解像度にすることができます。ビューポートがどのように設定されているかを知るには、画面の解像度も(xrandr
の助けを借りて)知る必要があります。
現在存在するビューポートの数と配置方法:
「Unity」の例のDG: 3360x2100
を見て、画面の解像度が1680x1050であることを知っていると、ビューポートの2列(3360/1680)と2行(2100/1050)があると結論付けることができます。
これは現在のワークスペースです:
例
画面の解像度は1680x1050です。ビューポート情報はVP: 1680,0
です。座標は左上隅として表示されるので、2列目の1行目にあります。
ここで、ウィンドウはabsoluteの意味で配置されています。
どのビューポートが現在のビューポートであるかがわかったら、wmctrl -lG
[3]
の出力でそれらの座標を見て、ウィンドウをローカライズできます。
ウィンドウ名
Originを現在のビューポートの左上に置いて、ウィンドウを簡単に見つけることができます。
画面解像度1680x1050、ビューポート2x2の例の下:
ビューポート1の視点からのウィンドウ座標
ビューポート4の視点からのウィンドウ座標
上記の情報とwmctrl -lG
(ウィンドウ座標、セクション[3]
)の助けを借りれば、非常に簡単です:
もし
次に、現在のビューポートにウィンドウが配置されます。