방금 시작한 GUI 프로그램의 X11 창 ID를 검색합니다.

방금 시작한 GUI 프로그램의 X11 창 ID를 검색합니다.

Windows 속성을 처리하기 위해 백그라운드에서 시작된 GUI 프로그램의 X ID를 검색하고 싶습니다. 지금까지 나는 이 해결 방법을 사용해 왔습니다.

myprogram &
sleep 1
winID=$(wmctrl -l | awk '/./{line=$0} END{print $1;}')

그러나 이는 세 가지 중요한 가정에 의존합니다.

  • 프로그램이 창을 여는 데 1초 미만이 소요됩니다(물론 1초 미만은 너무 길 수도 있습니다).
  • wmctrl창이 목록 끝에 추가됩니다.
  • 동시에 다른 창은 열리지 않습니다.

myprogram창이 열릴 때 어떤 신호가 전송됩니까? 어떻게 차단할 수 있나요?

답변1

내 프로그램에서 창 ID를 얻으려면 프로그램 제목을 고유한 것으로 설정한 다음 프로그램을 시작 wmctrl하고 출력을 구문 분석하고(프로그램을 시작하는 쉘 스크립트 대신) 창 ID를 보고합니다(대부분 다음을 통해). 파일) .

창이 열릴 때까지 프로그램이 계속 진행되지 않으므로 너무 오래 기다리지 않아도 됩니다.

물론 이를 위해서는 변경할 수 있어야 합니다 myprogram(예: 소스에서 컴파일).

답변2

Python gi 라이브러리 사용(가장 최근에 시작한 프로그램이 창 스택의 맨 위에 있다고 가정)


import gi
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck , Gtk

screen=Wnck.Screen.get_default()
while Gtk.events_pending() :
    Gtk.main_iteration()

all_windows=screen.get_windows_stacked()

print(all_windows[0].get_xid())


추신. 검증되지 않은

관련 정보