我设法让Aero snap 在 metacity Ubuntu 14.10 中左右工作,现在我想提出正确的winctrl
命令,以便我可以在两个屏幕设置上模拟相同的效果,其中两个屏幕水平放置在每个屏幕旁边其他如下图。我希望它能在 Metacity(GNOME 经典)上运行,我根本不愿意转移到其他窗口管理器,因为我知道其中一些已经内置了这些功能。因此,这是一个专门针对 Metacity GNOME 经典环境尝试寻找答案的问题:
我想要的是扩展我当前的winctrl
命令。他们目前的工作方式是在屏幕总长度的左侧或右侧使用屏幕总宽度的一半。键入Super_L+left
将使活动窗口使用左半部分,键入Super_L+right
将使活动窗口使用总水平像素的右半部分。
[hpenvy15 ~] $ cat > ~/bin/left.sh
#!/bin/bash
sleep 0.1 && wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz && wmctrl -r :ACTIVE: -e 0,0,0,`xwininfo -root | grep Width | awk '{ print (($2/2))}'`,`xwininfo -root | grep Height | awk '{ print $2 }'`
^C
[hpenvy15 ~] $ cat > ~/bin/right.sh
#!/bin/bash
sleep 0.1 && wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz && wmctrl -r :ACTIVE: -e 0,`xwininfo -root | grep Width | awk '{ print (($2/2)+5) ",0," (($2/2)) }'`,`xwininfo -root | grep Height | awk '{ print $2 }'`
^C
在具有两个屏幕的新设置中,我有 1920+1920 像素宽。理想的窗宽是1920的一半,即1920/2=960。我想要新的left
和right
命令来计算当前找到的窗口在哪里,然后如果left
键入,则转到最近的 960 宽像素块,在两个屏幕中存在的 4 个块中的任何一个,1920 + 1920 配置,但也适用于单屏 1920 配置中最近的 960 宽块。如下图所示:
这是当我在 1 和 2 中有外部屏幕,在 3 和 4 中有笔记本电脑屏幕时的配置。目前,单击Super_L+left
会将窗口移动到屏幕的 TotalWidth/2 左半部分,这太大了,将1+2。
我希望第一个left
命令将它移动到窗格 3,然后下一个left
命令将它移动到 2,然后下一个命令将它移动到 1。
+-------------------++-------------------++-------------------++-------------------+
| || || || +------------+ |
| || || || | | |
| || || <-------++-+ | |
| || || || | | |
| 1 || 2 || 3 || | 4 | |
| || || || | | |
| || || || +------------+ |
| || || || |
| || || || |
+-------------------++-------------------++-------------------++-------------------+
这是当我只有两半 960 像素宽的笔记本电脑屏幕时的配置。
目前,单击Super_L+right
会将窗口移动到屏幕的 TotalWidth/2 右半部分,对应于数字 4。
+-------------------++-------------------+
| +------------+ || |
| | | || |
| | | || |
| | |----++---> |
| | 3 | || 4 |
| | | || |
| | | || |
| +------------+ || |
| || |
+-------------------++-------------------+
这是wmctrl
两个屏幕打开时的输出:
wmctrl -d
0 * DG: 3840x1080 VP: 0,0 WA: 0,0 3840x1080 Workspace 1
1 - DG: 3840x1080 VP: N/A WA: 0,0 3840x1080 Workspace 2
2 - DG: 3840x1080 VP: N/A WA: 0,0 3840x1080 Workspace 3
3 - DG: 3840x1080 VP: N/A WA: 0,0 3840x1080 Workspace 4
这是xrandr
同时打开两个屏幕时的输出:
[hpenvy15 ~] $ xrandr
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+1920+0 (normal left inverted right x axis y axis) 344mm x 193mm
1920x1080 60.1*+ 59.9 40.0
1680x1050 60.0 59.9
1600x1024 60.2
1400x1050 60.0
1280x1024 60.0
1440x900 59.9
1280x960 60.0
1360x768 59.8 60.0
1152x864 60.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 521mm x 293mm
1920x1080 60.0*+ 50.0 59.9 30.0 25.0 24.0 30.0 24.0
1920x1080i 60.1 50.0 60.0
1680x1050 59.9
1600x900 60.0
1280x1024 75.0 60.0
1440x900 59.9
1366x768 59.8
1280x800 59.9
1152x864 75.0
1280x720 60.0 50.0 59.9
1440x576i 50.1
1024x768 75.1 70.1 60.0
1440x480i 60.1 60.1
832x624 74.6
800x600 72.2 75.0 60.3
720x576 50.0
720x480 60.0 59.9
640x480 75.0 72.8 66.7 60.0 59.9
720x400 70.1
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
我在 Ubuntu (Gnome) Classic 和 Gnome Flashback (Metacity) 14.04 上测试了下面的脚本。
xdotool
和的“混合”应用程序wmctrl
是必要的,因为我在为 Metacity 编写脚本时遇到了一些特殊情况。解决方案
由于我希望脚本能够:
-- 脚本比我预见的要更广泛一些。
它能做什么:
如果连接了第二台显示器:
它的工作原理与您描述的差不多:
如果没有连接第二台显示器:
它以传统方式工作:
如何使用它
同时安装
xdotool
和wmctrl
:将脚本复制到一个空文件中,将其保存为
aero.py
通过命令运行剧本
也发布在gist.gisthub(最新版本)