我可以设置 Hot Corners 以在 Unity 中运行自定义命令吗?

ors*_*iro 13 scripts unity unity-tweak-tool

我真的很喜欢热角。:-)

是否可以在热角上运行自定义命令,如下所示?

在此处输入图片说明

wja*_*rea 10

CCSM

  1. 安装 CompizConfig 设置管理器 (CCSM)。在终端运行:

    sudo apt-get install compizconfig-settings-manager
    
    Run Code Online (Sandbox Code Playgroud)
  2. 打开 CCSM。

  3. 转到“命令”
  4. 在其中一个插槽中输入所需的命令。例如:

    CCSM 截图 - 命令

  5. 转到“边缘绑定”选项卡

  6. 单击“无”并设置您想要的热角(或边缘),与您刚刚设置的命令相对应

    CCSM 截图 - 热点

  7. 将鼠标移到角落

  8. 现在您的命令已运行!

    CCSM 截图 - 命令运行

确认在 14.04 上工作。


Jac*_*ijm 6

自定义命令

如果您使用 Unity安装了 ccsm,wjandrea 的答案当然就是您的答案。如果不是,或者要在其他发行版上使用,轻量级替代品可能会很有用。

使用下面的脚本,您可以设置特定于每个热点的任何命令。

例如,我进行了以下设置:

  • 左上角 无操作
  • 右上 运行 Gedit
  • 左下 无动作
  • 右下角运行 Gnome 终端

当然你也可以让命令运行外部脚本。

此外,您可以在行中设置热角的大小

cornersize = 10
Run Code Online (Sandbox Code Playgroud)

只需更改值(像素)。脚本设置(方形)区域来触发您的命令:

在此处输入图片说明

剧本

cornersize = 10
Run Code Online (Sandbox Code Playgroud)

设置

  1. 脚本需要 xdotool

    sudo apt install xdotool
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将脚本复制到一个空文件中,将 i 保存为 hotcorners2.py
  3. 在脚本的头部,设置你的命令(注意引号)

    #!/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)

    (随后左上/右下,左下/右下)

  4. 测试运行脚本:

    python3 /path/to/hotcorners2.py
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果一切正常,请添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:

    /bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
    
    Run Code Online (Sandbox Code Playgroud)

笔记

  • 该脚本当前在(第一个)屏幕上运行。它可以轻松编辑以照顾多个屏幕,甚至可以在不同的屏幕上做不同的事情,请提及。
  • 如果少数人喜欢,我们可以添加一个gui和一个ppa,方便使用和安装。

编辑

如果我们使用更高级的计算,我们可以使用半径而不是正方形区域来触发命令(感谢老@pythagoras):

在此处输入图片说明

差异很小,但只是为了好玩:

剧本

sudo apt install xdotool
Run Code Online (Sandbox Code Playgroud)

用法

几乎是一样的。在脚本的 head 部分设置您的命令和要触发的半径。


Ser*_*nyy 5

笔记:

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)