#!/usr/bin/env python

"""
(c) 2010 Andreas Boehler, andy (dot) boehler (at) gmx (dot) at

Execute program via DBus' System Bus. Run dbus-exec-server.py 
on startup in your WM and use dbus-exec.py to execute your
programs as root user.

v0.01, 2010/03/21
Initial Release

"""

import gobject

import dbus
import dbus.service
import dbus.mainloop.glib
import subprocess

class Exception(dbus.DBusException):
    _dbus_error_name = 'org.dyndns.klasseonline.Exception'

class SomeObject(dbus.service.Object):
                
    @dbus.service.method("org.dyndns.klasseonline.dbus_exec",
                        in_signature='as', out_signature='s')
    def execute(self, launch_string):
        retcode = subprocess.call(launch_string)
        return str(retcode)

    @dbus.service.method("org.dyndns.klasseonline.dbus_exec",
                         in_signature='', out_signature='')
    def Exit(self):
        mainloop.quit()


if __name__ == '__main__':
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    session_bus = dbus.SystemBus()
    name = dbus.service.BusName("org.dyndns.klasseonline.dbus_exec", session_bus)
    object = SomeObject(session_bus, '/exec')

    mainloop = gobject.MainLoop()
    print "Running dbus-exec service."
    mainloop.run()

