Skip to main content
All clients go through dbus.Connection (vendored basu / sd-bus). Poll getFd(), then drain with while (conn.process()) {}.

Connection

var conn = try otter_desktop.dbus.Connection.open(allocator, .session);
defer conn.deinit();
const fd = conn.getFd();

Services

ClientBusRole
UPowersessionBattery state, on-battery detection
PowerProfilessystembalanced / performance profiles
MprissessionMedia metadata and transport control
NetworkManagersystemWiFi scan, connections, byte counters
ScxLoadersystemSCX scheduler switch (scx_flow for bar falcond widget)
ScreensaversessionInhibit screen blanking
SystemTray / StatusNotifierWatchersessionTray icons and menus
NotificationServicesessionorg.freedesktop.Notifications for otter-notifications
PolkitAgentsystemAuth agent registration
FprintdsystemFingerprint reader
LogindsystemSession seat hints
Each service exposes startMonitoring(), subscribe(), getFd(), and process() for the same poll-loop pattern.

Portals

portal_file_chooser and portal_screencast wrap XDG desktop portal APIs when D-Bus is enabled.

Disabled builds

With -Denable_dbus=false, types compile to void. Guard imports with desktop.has_dbus.