假设您打开了多个窗口,分布在多个监视器上。然后您切换到使用单个显示器(可能是因为您已将笔记本电脑从扩展坞中取出)。您的所有窗口现在都在一个屏幕上。
然后切换回多显示器配置。您现在拥有更多的屏幕空间,但所有窗口最初都堆积在单个显示器上。如果您的窗口能够返回到原来所在的显示器,那就太好了。
关于如何实现这一点有什么想法吗?
答案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}