在 Ubuntu 12.04 中禁用/删除音量通知?

在 Ubuntu 12.04 中禁用/删除音量通知?

我删除了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。

相关内容