Com notificações, você quer dizer os "balões OSD" que algum software envia, como alteração de volume, bate-papo por mensagem instantânea, etc.? Você deseja criar um programa python para capturá-los?
Bem, o Ask Ubuntu não é o controle de qualidade de um programador, e o desenvolvimento de software está um pouco além do escopo, mas aqui está um pequeno código que eu capturei bolhas de notificação:
import glib
import dbus
from dbus.mainloop.glib import DBusGMainLoop
def notifications(bus, message):
if message.get_member() == "Notify":
print [arg for arg in message.get_args_list()]
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string_non_blocking("interface='org.freedesktop.Notifications'")
bus.add_message_filter(notifications)
mainloop = glib.MainLoop()
mainloop.run()
Deixe isso em execução em um terminal, abra outra janela do terminal e teste-a:
notify-send --icon=/usr/share/pixmaps/debian-logo.png "My Title" "Some text body"
E o programa produzirá isso:
[dbus.String(u'notify-send'), dbus.UInt32(0L), dbus.String(u'/usr/share/pixmaps/debian-logo.png'), dbus.String(u'My Title'), dbus.String(u'Some text body'),...
Como você deve ter adivinhado, message.get_args_list()[0]
é o remetente, [2] para o ícone, [3] para o resumo e [4] para o texto do corpo.
Para o significado dos outros campos, verifique os documentos oficiais de especificação
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
não mostra nada, masdbus-monitor "interface='org.freedesktop.Notifications'"
mostra notificações (o tipo é 'method_call' e não 'signal').