Files
mesh-catalog/modules/bluetooth
jochen 3b43a1ef4d bluetooth: the stack, its daemon, and the devices as tools (hq to-be 42 phase 2.9)
bluez and bluez-utils, and bluetooth.service running and enabled. On both
workstations bluez is installed only as a dependency; declaring it keeps a
clean-up from taking it.

Nine Go tools over bluetoothctl: controller, power, devices with battery
where reported, a bounded scan, connect, disconnect, trust, pair (an agent
that confirms nothing, for headphones) and remove. An act whose output says
it failed is an error whatever the exit status, and one bluez refuses the
account is repeated through sudo -n.
2026-10-04 13:02:23 +02:00
..

bluetooth

Bluetooth on the two workstations (novox/hq research 027/02, to-be 42 phase 2 step 9).

Owns

what where
the Bluetooth stack and its daemon package bluez
bluetoothctl, which the tools speak through package bluez-utils
the daemon, running and enabled bluetooth.service

All official. /etc/bluetooth/main.conf is the package's file, unchanged on both workstations (every setting commented out). The module states nothing in it, so it declares nothing there.

Improves

  • The stack is declared, not a dependency of something else. On both workstations bluez is installed only as a dependency. Removing the applet that pulled it in would have left it an orphan for the next clean-up to take, and Bluetooth with it.
  • An owner for the daemon, running and enabled on both today with nothing recording why.
  • Headphones from the mesh. bluetooth_connect and bluetooth_devices (with battery) answer from any machine, without the applet.

Tools

All answer JSON; (r) reads, (a) acts. They run as the operator account. bluez's bus policy lets the account act; if it ever refuses (AccessDenied), the act is repeated through sudo -n. An act whose output says it failed (Failed to …, org.bluez.Error…, not available) is an error, whatever bluetoothctl's exit status.

tool what
bluetooth_controller (r) address, name, powered, discoverable, pairable, discovering
bluetooth_power (r/a) read, or switch the controller on or off
bluetooth_devices (r) all, paired, connected or trusted devices: kind, paired, bonded, trusted, blocked, connected, battery where reported
bluetooth_scan (r) discover for 1 to 15 s (default 8); the unpaired devices found, strongest signal first
bluetooth_connect / bluetooth_disconnect (a) one device; connect waits up to 15 s
bluetooth_trust (a) trust, or untrust
bluetooth_pair (a) pair with an agent that confirms nothing (headphones, speakers), then trust. A device that shows a code is paired from the desktop
bluetooth_remove (a) forget a device

What changes when it is assigned

Nothing on disk on either workstation: both packages are installed, and the service is enabled and running. bluez becomes explicitly the mesh's.

Leaves as found

  • The paired devices and their keys under /var/lib/bluetooth (bluez's state).
  • blueman on both workstations, and its applet, which the window manager's configuration starts. That line is the i3 module's to keep or drop.
  • bluez-obex and the AUR terminal client bluetuith-bin (with its -debug) on the laptop.