키 바인딩에 다음 스크립트를 추가했습니다.
5개의 nemo 인스턴스가 열려 있다고 가정해 보겠습니다. 처음 4개를 가져와 나란히 배치합니다.
#!/bin/bash
WINDOW_ID=$(xdotool getactivewindow)
CLASS_NAME=$(xprop -id $WINDOW_ID | grep WM_CLASS | cut -d '"' -f2)
WORKSPACE=$(xdotool get_desktop)
WindowsArray=()
for i in $(xdotool search --desktop $WORKSPACE --classname $CLASS_NAME); do
WindowsArray+=($i)
done
SCREEN_RESOLUTION=$(xdpyinfo | awk '/dimensions/ {print $2}')
SCREEN_WIDTH=$(echo $SCREEN_RESOLUTION | cut -d x -f1)
SCREEN_HEIGHT=$(echo $SCREEN_RESOLUTION | cut -d x -f2)
W=$(( $SCREEN_WIDTH / 4 ))
H=$(( $SCREEN_HEIGHT - 2 ))
allX=(0 $(( $SCREEN_WIDTH / 4 )) $(( $SCREEN_WIDTH / 2 )) $(( $SCREEN_WIDTH / 4 * 3 )))
echo "$W"
echo "$H"
echo "${allX[*]}"
ITER=0
for X in ${allX[@]}; do
echo "$X"
xdotool windowsize "${WindowsArray[$ITER]}" $W $H
xdotool windowmove "${WindowsArray[$ITER]}" $X 0
xdotool windowactivate "${WindowsArray[$ITER]}"
((ITER++))
done
문제는 모니터가 두 개라는 것입니다. 첫 번째 모니터에는 작업 표시줄이 있습니다.
두 번째 모니터에서 네모 창 4개를 열면 스크립트가 작동하지 않습니다. 두 번째 모니터의 창 4개 모두와 겹칩니다.
또 다른 문제는 작업 표시줄 높이입니다. 첫 번째 모니터에는 작업 표시줄이 있습니다. 높이를 빼려면 어떻게 해야 합니까?
답변1
나는 이것을 달성하기 위한 여러 가지 방법을 찾았습니다.우분투18.04(단일 모니터 사용) 두 변형 모두에서 시작 좌표는 x
첫 번째 창을 좌표에 배치한 다음 실제 좌표를 요청하여 0, 0
결정 됩니다.엑스오프셋은 xwininfo
프로그램에 의해 결정됩니다. 존재하다변형 1사용 가능한 너비를 구하고 추가하려면 루트 창 너비에서 이 오프셋을 뺍니다.변종 2사용 가능한 너비는 첫 번째 창을 100%로 늘리고 크기를 확인하여 결정됩니다.
창을 최대화하면 깜박임이 눈에 띄게 나타납니다. 최대화하기 전에 창을 보이지 않게 하기 위해 unmapping()을 시도했지만 이 경우 오프셋 값이 사라지고 - 0이 되기 때문에 한 번의 실행으로 두 값을 모두 얻을 xdotool windowunmap
수는 없습니다 . xwininfo
그러나 x
이 접근 방식은 상위 창의 축에 왼쪽(예: Ubuntu 실행 프로그램)뿐만 아니라 오른쪽에도 두 개의 패널이 있는 경우 유용할 수 있습니다.
변형 1
#!/bin/bash
window_num=${1:-4}
arr=( $(xdotool search --class xlogo) )
xdotool windowmove ${arr[0]} 0 0
xw_info_window_0=$(xwininfo -id ${arr[0]})
x_abs_offset=$(awk -F': +' '/Absolute upper-left X/{print $2}' <<< "$xw_info_window_0")
xw_info_root=$(xwininfo -root)
root_wdth=$(awk -F': +' '/Width/{print $2}' <<< "$xw_info_root")
root_hght=$(awk -F': +' '/Height/{print $2}' <<< "$xw_info_root")
avail_wdth=$((root_wdth - x_abs_offset))
new_wdth=$((avail_wdth / window_num))
new_hght=200
for i in $(seq 0 $((window_num - 1))); do
xdotool windowsize ${arr[$i]} "$new_wdth" "$new_hght"
xdotool windowmove ${arr[$i]} $(($((new_wdth * i)) + x_abs_offset)) 0
done
변종 2
#!/bin/bash
window_num=${1:-4}
arr=( $(xdotool search --class xlogo) )
xdotool windowsize ${arr[0]} 100% 100%
xdotool windowmove ${arr[0]} 0 0
xw_info=$(xwininfo -id ${arr[0]})
avail_wdth=$(awk -F': +' '/Width/{print $2}' <<< "$xw_info")
avail_hght=$(awk -F': +' '/Height/{print $2}' <<< "$xw_info")
x_abs_offset=$(awk -F': +' '/Absolute upper-left X/{print $2}' <<< "$xw_info")
new_wdth=$((avail_wdth / window_num))
new_hght=200
for i in $(seq 0 $((window_num - 1))); do
xdotool windowsize ${arr[$i]} "$new_wdth" "$new_hght"
xdotool windowmove ${arr[$i]} $(($((new_wdth * i)) + x_abs_offset)) 0
done
첫 번째 변형 데모: