Linux

切換到多台顯示器時的視窗位置

  • September 14, 2020

假設您打開了多個分佈在多個監視器上的視窗。然後您切換到使用單個顯示器(可能是因為您已將筆記型電腦從其擴展塢中移除)。您的所有視窗現在都在一個螢幕上。

然後切換回多顯示器配置。您現在擁有更多的螢幕空間,但您的所有視窗最初都堆積在一個顯示器上。如果你的視窗能回到它們原來所在的顯示器,那就太好了。

關於如何實現這一點的任何想法?

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但將其包裝在一個 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

引用自:https://unix.stackexchange.com/questions/96066