xprop
일부 Linux 명령에 또는 유사한 방법을 통해 얻은 창 ID를 제공 wmctrl
하고 현재 "z-wards" 스택 순서에서 창이 어디에 있는지 알려주고 싶습니다.
예를 들어, 창 C가 시각적으로 창 B 뒤에 있고(B의 클립 C가 서로 겹치는 경우와 같이) 창 A가 창 앞에 있는 경우 명령은 C 에 대해 0
창 A, 1
B 와 같은 내용을 알려줍니다. 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개의 창이 있고 목록을 한두 번 쌓았습니다. 반품,어느window는 표시되는 클라이언트의 상위이며 사용되는 창 관리자에 따라 달라질 수 있습니다.
물론 아직까지 따르지 않는 윈도우 매니저도 있습니다.유럽 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
설치가 필요할 수 있습니다.