Documentation on using DBus with Python via GOI is rather thin. I have found this example in GJS, but when rewritten straight into Python it didn’t work.
Example in GJS:
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const DBusDaemonIface = <interface name='org.freedesktop.DBus'>
<method name='ListNames'>
<arg type='as' direction='out'/>
</method>
</interface>;
const DBusDaemonProxy = Gio.DBusProxy.makeProxyWrapper(DBusDaemonIface);
let main = function () {
var gdbusProxy = new DBusDaemonProxy(Gio.DBus.session,
'org.freedesktop.DBus', '/org/freedesktop/DBus');
gdbusProxy.ListNamesRemote(function(result, error){
print(result);
main_loop.quit();
});
var main_loop = new GLib.MainLoop(null, true);
main_loop.run();
};
main();The answer which helped was looking into https://git.gnome.org/browse/pygobject/tree/tests/test_gdbus.py which is a way better example of using Gio.DBusProxy machinery.
Example in Python:
1 from gi.repository import Gio
2
3
4 bus = Gio.bus_get_sync(Gio.BusType.SESSION, None)
5 proxy = Gio.DBusProxy.new_sync(bus, Gio.DBusProxyFlags.NONE, None,
6 'org.freedesktop.DBus',
7 '/org/freedesktop/DBus',
8 'org.freedesktop.DBus', None)
9 res = proxy.call_sync('ListNames', None, Gio.DBusCallFlags.NO_AUTO_START,
10 500, None)
11 print(res)