응용 프로그램 시작 시 X11 창 클래스를 설정하는 방법

응용 프로그램 시작 시 X11 창 클래스를 설정하는 방법

자체 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 '.*'때문에 이렇게 해야 합니다 .xdotoolxdotool 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

관련 정보