Lệnh thực tế bạn muốn là một cái gì đó như
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
Điều đó sẽ làm cho cửa sổ hiện tại chiếm một nửa màn hình (thay đổi $HALF
kích thước màn hình của bạn) và chụp sang phía bên trái. Để chụp sang phải, sử dụng
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
Bạn cũng có thể chơi với wmctrl
để lấy ID của các cửa sổ mà bạn quan tâm thay vì sử dụng :ACTIVE:
. Tôi không thể giúp đỡ mặc dù điều đó phụ thuộc vào các cửa sổ được đề cập. Có một cái nhìn man wmctrl
để biết thêm.
Tôi đã viết một kịch bản cho điều đó. Tôi không sử dụng Unity vì vậy tôi không thể đảm bảo rằng nó sẽ hoạt động với nó, nhưng tôi thấy không có lý do tại sao không. Nó cần wmctrl
, xdpyinfo
và disper
phải được cài đặt:
sudo apt-get install wmctrl x11-utils disper
Sau đó, lưu tập lệnh bên dưới dưới dạng ~/bin/snap_windows.sh
, làm cho nó có thể thực thi được chmod a+x ~/bin/snap_windows.sh
và bạn có thể chạy
snap_windows.sh r
Để chụp sang phía bên tay phải. Sử dụng l
cho phía bên trái và không có đối số để tối đa hóa cửa sổ. Lưu ý rằng nó chạy trên cửa sổ hiện tại, vì vậy bạn sẽ cần gán một phím tắt cho nó nếu bạn muốn nó chạy trên bất cứ thứ gì trừ thiết bị đầu cuối.
Kịch bản phức tạp hơn một chút so với những gì bạn yêu cầu vì tôi đã viết nó để hoạt động trên cả thiết lập màn hình đơn và màn hình kép.
#!/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