MATE 창 관리자는 창 ID를 어떻게 제공합니까?

MATE 창 관리자는 창 ID를 어떻게 제공합니까?

wmctrl과 관련된 스크립트를 작성하는 동안(LMDE 2의 MATE는 LMDE 2에는 없는 Compiz와 관련된 다른 WM 구성만큼 많은 고급 기능을 제공하지 않기 때문에) 동일한 제목을 가진 창 내에 창을 만듭니다.
이 문제는 다음과 같은 이유로 발생합니다.여기에 명시된 바와 같이, PID를 사용하여 창을 식별할 수 없습니다.
따라서 창 ID가 오름차순으로 제공된다는 가정(편집: 물론 상한선 포함)이 사실인지 궁금합니다.

그렇다면 간결하게 설명 부탁드립니다. (아시는 분들이라면 쉽게 대답하실 수 있을 거라 생각합니다.)

wmctrl -l밀접한 관련: 동일한 제목을 가진 창이 실제로 오름차순(16진수) 숫자 순서로 정렬되어 있는지도 알고 싶습니다 . 그럴 것 같지만 이에 대해 공식적으로 문서화된 진술을 찾지 못했습니다.

답변1

창 ID는 X 서버에서 제공됩니다. 창 관리자는 말할 것도 없습니다.

윈도우 ID는 윈도우가 속한 클라이언트를 상위 12비트로 인코딩합니다. 하위 12비트가 먼저 순차적으로 할당되지만, 중간 숫자가 비어 있으면 재사용할 수 있습니다. 따라서 창 ID를 비교하면 마지막으로 생성된 창이 확실하게 표시되지 않습니다.

프로세스 ID로 창을 식별할 수 있더라도 PID가 시간이 지남에 따라 항상 증가하는 것은 아니기 때문에 최신 창을 찾는 데 도움이 되지 않습니다. PID를 순차적으로 할당하는 Unix 변형(보편적이지 않음)에서도 최대값에 도달하면 래핑됩니다(기본값은 Linux에서 32767만큼 낮음). 또한 X11 클라이언트는 서버와 다른 시스템에서 실행될 수 있지만 프로세스 ID는 한 시스템에서만 의미가 있습니다.

Freedesktop 호환 애플리케이션(Mate Terminal 포함) 설정_NET_WM_USER_TIME재산사용자 활동(Mate 터미널의 경우 입력을 의미)이 있을 때마다 창이 표시됩니다. 이 속성을 쿼리할 수 있습니다 xprop -id … _NET_WM_USER_TIME. 이는 창이 생성된 시간이 아니라 마지막으로 활성화된 시간을 알려줍니다.

창을 확실하게 식별하려면 제목을 설정하는 것이 한 가지 방법입니다. 또 다른 가능성은 고유한 값으로 환경 변수를 설정하고 해당 고유한 값으로 프로세스를 사용 ps하거나 대상으로 지정하는 것입니다. /proc당신은 할 수X11 창을 연 클라이언트의 프로세스 ID 찾기그것을 통해_NET_WM_PID재산, 존재하는 경우 xprop또는 를 사용하여 쿼리 할 수 있습니다 xdotool getwindowpid. 이 속성이 있는 Windows에서는 이 속성을 클라이언트 프로세스를 실행하는 컴퓨터의 호스트 이름으로 _NET_WM_PID도 설정해야 합니다 . WM_CLIENT_MACHINE이것은 도움이 될 것입니다각 창마다 별도의 프로세스 사용.

답변2

내 생각엔 PID와 비슷하며 오름차순으로 할당되지만 다음과 같지는 않습니다.

PID 랩어라운드.

(지금은) 상승만 한다고 가정해 봅시다. 오랫동안 실행되는 시스템은 어떻게 되나요? ID가 너무 커지거나 ID 크기를 32비트, 64비트, 128비트로 늘려야 합니다.

올라가야 한다면 많은 시스템 리소스가 유휴 상태인 동안 소진될 수 있습니다(재사용할 수 없으므로 결국 시스템은 ID 소진으로 인해 종료됩니다).

관련 정보