Desabilitando / removendo a notificação de volume no Ubuntu 12.04?

2

Eu removi o notify-osd, mas outra notificação começou a aparecer ao alterar o volume:

Existe uma maneira de remover essa notificação também? Eu uso o controlador de volume do meu teclado Logitech G110 para ajustar o volume.

    
por Qcc 20.07.2013 / 22:05

1 resposta

3

A notificação de volume da sua captura de tela é gerada pelo plug-in media-keys para o gnome-settings-daemon. Infelizmente, depois de navegar pelo código um pouco, não parece que há uma maneira de desativar o OSD sem quebrar a funcionalidade das teclas (sem, claro, editar o código e recompilar, o que é uma opção viável) .

No entanto, notei que ele é suprimido quando as notificações do Ubuntu estão habilitadas. Isso não nos ajuda, é claro, porque você queria e removeu o notify-osd. Mas eu encontrei uma espécie de solução idiota. Em vez disso, criamos nosso próprio daemon de notificação simples, que diz que ele suporta as mensagens de volume e, em seguida, come todas as notificações silenciosamente. O código:

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()

Você pode, é claro, comentar a função de impressão no método Notify, mas achei que seria interessante incluir alguma saída para que você possa ver que está funcionando. GetCapabilities é onde a mágica acontece, o gnome-settings-daemon acha que o apoiamos para que não use seu próprio OSD.

    
por Jason Conti 20.07.2013 / 23:41

Tags