Both are official packages already on both workstations, started once by dex from an XDG autostart entry (the client's own, the package's). The modules declare the package, add no second start, own none of the apps' files, and give the mesh status, log, restart and check.
5.2 KiB
blueman
The Bluetooth tray applet on the workstations, as a module (novox/hq ADR 0208). It requires
x11-display, so it is assigned only where a display server is held on the same machine.
Owns
| what | where |
|---|---|
| the applet, the manager window, send-to | package blueman, from the official repositories |
Nothing else. It holds no seat, makes no contribution and writes no file.
- No AUR. Both workstations run the official package (
extra), installed explicitly. - The Bluetooth stack is not this module's.
bluez,bluez-utilsandbluetooth.servicebelong to thebluetoothmodule. This module declares none of them (ADR 0210 §4: one package, one module). The devices, pairing and power are that module's tools (bluetooth_*). This module's tools are about the applet. - The operator's applet settings are found. blueman keeps them in dconf (
org.blueman.*): the plugin switches, the recent connections, auto-connect and auto-power-on. The module neither sets nor resets them.blueman_statusshows the plugin switches.
How it starts: the package's autostart entry, and nothing else
One process has one starter (the rule picom states for the desktop modules). The package ships
/etc/xdg/autostart/blueman.desktop (blueman-applet). The session runs it once at login through
the i3 module's dex --autostart --environment i3. That entry is the applet's one start. The
module adds no xinitrc slot and no node-display-session exec, because either would start it a
second time.
- Excluded: the window manager's
exec … blueman-applet, which thei3module's configuration dropped. - Not a start: the package's user unit
blueman-applet.serviceis static. It exists for D-Bus activation oforg.blueman.Applet. A program that calls the applet's bus name while no applet runs starts one through it. The applet is single-instance on that name, so this never makes a second one. The tools always ask the bus with--auto-start=no, so asking never starts it. - The applet starts its tray icon,
blueman-tray, itself.
Tools
They are served by the node's runtime as the operator account (ADR 0175).
| tool | does |
|---|---|
blueman_status (r) |
|
blueman_restart (a) |
asks the applet and the tray icon to end (SIGTERM), forces them after 5 s, and starts blueman-applet in the operator's session. The start is a transient user unit mesh-blueman-applet, so it outlives the tools runtime. Answers the pids. Refused plainly when nobody is logged in to the desktop |
blueman_check (r) |
|
The tools find the session's DISPLAY and XAUTHORITY from the window manager's own environment,
as clipmenu and screen-lock do. Every command has a timeout and capped output. Everything runs
through an injected runner and a fake root in the tests.
What changes when it is assigned
| g14 | shanks | |
|---|---|---|
| package | none: blueman 2.4.6 is installed, explicitly, from extra |
the same |
| start | none: dex starts the applet from the package's entry, in the login session's scope; the tray icon with it | none on disk. The applet running now came from the predecessor's window-manager line (a child of i3, since the session of 2026-10-04 16:00). That session began before the i3 module dropped the line and installed dex, so the next login is the first that starts it from the entry |
| settings (dconf) | defaults, no plugin switched; recent connections only | no plugin switched; auto-connect for one headset, auto-power-on set |
The workstations are already in the state this module describes.
Migration (ADR 0182)
Nothing is required on either machine. On shanks, log out and in once, or run blueman_restart, and
the applet runs from its one start. blueman_check then answers ok.
Leaves as found
- The applet's dconf settings (
/org/blueman/). /etc/xdg/autostart/blueman.desktop, the package's own file.
Relies on
- The
bluetoothmodule, for bluez and its daemon. Without them the applet has nothing to manage. There is no dependency mechanism between two modules that hold no seat. So nothing refusesbluemanon a node withoutbluetooth.blueman_checkreports it instead, frombluetooth.service. Assign both. When the stack becomes a seat (node-bluetooth), this module depends on the seat. i3'sdexline for the start, which is equally undeclared: XDG autostart has no seat. Assigned withouti3, the applet is installed and does not start.blueman_checksays so.- A display server on the same machine (
x11-display, ADR 0208 §3).