GLib DBus vs Python DBus
I've been experimenting with DBus a bit lately for some side projects im doing (more on that soon). Part of the project involves spawning a service via dbus. In python this is trivial and easily discoverable with a google query or two:
import dbus bus = dbus.SessionBus() bus.start_service_by_name('org.gnome.Rygel1') # org.gnome.Rygel1 = service name
Ridiculously easy, right? In C using the glib dbus library things are much more difficult. A bit of googling yielded almost nothing when searching for "start service by name c glib" or variants thereof. So I did the evil thing, I checked out the python source. start_service_by_name is turns out, is a wrapper to a normal proxy call to the org.freedesktop.dbus interface function StartServiceByName:
return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH, BUS_DAEMON_IFACE, 'StartServiceByName', 'su', (bus_name, flags)))
Alright... so now how do we do this in C? We could fiddle with dbus_g_proxy_call for a while, or find out that Maemo actually gives us the answer.
DBusGConnection *connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); DBusGProxy *proxy = dbus_g_proxy_new_for_name (connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); int result; dbus_g_proxy_call (proxy, "StartServiceByName", &error, G_TYPE_STRING, "SERVICE_NAME", G_TYPE_UINT, 0, G_TYPE_INVALID, G_TYPE_UINT, &result, G_TYPE_INVALID))
Simple, right?