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())
추신. 검증되지 않은