자체 x11 창 클래스를 설정하지 않는 응용 프로그램이 있습니다. 명령줄에서 이 작업을 쉽게 수행할 수 있는 방법이 있습니까? 이 작업을 수행하기 위해 x11 명령을 검색했지만 아무것도 찾지 못했습니다.
예:
some_command --window-class 'NewWindowClass' --run MY_PROGRAM
답변1
응용 프로그램은 창을 만들 때 클래스를 설정합니다.
이는 궁극적으로 애플리케이션이 클래스를 설정할 수 있는지 여부와 그렇다면 사용할 명령줄 옵션을 결정한다는 의미입니다. 보편적인 선택은 없습니다.
특히, 다른 애플리케이션에서는 이 작업을 수행할 수 없습니다(라이브러리를 미리 로드하고 XCreateWindow 호출 등을 가로채는 등 까다로운 작업을 시작하지 않는 한).
그러나 응용 프로그램이 Xt 명령줄 구문 분석을 사용하는 경우 이 옵션은 -class
일반적으로 작동합니다(응용 프로그램에서 비활성화하지 않는 한).
답변2
나에게도 이 기능이 필요하다. 어때요?
xclock &
PID=$!
xdotool search --sync --all --pid ${PID} --name '.*' set_window --classname "A" set_window --class "B"
작동 방식은 다음과 같습니다.
MY_PROGRAM
백그라운드에서 X 응용 프로그램 시작(귀하의 경우)- 실행된 애플리케이션의 프로세스 ID(PID)를 변수에 저장합니다.
- PID에서 X 창 ID를 찾는 데 사용됩니다
xdotool
(이 옵션을 사용하려면 창이 처음 나타날 때까지 기다립니다sync
). xdotool
창의classname
합계를 설정하는 데 사용됩니다.class
참고: PID만을 기반으로 한 검색 과 같은 짧은 호출은 지원되지 않는 것 같기 xdotool search --sync --all --pid ${PID} --name '.*'
때문에 이렇게 해야 합니다 .xdotool
xdotool search --sync --pid ${PID}
또한 문서에 명시된 대로 작동하지 않을 수도 있습니다 xdotool
.
이는 창에 이 메타데이터를 설정하지 않은 일부 X 응용 프로그램에서는 작동하지 않을 수 있습니다.
X 창 ID를 직접 얻을 수 있는 안정적인 방법이 있는 경우 다음을 수행하면 됩니다( 0x0620000a
자신의 X 창 ID로 변경).
xdotool set_window --classname "A" 0x0620000a set_window --class "B" 0x0620000a
작동하는지 확인하려면 다음을 수행하십시오.
wmctrl -l -x -p | grep xclock
다음이 출력되어야 합니다:
0x0640000a 0 993355 A.B pc xclock