HowDoI/GDBusPython – GNOME Wiki Archive

This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex]

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)

2024年10月23日 11:12

AltStyle によって変換されたページ (->オリジナル) /