Answers:
安装CompizConfig设置管理器(CCSM)。在终端中运行:
sudo apt-get install compizconfig-settings-manager
打开CCSM。
在其中一个插槽中输入所需的命令。例如:
转到“边缘绑定”选项卡
单击“无”,然后设置所需的热角(或边缘),该角对应于您刚刚设置的命令
将鼠标移到角落
现在您的命令已运行!
确认在14.04上工作。
如果您正在使用Unity 并安装了ccsm,那么wjandrea的答案就是您的答案。如果不是,或者要在其他发行版上使用,则可能需要轻量级的替代方案。
使用以下脚本,您可以设置特定于每个hotcorner的任何命令。
作为示例,我进行了以下设置:
当然,您也可以使命令运行外部脚本。
此外,您可以在该行中设置热角的大小:
cornersize = 10
只需更改值(像素)。该脚本设置(正方形)区域来触发命令:
#!/usr/bin/env python3
import subprocess
import time
cornersize = 20
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
match1 = None
while True:
time.sleep(1)
xy = get_pos()
x = xy[0]; y = xy[1]
test = [
[x < cornersize, y < cornersize],
[x > res[0]-cornersize, y < cornersize],
[x < cornersize, y > res[1]-cornersize],
[x > res[0]-cornersize, y > res[1]-cornersize],
]
match2 = [i for i, p in enumerate(test) if all(p)]
if match2 != match1:
if match2:
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
脚本需要 xdotool
sudo apt install xdotool
hotcorners2.py
在脚本的开头,设置命令(注意引号)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(因此,左上/右下,左下/右下)
测试运行脚本:
python3 /path/to/hotcorners2.py
如果一切正常,请添加到启动应用程序:Dash>启动应用程序>添加。添加命令:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
如果我们使用更高级的计算,则可以使用半径而不是正方形区域来触发命令(由于使用了好用的旧@pythagoras):
差异不大,但只是为了好玩:
#!/usr/bin/env python3
import subprocess
import math
import time
# set distance (hotcorner sensitivity)
radius = 20
# top-left, top-right, bottom-left, bottom-right
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
# get the resolution
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
# list the corners, could be more elegant no doubt
corners = [[0, 0], [res[0], 0], [0, res[1]], [res[0], res[1]]]
match1 = None
while True:
time.sleep(1)
pos = get_pos()
# get the current difference from the mousepointer to each of the corner (radius)
diff = [int(math.sqrt(sum([(c[i]-pos[i])**2 for i, n in enumerate(res)])))\
for c in corners]
# see if any of the corners is "approached" within the radius
match2 = [diff.index(n) for n in diff if n < radius]
# if so, and the corresponding command is not set to None, run it.
if all([match2 != match1, match2]):
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
差不多。在脚本的头部设置命令和要触发的半径。
对于使用默认Ubuntu或Ubuntu Kylin(或使用compiz作为其显示管理器)的人,wjandrea的答案是最合适的答案,因此它得到了我的支持和尊重。下面提供的答案也可以在Unity上使用,但可能会有点多余。但是,在没有compiz的桌面环境中,可以使用下面显示的指示器。我已经在Lubuntu 16.04 VM中对其进行了简短的测试,所以我知道它在那里工作,并且还使其与Kylin 14.04兼容。对于GNOME和MATE桌面,您需要首先启用对AppIndicators的支持才能使用任何指示器。
我实现indicator-edger
了允许基于鼠标位置(沿屏幕4个边缘的任何位置)触发用户定义的命令的功能。原始版本是在一天之内完成的,大约需要7个小时,因此虽然相当简单,但却可以完成工作。
指示器通过~/.edger-commands.json
file进行控制,json
格式很明显。它可以由用户手动编写,或通过指示器的DEFINE COMMANDS
选项进行设置。为了方便用户,将记住启用/禁用触发选项并自动将其写入文件。示例配置文件如下所示:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
注意"left"
文件中的条目。该边没有设置,但是由于json
语法原因,它需要在此处有一个空字符串,即quotes ""
。
一旦指示器检测到用户已将鼠标置于任意边缘(边缘约3个像素),指示器将发送气泡通知并运行适当的命令(如果已定义)。除非用户将鼠标从边缘移开,否则不会重复激活触发器。
从上面的屏幕快照中可以看到,指示器在命令行中也有调试输出。如果发现任何错误,请随时从终端运行它,找出发生了什么错误,然后在项目GitHub的问题页面上提交适当的错误报告。
当前不支持转角(仅边缘),它是为单显示器设置而构建的(显然,创建后的7个小时内无法覆盖所有基础),但是这些功能最终可能会在将来提供。
源代码可在项目GitHub页面或通过Launchpad获得。通过终端中的以下命令执行安装:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger