This DBus library is written in Python 3, based on GLib and inspired by pydbus. Find out more in the documentation.
The code used to be part of the Anaconda Installer project. It was based on the pydbus library, but we replaced it with our own solution because its upstream development stalled. The dasbus library is a result of this effort.
You can install PyGObject provided by your operating system or use PyPI. The system package is usually called python3-gi
, python3-gobject
or pygobject3
. See the instructions for your platform (only for PyGObject, you don't need cairo or GTK).
The library is known to work with Python 3.8, PyGObject 3.34 and GLib 2.63, but these are not the required minimal versions.
Install the package from PyPI or install the package provided by your operating system if available.
Follow the instructions above to install the requirements before you install dasbus
with pip
. The required dependencies has to be installed manually in this case.
Follow the instructions for your operating system to install the python-dasbus
package. The required dependencies should be installed automatically by the system package manager.
Show the current hostname.
from dasbus.connection import SystemMessageBus bus = SystemMessageBus() proxy = bus.get_proxy( "org.freedesktop.hostname1", "/org/freedesktop/hostname1" ) print(proxy.Hostname)
Send a notification to the notification server.
from dasbus.connection import SessionMessageBus bus = SessionMessageBus() proxy = bus.get_proxy( "org.freedesktop.Notifications", "/org/freedesktop/Notifications" ) id = proxy.Notify( "", 0, "face-smile", "Hello World!", "This notification can be ignored.", [], {}, 0 ) print("The notification {} was sent.".format(id))
Handle a closed notification.
from dasbus.loop import EventLoop loop = EventLoop() from dasbus.connection import SessionMessageBus bus = SessionMessageBus() proxy = bus.get_proxy( "org.freedesktop.Notifications", "/org/freedesktop/Notifications" ) def callback(id, reason): print("The notification {} was closed.".format(id)) proxy.NotificationClosed.connect(callback) loop.run()
Asynchronously fetch a list of network devices.
from dasbus.loop import EventLoop loop = EventLoop() from dasbus.connection import SystemMessageBus bus = SystemMessageBus() proxy = bus.get_proxy( "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager" ) def callback(call): print(call()) proxy.GetDevices(callback=callback) loop.run()
Inhibit the system suspend and hibernation.
import os from dasbus.connection import SystemMessageBus from dasbus.unix import GLibClientUnix bus = SystemMessageBus() proxy = bus.get_proxy( "org.freedesktop.login1", "/org/freedesktop/login1", client=GLibClientUnix ) fd = proxy.Inhibit( "sleep", "my-example", "Running an example", "block" ) proxy.ListInhibitors() os.close(fd)
Define the org.example.HelloWorld service.
class HelloWorld(object): __dbus_xml__ = """ <node> <interface name="org.example.HelloWorld"> <method name="Hello"> <arg direction="in" name="name" type="s" /> <arg direction="out" name="return" type="s" /> </method> </interface> </node> """ def Hello(self, name): return "Hello {}!".format(name)
Define the org.example.HelloWorld service with an automatically generated XML specification.
from dasbus.server.interface import dbus_interface from dasbus.typing import Str @dbus_interface("org.example.HelloWorld") class HelloWorld(object): def Hello(self, name: Str) -> Str: return "Hello {}!".format(name) print(HelloWorld.__dbus_xml__)
Publish the org.example.HelloWorld service on the session message bus.
from dasbus.connection import SessionMessageBus bus = SessionMessageBus() bus.publish_object("/org/example/HelloWorld", HelloWorld()) bus.register_service("org.example.HelloWorld") from dasbus.loop import EventLoop loop = EventLoop() loop.run()
See more examples in the documentation.
Look at the complete examples or DBus services of the Anaconda Installer for more inspiration.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4