ors*_*iro 13 scripts unity unity-tweak-tool
我真的很喜欢热角。:-)
是否可以在热角上运行自定义命令,如下所示?
wja*_*rea 10
安装 CompizConfig 设置管理器 (CCSM)。在终端运行:
sudo apt-get install compizconfig-settings-manager
Run Code Online (Sandbox Code Playgroud)打开 CCSM。
在其中一个插槽中输入所需的命令。例如:
转到“边缘绑定”选项卡
单击“无”并设置您想要的热角(或边缘),与您刚刚设置的命令相对应
将鼠标移到角落
现在您的命令已运行!
确认在 14.04 上工作。
如果您使用 Unity并安装了 ccsm,wjandrea 的答案当然就是您的答案。如果不是,或者要在其他发行版上使用,轻量级替代品可能会很有用。
使用下面的脚本,您可以设置特定于每个热点的任何命令。
例如,我进行了以下设置:
当然你也可以让命令运行外部脚本。
此外,您可以在行中设置热角的大小:
cornersize = 10
Run Code Online (Sandbox Code Playgroud)
只需更改值(像素)。脚本设置(方形)区域来触发您的命令:
cornersize = 10
Run Code Online (Sandbox Code Playgroud)
脚本需要 xdotool
sudo apt install xdotool
Run Code Online (Sandbox Code Playgroud)hotcorners2.py
在脚本的头部,设置你的命令(注意引号)
#!/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
Run Code Online (Sandbox Code Playgroud)
(随后左上/右下,左下/右下)
测试运行脚本:
python3 /path/to/hotcorners2.py
Run Code Online (Sandbox Code Playgroud)如果一切正常,请添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
Run Code Online (Sandbox Code Playgroud)如果我们使用更高级的计算,我们可以使用半径而不是正方形区域来触发命令(感谢老@pythagoras):
差异很小,但只是为了好玩:
sudo apt install xdotool
Run Code Online (Sandbox Code Playgroud)
几乎是一样的。在脚本的 head 部分设置您的命令和要触发的半径。
wjandrea 的答案 对于使用默认 Ubuntu 或 Ubuntu Kylin(或使用 compiz 作为他们的显示管理器)的人来说是最合适的答案,因此它得到了我的支持和尊重。下面提供的答案也可以在 Unity 上使用,但可能有点多余。但是,在没有 compiz 的桌面环境中,可以使用下面显示的指标。我已经在 Lubuntu 16.04 VM 中对其进行了简短的测试,所以我知道它可以在那里工作,并使其与 Kylin 14.04 兼容。对于 GNOME 和 MATE 桌面,您需要首先启用对 AppIndicators 的支持才能使用任何指示器。
我已经实现了indicator-edger
,它允许根据鼠标在屏幕 4 个边缘的任何位置触发用户定义的命令。原始版本是在一天内完成的,大约需要 7 个小时,因此它相当简约但可以完成工作。
该指标是通过~/.edger-commands.json
文件控制的,显然是在json
格式上。它可以由用户手动写入,或通过指标DEFINE COMMANDS
选项设置。启用/禁用触发选项会被记住并自动写入文件以方便用户。示例配置文件如下所示:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
Run Code Online (Sandbox Code Playgroud)
请注意"left"
文件中的条目。该边缘未设置,但由于json
语法,它需要在那里有一个空字符串,即引号""
。
一旦指示器检测到用户将鼠标放置在任何边缘(具有 ~3 像素边距),指示器将发送气泡通知并运行适当的命令(如果已定义)。除非用户将鼠标移离边缘,否则不会重复激活触发器。
从上面的屏幕截图中可以看出,该指标在命令行中也有调试输出。如果您发现任何错误,请随时从终端运行它,找出发生了什么错误,并在项目的 GitHub 的问题页面上提交相应的错误报告。
目前不支持角(仅边缘),它是为单显示器设置而构建的(显然,在创建后的 7 小时内无法覆盖所有基础),但这些功能可能在未来最终可用。
源代码可在项目GitHub页面或通过Launchpad 获得。安装通过终端中的以下命令执行:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger
Run Code Online (Sandbox Code Playgroud)