配置 Unity 通知以在单击时关闭

配置 Unity 通知以在单击时关闭

我喜欢 Unity 的那些通知气泡,但我真正讨厌的一点是我无法点击它们消失。

我知道当我将鼠标悬停在它们上方时,它们会变得几乎透明,我可能会在下面的窗口中点击它们,但我更喜欢小一点的(X)图标即可将其关闭。

或者,当单击其上的任意位置时它也可能会关闭,这并不重要。

是否可以使用 Unity Desktop 在 Ubuntu 15.04 上进行设置?我该怎么做?

答案1

更改通知的鼠标悬停行为

几乎您所要求的,也可能是您想要的,一个很小的、非常轻的后台脚本(不会对您的系统造成任何明显的负载,如果没有通知运行,它只会等待/检查通知是否出现),它将改变鼠标悬停时通知的淡出效果:

在此处输入图片描述

在此处输入图片描述

消失(关闭):

在此处输入图片描述

仅当鼠标移动时才会生效从区域外进入通知区域,以确保在消息启动时鼠标已位于通知区域时,您不会错过通知。

如何使用

  1. 脚本需要xdotool

    sudo apt-get install xdotool
    
  2. 将以下脚本复制到一个空文件中,并将其另存为manage_notifications.py

  3. 通过以下命令测试运行脚本:

    python3 /path/to/manage_notifications.py
    

    脚本运行时,打开终端窗口并运行命令:

    notify send 'This is a test'
    

    现在将鼠标移到通知上。它不会淡出,而是会消失。

  4. 如果一切正常,请将其添加到您的启动应用程序中:Dash>启动应用程序>添加命令:

    /bin/bash -c "sleep 15 && python3 /path/to/manage_notifications.py"
    

剧本

#!/usr/bin/env python3
import subprocess
import time

w = int([s.split("x")[0] for s in subprocess.check_output(
    ["xrandr"]).decode("utf-8").split() if "+0+0" in s][0]
        )

def get_mouse():
    loc = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()[:2]
    return [int(n.split(":")[1]) for n in loc]

while True:
    time.sleep(1)
    try: 
        subprocess.check_output(["pgrep", "notify-osd"]).decode("utf-8")
        curloc1 = get_mouse(); t = 1
        while t < 10:
            time.sleep(1)
            curloc2 = get_mouse()
            test1 = curloc1[0] > w - 400 and curloc1[1] < 400
            test2 = curloc2[0] > w - 400 and curloc2[1] < 400
            if all([test1 == False, test2 == True]):
                subprocess.Popen(["pkill", "notify-osd"])
                break
            curloc1 = curloc2
            t = t+1
    except:
        pass

答案2

  1. 转到设置->键盘->快捷键->自定义。
  2. 将命令绑定xkill到键盘快捷键(例如,我已将我的设置为AltShiftK
  3. 每当您看到通知时,单击键盘快捷键 ,将指针悬停在通知上,单击它,它就会消失。

相关内容