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.
54 lines
2.6 KiB
Markdown
54 lines
2.6 KiB
Markdown
# 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.
|