
假設您開啟了多個窗口,分佈在多個監視器上。然後您切換到使用單一顯示器(可能是因為您已將筆記型電腦從擴充座中取出)。您的所有視窗現在都在一個螢幕上。
然後切換回多顯示器配置。您現在擁有更多的螢幕空間,但所有視窗最初都堆積在單一顯示器上。如果您的視窗能夠回到原來所在的顯示器,那就太好了。
關於如何實現這一點有什麼想法嗎?
答案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
,但將其包裝在 shell 腳本中,然後您可以將其與快捷鍵關聯。使用此方法,您可以選擇一個窗口,使其升起並獲得焦點,然後透過按快捷鍵組合,將應用程式傳送到另一個視窗。文章標題為:在顯示器之間移動視窗。
該方法提供以下腳本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}