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

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

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

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

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

답변1

xdo 도구

대략적인 아이디어이지만 다음을 사용하여 몇 가지 명령을 만들어 원하는 것을 얻을 수 있습니다.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}

관련 정보