![是否可以在 Unity(14.04+)中循环切换工作区?](https://linux22.com/image/1133916/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Unity%EF%BC%8814.04%2B%EF%BC%89%E4%B8%AD%E5%BE%AA%E7%8E%AF%E5%88%87%E6%8D%A2%E5%B7%A5%E4%BD%9C%E5%8C%BA%EF%BC%9F.png)
我已经配置了键盘快捷键,Alt + 左键将我带到左侧的工作空间,Alt + 右键将我带到右侧的工作空间,但我更希望有一组键可以循环。理想情况下,类似
workspace 1 + Alt + tab ---> worskspace 2
workspace 2 + Alt + tab ---> worskspace 3
workspace 3 + Alt + tab ---> worskspace 4
workspace 4 + Alt + tab ---> worskspace 1
问题出在最后一行。我看不出有什么办法可以从工作空间 4 回到工作空间 1。如何移动到右边的模 4 呢?
答案1
循环浏览视口
使用一个小脚本,可以很好地浏览工作区(实际上是视口):
剧本
#!/usr/bin/env python3
import subprocess
import sys
move = sys.argv[1]
# get the needed info from wmctrl -d
wsdata = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
# retrieve total size of workspace
ws = [int(n) for n in wsdata[3].split("x")]
# panel/launcher height/width
pans = [int(n) for n in wsdata[7].split(",")]
# work area
wa = [int(n) for n in wsdata[8].split("x")]
# x/y resolution
res_h = pans[0]+wa[0]; res_v = pans[1]+wa[1]
# current position in the spanning workspace
VP = [int(n) for n in wsdata[5].split(",")]
def last_h():
# test if we are on the last viewport horizontally
return VP[0]+res_h == ws[0]
def first_h():
# test if we are on the first viewport horizontally
return VP[0] == 0
def last_v():
# test if we are on the last viewport vertically
return VP[1]+res_v == ws[1]
def first_v():
# test if we are on the first viewport vertically
return VP[1] == 0
if move == "next":
if last_h() == False:
command = str(VP[0]+res_h)+","+str(VP[1])
elif last_v() == True:
command = "0,0"
else:
command = "0,"+str(VP[1]+res_v)
if move == "prev":
if first_h() == False:
command = str(VP[0]-res_h)+","+str(VP[1])
elif first_v() == True:
command = str(ws[0]-res_h)+","+str(ws[1]-res_v)
else:
command = str(ws[0]-res_h)+","+str(VP[1]-res_v)
subprocess.Popen(["wmctrl", "-o", command])
如何使用
脚本需要控制端:
sudo apt-get install wmctrl
将脚本复制到一个空文件中,另存为
through_viewports.py
将两个命令添加到两个不同的快捷键:
python3 /path/to/through_viewports.py next
转到下一个视口,然后:
python3 /path/to/through_viewports.py prev
转到上一个视口
打开系统设置 > 键盘 > 快捷键 > 自定义快捷键。单击
+
并将两个命令添加到您喜欢的快捷键中。
就是这样该脚本会检测您的视口如何设置并循环浏览它们。
它是如何工作的,概念
在 Unity 中,视口排列在一个大矩阵中,所有这些一起构成了单个工作区,Unity桌面存在的意义。
使用命令:
wmctrl -d
在输出中,我们可以读取所需的所有信息,以找出我们当前在矩阵中的位置。
0 * DG: 5120x2400 VP: 0,0 WA: 65,24 1215x776 N/A
5120x2400
是所有视口(矩阵)的总大小0,0
是矩阵中当前视口的 x/y 位置(左上角,像素)- 由此
WA: 65,24 1215x776
我们可以得出屏幕的分辨率(65,24
是启动器/面板的宽度/高度,1215x776
是剩余区域)
一旦我们获得正确的信息,脚本就会计算矩阵中的目标位置并使用以下命令进行设置:
wmctrl -o x,y
答案2
在 12.04 中,我通过使用 gconf-editor 编辑密钥解决了这个问题,但是在 16.04 中没有相同的密钥,因此下面是对我有用的方法:
sudo apt-get install compizconfig-settings-manager
安装 GUI 高级设置实用程序,然后
ccsm
然后我去了桌面墙 > 视口切换 > 允许环绕并勾选了该复选框。