Notes - 3. DBus

3. D-Bus?

D-Bus is IPC system for Linux, it provides structualized way for apps to communicate with each other.

Desktop Bus System.

System-bus and session-bus

System services <-> root application / system users.

  • Hardware events, system state managing, low-levels

User session <-> user applications and users.

  • Desktop Environment, Apps.

=> Event-driven communication / Object-oriented

Messaging. - calls / returns / error / signal

Object - interface -> method -> property -> signal

Method = (call, return, error, signal)

D-Bus router = message broker / router (just like other message forward/proxy protocols)

Method Calls -> request of service? RPC?

Signals. kernel signal in userspace. send signal to application.

Objects .. Message = Serialized bytearray of any signal / method calls. It is like RPC. Multi-multi RPC-bus

D-Bus Message structure.

Byteorder / Message Type / Flags / Protocol Version / Length / UUID / Header / Body.

How and where can I use D-Bus in my application?

Communication with low-level D-Bus daemon(server).

Ex. MediaPlayer - Implement Play/Pause/Stop/Volume for user to control via DE’s common interface i.e. play button on taskbar? Extensions? Anyway structulized way of control.

Ex. DE can get information about songs now playing, via D-Bus.

Ex. System monitoring application e.g. runCat.

Ex. Caffeine-ng -> prevents machine from sleeping.

Ex. Solaar -> Controls mouse/keyboard in low-level. Needs D-Bus.

How?

Define D-Bus interface via XML, signals. methods, props. (export to bus?) -> Implement by library -> Connect to D-Bus (sync with daemon?) -> Do something.

Session vs System D-Bus

Session ? e.g. Push notification to DE. we need to send it via d-bus.

System ? e.g. Power Event, kernel-level type of event managing.