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.