[systemd-devel] Systemd --user and the role of DBUS API

Ian Geiser igeiser at devonit.com
Wed Aug 19 06:47:35 PDT 2015


On Wed, Aug 19, 2015 at 2:55 PM, Ian Geiser <igeiser at devonit.com<mailto:igeiser at devonit.com>> wrote:
> Greetings, I am struggling with search queries here so I need to ask this outright.  "what is the role of dbus going forward?"  Is dbus the preferred way going forward?  Or should things really be using sd-bus.h instead?

D-Bus is not going away, only its internals are being replaced. Existing clients will continue working.

kdbus replaces the "dbus-daemon" router and the Unix socket transport with a direct kernel API, but all existing programs can still connect to it via systemd-bus-proxy (at least until they get native kdbus support).

sd-bus.h is only a library for writing DBus clients & servers. Here the choice is still up to you – sd-bus has better performance and native kdbus support (and a better API than e.g. dbus-glib), but if you're writing programs in GTK or Qt or EFL, then you'll still want GDBus or QtDBus or Eldbus.

[igeiser] Awesome, thanks for the clarification

(I've heard GDBus already has native kdbus support in development, too.)

> I manage an embedded product that leverages system heavily at the system level, but I want to expand this into the user session. The main focus is to use "scopes" for classification and control of specific application's process groups.  The rub here is that while system-run can do this if I try to do this via dbus the org.freedesktop.systemd1 is missing from the user session no matter what or where I set my DBUS_SESSION_BUS_ADDRESS.  I am using systemd  224.

Right, systemd will not be accessible on a session bus, since it runs outside the session.

So instead you'll find it on the user bus, which is available by default on kdbus systems, but can be configured with dbus-daemon as well. The current devel branch (1.9.20) of dbus-daemon installs the --user units dbus.socket and dbus.service necessary for this. The user bus address is "kernel:path=/dev/kdbus/$UID-user/bus;unix:runtime=yes" (if I got the syntax right?), or "kernel:path=/dev/kdbus/$UID-user/bus;unix:path=/run/user/$UID/bus".
[igeiser] Can I access it using the path directly in 1.8.x using ”unix:path=/run/user/$UID/system/private”? Or is that what the 1.9.20 allows to happen?
(Technically the same can be done with dbus 1.8.x as well, but AFAIK the developers do not approve.)

[igeiser] Is this the method various “user units” howtos add a dbus.socket and dbus.service into the user directory?  I will research the dbus repo for their details.  This is happy lab fun time so I am play with hacks if they don’t lead me away from the official solution.

--
Mantas Mikulėnas <grawity at gmail.com<mailto:grawity at gmail.com>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20150819/823822aa/attachment.html>


More information about the systemd-devel mailing list