Take the 2-minute tour ×

I am attempting to filter every notification through espeak. However, I can't seem to find a way to get the notification body from a python script, or even what signal_name to listen to.


Trying to google for this only seems to yield results involving creating new notifications, so I am completely lost now.

Anyone can help me with this?

In short, what I want is to listen for incoming notifications using python, and obtaining the "body" attribute of the notification.

share|improve this question
It seems a notification doesn't produce a signal i.e., dbus-monitor "type='signal',interface='org.freedesktop.Notifications'" shows nothing but dbus-monitor "interface='org.freedesktop.Notifications'" shows notifications (type is 'method_call' not 'signal'). –  J.F. Sebastian Sep 7 '12 at 21:34
add comment

1 Answer

By notifications you mean the "OSD bubbles" that some software sends, like changing volume, IM chat, etc? You want to create a python program to capture those?

Well, Ask Ubuntu is not a programmer's QA, and software development is a bit beyond the scope, but here is a little code I did do capture notification bubbles:

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


bus = dbus.SessionBus()

mainloop = glib.MainLoop()

Leave this running in a terminal, then open another terminal window and test it:

notify-send --icon=/usr/share/pixmaps/debian-logo.png "My Title" "Some text body"

And the program will output this:

[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'),...

As you may have guessed, message.get_args_list()[0] is the sender, [2] for icon, [3] for summary and [4] for body text.

For the meaning of the other fields, check the official specification docs

share|improve this answer
add comment

Your Answer


