Detectando o screensaver com D-BUS

14/10/06

Imagine que você precise detectar se o screensaver está ativo ou não. Utilizando o D-BUS, é muito simples!

Tudo o que você precisa fazer é acessar a interface "org.gnome.ScreenSaver", presente no Gnome.

bus = dbus.SessionBus()
obj = bus.get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')
screensaver = dbus.Interface(obj, 'org.gnome.ScreenSaver')
screensaver.connect_to_signal('ActiveChanged', detect_screensaver)

Abaixo, você tem um exemplo completo.

#! /usr/bin/env python
 
import dbus
import dbus.glib
import commands
import gtk
 
def detect_screensaver(enabled):
    print "Screensaver enabled? %s" % enabled
 
def enable_screensaver(widget):
    commands.getoutput(' gnome-screensaver-command --activate')
 
bus = dbus.SessionBus()
obj = bus.get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')
screensaver = dbus.Interface(obj, 'org.gnome.ScreenSaver')
screensaver.connect_to_signal('ActiveChanged', detect_screensaver)
 
win = gtk.Window()
button = gtk.Button('Activate screensaver')
 
win.connect('destroy', gtk.main_quit)
button.connect('pressed', enable_screensaver)
 
win.add(button)
win.show_all()
 
gtk.main()
 

Notificações usando D-BUS

11/10/06

Se você quer exibir notificações no seu aplicativo da mesma maneira que Rhythmbox faz, você pode usar o D-BUS, que faz a interface para você de maneira muito simples.

#!/usr/bin/env python
 
import dbus
 
icon = '/usr/share/icons/Human/48x48/devices/gnome-dev-cdrom-audio.png'
title = 'Listening to Sugarcult'
text = 'Album: Lights Out\nSong: Dead Living\nTrack: 2'
 
bus = dbus.SessionBus()
obj = bus.get_object('org.freedesktop.Notifications', 
                    '/org/freedesktop/Notifications')
dbus_notify = dbus.Interface(obj, 'org.freedesktop.Notifications')
dbus_notify.Notify("notify", 0, icon, title, text, '', {}, 4000)

Veja como fica legal:

Notificação usando D-BUS

Update: Se você quiser posicionar sua notificação, você pode usar os atributos "x" e "y":

dbus_notify.Notify("notify", 0, icon, title, text, '', {'x': 500, 'y': 500}, 4000)