web-dev-qa-db-ja.com

Unityのwmctrl -dとwmctrl -lGの正確な関係は何ですか?

man wmctrlから:

wmctrlは、EWMH/NetWM仕様と互換性のあるXウィンドウマネージャーと対話するために使用できるコマンドです。wmctrlは、ウィンドウマネージャーに情報を照会し、特定のウィンドウ管理アクションの実行を要求できます。

特に質問

wmctrl -dコマンドを使用して、デスクトップ(ビューポート/ワークスペース)に関する情報を取得できます。wmctrl -lGコマンドは、ジオメトリ情報を含むすべてのウィンドウを一覧表示します。

どうすれば(Unityと他のウィンドウマネージャーで):

  • ワークスペースの概要とそれらの配置を取得しますか?
  • 現在のワークスペースがどれであるかを見つけますか?
  • absoluteの意味でウィンドウの位置を見つけますか?
  • 現在のワークスペースにあるウィンドウをリストしますか?

これらの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

一部のウィンドウには負の座標があり、一部の(場合によっては)画面の解像度を超える座標があります。

4
Jacob Vlijm

ビューポートとワークスペース

この回答 で指摘したように、Compiz/Unityと他のウィンドウマネージャーには本質的な違いがあります。

Xubuntu(XFCE)を見ると、すべてのワークスペースはスタンドアロンスペースです。知る必要があるのは、ウィンドウが置かれているワークスペースと、x座標とy座標だけです。基本的に、「lineair」の順序1、2、3などを除き、ワークスペースが順序付けられているマトリックスはありません。

これはUnityでは異なり、実際にはoneワークスペースのみがあります。 (スパニング)ワークスペースは、ビューポートと呼ばれるいくつかのセクションに分割されています。これらのビューポートは行と列に配置されます。

これにより、すべてのビューポートで1つのウィンドウが部分的に表示される可能性があります。

enter image description here

ワークスペースとは異なり:

enter image description here

Wmctrl -dの出力と解釈方法の違い

wmctrl -lGの出力を理解するには、その「構造」を理解する必要があります。

enter image description here

  1. デスクトップ番号(最初= 0)
  2. 現在のデスクトップマーク(現在のデスクトップ(ワークスペース)の場合は「*」、そうでない場合は「-」)
  3. デスクトップジオメトリ(デスクトップx-yのsize
  4. ビューポートの位置(デスクトップ上の位置;Unityを参照)
  5. ワークエリアジオメトリ(デスクトップの「使用可能な」サイズ、パネルなどを除く。最初の列は左/上からのpx)
  6. デスクトップの名前(複数のスペースを含む可能性があります)

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]の出力でそれらの座標を見て、ウィンドウをローカライズできます。

enter image description here

  1. ウィンドウ-id
  2. デスクトップ番号(Unityの場合:指摘されているように常に0)
  3. 現在のビューポートの視点からのウィンドウ座標(x-y)
  4. (w-h)の観点からのウィンドウサイズ
  5. コンピュータネーム
  6. ウィンドウ名

    Originを現在のビューポートの左上に置いて、ウィンドウを簡単に見つけることができます。

    画面解像度1680x1050、ビューポート2x2の例の下:

    ビューポート1の視点からのウィンドウ座標

    enter image description here

    ビューポート4の視点からのウィンドウ座標

    enter image description here

    • 現在のワークスペース上のウィンドウ:

    上記の情報とwmctrl -lG(ウィンドウ座標、セクション[3])の助けを借りれば、非常に簡単です:

    もし

    1. ウィンドウのx座標は、0から画面の(水平)解像度までの間ですand
    2. ウィンドウのy座標が0から画面の(垂直)解像度の間

    次に、現在のビューポートにウィンドウが配置されます。

4
Jacob Vlijm