Detectando o screensaver com D-BUS


Leia em menos de um minuto

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