切换到多个显示器时的窗口放置

切换到多个显示器时的窗口放置

假设您打开了多个窗口,分布在多个监视器上。然后您切换到使用单个显示器(可能是因为您已将笔记本电脑从扩展坞中取出)。您的所有窗口现在都在一个屏幕上。

然后切换回多显示器配置。您现在拥有更多的屏幕空间,但所有窗口最初都堆积在单个显示器上。如果您的窗口能够返回到原来所在的显示器,那就太好了。

关于如何实现这一点有什么想法吗?

答案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}

相关内容