원하는 실제 명령은 다음과 같습니다
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
그러면 현재 창이 화면의 절반을 차지하고 (화면 $HALF
크기로 변경 ) 왼쪽에 스냅됩니다. 오른쪽으로 스냅하려면
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
wmctrl
를 사용하는 대신 관심있는 창의 ID를 얻기 위해 게임을 할 수도 있습니다 :ACTIVE:
. 그래도 문제의 창에 달려 있기 때문에 도울 수 없습니다. man wmctrl
자세한 내용을 살펴보십시오 .
나는 그것을 위해 스크립트를 작성했습니다. 나는 Unity를 사용하지 않으므로 Unity와 함께 작동한다고 보장 할 수는 없지만 그 이유가 없습니다. 그것은 필요 wmctrl
, xdpyinfo
및 disper
설치할 수 :
sudo apt-get install wmctrl x11-utils disper
그런 다음 아래의 스크립트를로 저장하고 ~/bin/snap_windows.sh
실행 파일로 chmod a+x ~/bin/snap_windows.sh
만들고 실행할 수 있습니다.
snap_windows.sh r
오른쪽으로 스냅합니다. l
창을 최대화하기 위해 왼쪽에 인수없이 사용하십시오 . 현재 창에서 실행되므로 터미널 이외의 곳에서 실행하려면 바로 가기를 지정해야합니다.
이 스크립트는 단일 및 이중 모니터 설정 모두에서 작동하도록 작성했기 때문에 요청한 것보다 약간 더 복잡합니다.
#!/usr/bin/env bash
## If no side has been given, maximize the current window and exit
if [ ! $1 ]
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
exit
fi
## If a side has been given, continue
side=$1;
## How many screens are there?
screens=`disper -l | grep -c display`
## Get screen dimensions
WIDTH=`xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x'`;
HALF=$(($WIDTH/2));
## If we are running on one screen, snap to edge of screen
if [ $screens == '1' ]
then
## Snap to the left hand side
if [ $side == 'l' ]
then
## wmctrl format: gravity,posx,posy,width,height
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
## Snap to the right hand side
else
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
fi
## If we are running on two screens, snap to edge of right hand screen
## I use 1600 because I know it is the size of my laptop display
## and that it is not the same as that of my 2nd monitor.
else
LAPTOP=1600; ## Change this as approrpiate for your setup.
let "WIDTH-=LAPTOP";
SCREEN=$LAPTOP;
HALF=$(($WIDTH/2));
if [ $side == 'l' ]
then
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$LAPTOP,0,$HALF,-1
else
let "SCREEN += HALF+2";
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$SCREEN,0,$HALF,-1;
fi
fi