他のウィンドウに相対的なウィンドウのZ軸位置を知らせるLinuxコマンドは何ですか?

他のウィンドウに相対的なウィンドウのZ軸位置を知らせるLinuxコマンドは何ですか?

xpropいくつかのLinuxコマンドで、または同様の方法で取得したウィンドウIDを提供wmctrlし、現在の「z-wards」スタック順序でウィンドウがどこにあるかを知りたいと思います。

たとえば、ウィンドウCがウィンドウBの後ろに(BのクリップCが重なり合っている場合など)、ウィンドウAがウィンドウの前にある場合、コマンドはウィンドウC、ウィンドウA、0B1などを表示します。2おそらく、「前」数字が「後ろ」数字よりも大きい可能性があります。それは私にとって重要ではありません。

答え1

あなたが探しているのは窓ではありません。財産しかし、Xがウィンドウを表示する方法には副作用があります。XRaiseWindowスレッドの詳細を調べたところ、ウィンドウのリストが並べXRestackWindows替えられたことがわかりました(Xサーバーの順序が変更されたと仮定)。見せるこれは明らかなスタック順序を制御します。)

これxwininfoこのコマンドは、すべてのウィンドウのサブウィンドウのリストを返すことができます。窓。同じ順序でレンダリングされます(使用XQueryTree、その説明によれば、現在積み重ねられた順序で子がリストされています)、それを解析して興味のあるウィンドウに関連付けるスクリプトを作成できます(すべてのウィンドウが興味深いわけではありません)。

ウィンドウIDはあまり役に立ちませんが、それをパラメータとして使用してxpropそのウィンドウのタイトルを見つけることができます。すべてのウィンドウにタイトルがあるわけではなく、その過程で考慮すべきいくつかの珍しい点があります。

(このソリューションはbashやLinuxに限定されず、どちらも以前のバージョンです。)

誰かが言及ヨーロッパWMH~の_NET_CLIENT_LIST:

_NET_CLIENT_LIST, WINDOW[]/32
_NET_CLIENT_LIST_STACKING, WINDOW[]/32

これらの配列には、ウィンドウマネージャが管理するすべてのX Windowsが含まれています。_NET_CLIENT_LIST最も古いウィンドウから始まる初期マッピング順序があります。_NET_CLIENT_LIST_STACKING下から上に積む順序があります。これらのプロパティはウィンドウマネージャが設定して更新する必要があります。

クイックチェックで探索すべき珍しい点を示します。

$ xprop -root
_NET_ACTIVE_WINDOW(WINDOW): window id # 0x400023
_NET_CLIENT_LIST(WINDOW): window id # 0x400023, 0xc00018, 0xa0000a
_NET_CLIENT_LIST_STACKING(WINDOW): window id # 0xa0000a, 0xc00018, 0x400023, 0xc00018
_NET_SUPPORTED(ATOM) = _NET_ACTIVE_WINDOW, _NET_CLIENT_LIST, _NET_CLIENT_LIST_STACKING, _NET_CLOSE_WINDOW, _NET_SUPPORTED, _NET_SUPPORTING_WM_CHECK, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_SHADE, _NET_WM_ALLOWED_ACTIONS, _NET_WM_NAME, _NET_WM_STATE, _NET_WM_STATE_FULLSCREEN, _NET_WM_STATE_HIDDEN, _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MODAL, _NET_WM_STATE_SHADED, _NET_WM_STATE_SKIP_PAGER, _NET_WM_STATE_SKIP_TASKBAR, _NET_WM_STATE_STICKY, _NET_WM_WINDOW_TYPE, _NET_WM_WINDOW_TYPE_COMBO, _NET_WM_WINDOW_TYPE_DESKTOP, _NET_WM_WINDOW_TYPE_DIALOG, _NET_WM_WINDOW_TYPE_DND, _NET_WM_WINDOW_TYPE_DOCK, _NET_WM_WINDOW_TYPE_DROPDOWN_MENU, _NET_WM_WINDOW_TYPE_MENU, _NET_WM_WINDOW_TYPE_NORMAL, _NET_WM_WINDOW_TYPE_NOTIFICATION, _NET_WM_WINDOW_TYPE_POPUP_MENU, _NET_WM_WINDOW_TYPE_SPLASH, _NET_WM_WINDOW_TYPE_TOOLBAR, _NET_WM_WINDOW_TYPE_TOOLTIP, _NET_WM_WINDOW_TYPE_UTILITY
_NET_SUPPORTING_WM_CHECK(WINDOW): window id # 0x800001
_XKB_RULES_NAMES(STRING) = "base", "empty", "empty", "", ""
_NATIVE_SCREEN_ORIGIN(INTEGER) = 0, 22

3つのウィンドウがあり、リストを1〜2回積み上げました。返品、どのwindow は表示されるクライアントの親であり、使用されるウィンドウマネージャによって異なります。

もちろん、まだ従わないWindowsマネージャもあります。ヨーロッパWMH。でもヨーロッパWMH、あなたはこれに感謝しなければなりません「しなければならない」。成功を保証するものではありません。

もちろん、比較のために:

$ xwininfo -root -children

xwininfo: Window id: 0x111 (the root window) (has no name)

  Root window id: 0x111 (the root window) (has no name)
  Parent window id: 0x0 (none)
     7 children:
     0x80000a (has no name): ()  806x853+0+1  +0+1
     0x40007d (has no name): ()  225x401+183+45  +183+45
     0x40007c (has no name): ()  295x464+101+45  +101+45
     0x800010 (has no name): ()  164x186+1113+5  +1113+5
     0x80000d (has no name): ()  246x159+950+0  +950+0
     0x800001 (has no name): ()  1x1+0+0  +0+0
     0x600001 (has no name): ()  1x1+0+0  +0+0

答え2

私が見つけた解決策この回答それは動作し、すべてのXベースのディストリビューションで動作すると思います。

xprop -root | grep '_NET_CLIENT_LIST_STACKING(WINDOW)'

私のシステムの結果は次のとおりです。

_NET_CLIENT_LIST_STACKING(WINDOW): window id # 0x3800003, 0x380000b, 0x58000fa, 0x5800006, 0x4a00d48

ID は左から右に z 順に並べられます。ここでは、必要に応じて情報を使用するのが簡単です。

xpropインストールが必要な場合があります。

関連情報