
여러 모니터에 분산되어 열려 있는 여러 개의 창이 있다고 가정해 보겠습니다. 그런 다음 단일 모니터를 사용하도록 전환합니다(아마도 도킹 스테이션에서 노트북을 제거했기 때문일 수 있음). 이제 모든 창이 하나의 화면에 표시됩니다.
그런 다음 다중 모니터 구성으로 다시 전환합니다. 이제 화면 공간이 더 많아졌지만 처음에는 모든 창이 단일 모니터에 쌓여 있습니다. 창문이 원래 있던 모니터로 돌아가면 좋을 것 같습니다.
이를 실현하는 방법에 대한 아이디어가 있습니까?
답변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}