我删除了notify-osd,但是在改变音量时却出现了另一个通知:
有没有办法也可以删除此通知?我使用 Logitech G110 键盘的音量控制器来调节音量。
答案1
屏幕截图中的音量通知是由 gnome-settings-daemon 的 media-keys 插件生成的。遗憾的是,浏览了一会儿代码后,似乎没有办法在不破坏按键功能的情况下禁用 OSD(当然,无需编辑代码并重新编译,这当然是一个可行的选择)。
但是,我确实注意到,当启用 Ubuntu 通知时,它会被抑制。当然,这不会立即帮助我们,因为您想要并已删除了通知 OSD。但我想出了一个有点愚蠢的解决方案。相反,我们创建了自己的简单通知守护进程,它表示支持音量消息,然后默默地吃掉所有通知。代码:
from __future__ import print_function
import dbus
import dbus.service
import dbus.mainloop.glib
from gi.repository import GObject
SERVICE_NAME = "org.freedesktop.Notifications"
SERVICE_PATH = "/org/freedesktop/Notifications"
class Notifications(dbus.service.Object):
@dbus.service.method(SERVICE_NAME,
in_signature="susssasa{sv}i", out_signature="u")
def Notify(self, app_name, id, icon, summary, body, actions, hints, timeout):
print(app_name, summary, body)
return 1
@dbus.service.method(SERVICE_NAME,
in_signature="u", out_signature="")
def CloseNotification(self, id):
pass
@dbus.service.method(SERVICE_NAME,
in_signature="", out_signature="as")
def GetCapabilities(self):
return ["x-canonical-private-synchronous"]
@dbus.service.method(SERVICE_NAME,
in_signature="", out_signature="ssss")
def GetServerInformation(self):
return ("empty", "empty", "empty", "empty")
if __name__ == "__main__":
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
session_bus = dbus.SessionBus()
name = dbus.service.BusName(SERVICE_NAME)
path = Notifications(session_bus, SERVICE_PATH)
mainloop = GObject.MainLoop()
mainloop.run()
您当然可以注释掉 Notify 方法中的打印功能,我只是认为最好包含一些输出,以便您可以看到它正在运行。GetCapabilities
奇迹发生的地方是,gnome-settings-daemon 认为我们支持它,所以它不使用自己的 OSD。