- Interprocess communication (IPC) system for apps.
- Runs as a service.
- Two buses:
- System bus: e.g. to notify about hardware connect/disconnect. Its service:
systemctl status dbus
. - Session bus: Specific to user sessions, e.g. communication between Gnome components. Its service:
systemctl --user status dbus
.
- System bus: e.g. to notify about hardware connect/disconnect. Its service:
dbus-run-session <cmd>
: Starts a new session bus and runcmd
in that session (to have access to the session dbus for IPC):- e.g
gnome-shell --nested
: Start Gnome within an existing session (for dev. & testing) without affecting the primary UI.
- e.g
Create a new extension: gnome-extension create --interactive
- Two mandatory files: metadata.json, and extension.js
- prefs.json: Preferences for extension.
- Uses GTK4 and Adwaita.
- Adwaita: Toolkit that offers widgets to build Gnome apps (extends GTK base widgets).
- Runs in a separate process from Gnome-shell.
- extension.js:
- Uses Clutter and St toolkits (latter builds on Clutter to provide more Widgets & CSS).
- GSettings: System for Gnome apps to manage their settings.
- dconf: underlying backend database for GSettings, with parameters stored in key-value format.
- Variant type (like C's
union
and C++'sstd::variant
) that may contain:- Simple types: int, bool.
- Complex types: array of dict.
- Usage: data to be serialized:
- Data sent over D-Bus.
- Saved settings with GSettings.