다중 모니터로 전환 시 창 배치

다중 모니터로 전환 시 창 배치

여러 모니터에 분산되어 열려 있는 여러 개의 창이 있다고 가정해 보겠습니다. 그런 다음 단일 모니터를 사용하도록 전환합니다(아마도 도킹 스테이션에서 노트북을 제거했기 때문일 수 있음). 이제 모든 창이 하나의 화면에 표시됩니다.

그런 다음 다중 모니터 구성으로 다시 전환합니다. 이제 화면 공간이 더 많아졌지만 처음에는 모든 창이 단일 모니터에 쌓여 있습니다. 창문이 원래 있던 모니터로 돌아가면 좋을 것 같습니다.

이를 실현하는 방법에 대한 아이디어가 있습니까?

답변1

xdotool

대략적인 아이디어이지만 다음을 사용하여 몇 가지 명령을 만들어 원하는 것을 얻을 수 있습니다.xdotool. 그런 다음 1개 또는 2개의 모니터가 연결되어 있을 때 그에 따라 실행할 수 있습니다.

이 기사에는 이 작업을 수행할 수 있는 방법에 대한 아주 좋은 예가 있습니다.Xubuntu – 모니터 간 창 이동.

섹션에서 발췌: 활성 창을 다른 모니터로 이동(드디어!)

우리가 해야 할 일은 다음과 같습니다.

  • 활성 창 찾기
  • 최대화된 상태를 얻고 기억하세요.
  • 최대화 제거
  • 기하학을 얻으십시오
  • 새 위치 계산
  • 이동
  • 이전 상태를 기준으로 최대화
  • 올려봐

이를 수행하는 스크립트는 다음과 같습니다.

wid=`xdotool getactivewindow`
max_state=`xprop -id $wid _NET_WM_STATE`

wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval `xdotool getwindowgeometry --shell $wid`

new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
  new_x=0
fi

xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
  wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi

xdotool windowraise $wid

보다 상호작용적인 방법

xdotool또한 단축키와 연결할 수 있는 쉘 스크립트를 사용하고 이를 래핑하는 또 다른 접근 방식도 찾았습니다 . 이 방법을 사용하면 창을 선택하여 초점을 맞추고 바로 가기 키 조합을 눌러 응용 프로그램을 다른 창으로 보낼 수 있습니다. 기사 제목은 다음과 같습니다.모니터 간 창 이동.

이 방법은 다음 스크립트를 제공합니다 windowmove.sh.

#!/bin/bash
if [ $1 -eq 2 ]
then
POS1=`xrandr --current | head -2 | tail -1 | cut -d 'x' -f1 | cut -d ' ' -f3`
POS2=0
else
POS1=0
POS2=0
fi
/usr/bin/xdotool windowmove `/usr/bin/xdotool getwindowfocus` $POS1 $POS2
exit 0

POS1은 xrandr의 출력을 사용하여 기본 화면의 너비를 계산합니다. 스크립트가 창을 오른쪽으로 이동할 수는 없지만 왼쪽으로 이동할 수 있는 경우 해당 행을 POS1=1920으로 바꾸고 1920을 기본 모니터의 픽셀 너비로 바꾸십시오.

그런 다음 키보드 바인딩 애플릿을 실행하십시오.

$ gnome-keybinding-properties

메모:이는 GUI를 통해 다양한 배포판의 다양한 위치에서 실행 가능합니다.

다음 2개의 애플리케이션 실행을 사용하여 2개의 키 바인딩을 만듭니다.

  • 바인딩 #1의 명령:./Scripts/windowmove.sh 1
  • 바인딩 #2의 명령:./Scripts/windowmove.sh 2

답변2

. xdotool​다음을 사용하여 모든 창 위치를 기록한 다음 나중에 복원할 수 있습니다 wmctrl.

기록:wmctrl -lG > ${rcfile}

장소:

while read row; do
  IFS=" " read id g x y w h _ <<< ${row}
  wmctrl -ir ${id} -e 0,${x},${y},${w},${h}
done < ${rcfile}

관련 정보