GLT 2025 ======== .. contents:: :local: Submission ---------- systemd's D-Bus Implementation, And Its Python ``asyncio`` Binding .................................................................. Abstract ```````` An overview of D-Bus, systemd, and systemd's own D-Bus implementation, `sd-bus `__. Less slide show, more live coding in Python and `asyncio `__. Description ``````````` D-Bus is a broker-based interprocess communication mechanism which has been used for ages in Linux's desktop environments like `GNOME `__ or `KDE `__. `systemd `__, the Linux init system and service manager, likewise consists of many loosely coupled components. Since systemd's inception, likewise, its components are using D-Bus to communicate. Over time, the systemd developers have become uncomfortable with the existing D-Bus implementation they were using. They created another implementation, `sd-bus `__, tailored towards systemd's needs - minimal and fast. This talk gives an overview of D-Bus and its concepts, and then shows how sd-bus is used to implement one's own interfaces and components. Out of its many language bindings, we will use Python to implement a use case, just to show how simple this is. You will probably like the use of `asyncio `__ in the talk. For those of you who don't know what this is and what problems it solves, I'll try to explain, however hard that may be. Talk Concept ------------ * incoming AF_UNIX dgrams * v1: single receiving socket .. literalinclude:: 01-raw-dgram-single-socket/send-dgram.py :caption: send, :download:`01-raw-dgram-single-socket/send-dgram.py` :language: python .. literalinclude:: 01-raw-dgram-single-socket/recv-dgram.py :caption: receive, :download:`01-raw-dgram-single-socket/recv-dgram.py` :language: python * v2: multiple receiving sockets .. literalinclude:: 02-raw-dgram-multiple-sockets-mt/send-dgram.py :caption: send, :download:`02-raw-dgram-multiple-sockets-mt/send-dgram.py` :language: python .. literalinclude:: 02-raw-dgram-multiple-sockets-mt/recv-dgram.py :caption: receive, :download:`02-raw-dgram-multiple-sockets-mt/recv-dgram.py` :language: python imagine other data sources ... * CAN socket jjj link * GPIO interrupt * any kind of events * event loop programming asyncio intro: add second incoming-socket -> second task -> strace -f * dbus server * method: get incoming (list, because multiple) -> setup graph * setup chart plot * animation? * hmm * Example from python-sdbus * Project * gpiod interrupt, and asyncio * dbus server emits sdbus signal * dbus client iterates over it in a task Links ----- * `Poettering: The new sd-bus API of systemd `__ * `man sd-bus `__