"wmctrl"을 사용하여 PID를 통해 창 크기를 조정하고 이동하는 방법은 무엇입니까?

"wmctrl"을 사용하여 PID를 통해 창 크기를 조정하고 이동하는 방법은 무엇입니까?

저는 21:9 모니터를 사용하고 있으며 키보드 단축키를 사용하여 창을 모니터의 왼쪽, 가운데, 오른쪽으로 타일링/정렬하는 스크립트를 작성했습니다.

┌─────────┬─────────┬─────────┐
│ window1 │ window2 │ window3 │
│ left    │ centre  │ right   │
│ aligned │ aligned │ aligned │
└─────────┴─────────┴─────────┘

스크립트는 현재 초점을 맞춘 창의 이름을 가져오고
WINDOW_NAME=$(xdotool getwindowfocus getwindowname)
창 이름을 사용하여 창을 정렬하는 방식으로 작동합니다.
wmctrl -ir "$WINDOW_NAME" -e 1,$X_OFFSET,$Y_OFFSET,$X_WIDTH,$Y_HEIGHT

문제는 동일한 창 이름(예: 2개의 Firefox 브라우저 또는 3개의 터미널 등)으로 여러 개의 창이 열릴 때 현재 초점이 맞춰진 창을 이동하지 않고 동일한 이름의 모든 창 중 첫 번째 창을 이동한다는 것입니다.

즉, 3개의 터미널이 열려 있고 터미널 T2를 정렬하려고 한다고 가정하면 T1이 먼저 열리기 때문에 스크립트는 T2 대신 T1을 정렬합니다.

그래서 내 생각은 창 이름과 달리 PID가 고유하기 때문에 창 이름을 사용하는 대신 프로세스 ID(PID)를 사용하는 것입니다. 문제는 wmctrlPID를 사용하여 작업할 수 있느냐는 것입니다.

매뉴얼 페이지에서 wmctrl변수를 문자열 이름 대신 숫자로 해석하는 옵션을 찾았습니다.-i<WIN>

$ man wmctrl 
[...]
    -e <MVARG>
      Resize  and  move  a  window  that  has been specified with a -r
      action according to the <MVARG> argument.
[...]
    -r <WIN>
      Specify a target window for an action.
[...]
    -i     
      Interpret window arguments (<WIN>) as  a  numeric  value  rather
      than  a  string name for the window. If the numeric value starts
      with the prefix '0x' it is assumed to be a hexadecimal number.
[...]

나는 이 옵션이 무엇을 의미하는지 잘 이해하지 못하며 -i창 이름 대신 PID를 사용할 수 있다는 뜻일 수도 있다고 생각했습니다.

WINDOW_ID=$(xdotool getactivewindow getwindowpid)
WINDOW_ID=$(printf 0x%x $WINDOW_ID)
wmctrl -ir "$WINDOW_ID" -e 1,$X_OFFSET,$Y_OFFSET,$X_WIDTH,$Y_HEIGHT

불행하게도 이것은 작동하지 않습니다(10진수나 16진수에서는).

wmctrlQ1: 창 이름 대신 PID를 사용할 수 있나요 ?
Q2: -i이 옵션은 실제로 무엇을 의미합니까?

답변1

-i옵션에는 실행 후 얻게 되는 창 ID가 필요합니다.

xdotool getactivewindow

20971543과 같은 10진수를 인쇄합니다. 그래서 당신은 이것을 할 수 있습니다

wmctrl -i -r "$(xdotool getactivewindow)" ...

wmctrl하지만 의사 창 ID 문자열이 초점이 :ACTIVE:맞춰진 창을 나타내기 위해 허용되므로 이렇게 할 필요는 없습니다.

wmctrl -r :ACTIVE: ...

관련 정보