bluetoothd
Manages Bluetooth devices and connections
TLDR
Start the daemon
Start the daemon, logging to stdout
Start the daemon with a specific configuration file (defaults to /etc/bluetooth/main.conf)
Start the daemon with verbose output to stderr
Start the daemon with verbose output coming from specific files in the bluetoothd or plugins source
SYNOPSIS
bluetoothd [options]
PARAMETERS
-h, --help
Show help and exit
-i, --adapter=NAME
Select adapter name (repeatable)
-v, --version
Print version and exit
-C, --compat
Enable legacy compatibility mode
-d, --debug[=FILE]
Enable verbose debug logging (optional file)
-E, --experimental
Activate experimental features
-n, --nodetach
Run in foreground (no daemonize)
-u, --udev
Listen on udev control socket
-r, --release
Release D-Bus name on exit
DESCRIPTION
bluetoothd is the core Bluetooth daemon in the Linux BlueZ protocol stack, managing all Bluetooth operations on the system.
It handles adapter initialization, device scanning and discovery, pairing, bonding, connection setup, and profile services like A2DP for audio, HSP/HFP for headsets, HID for input devices, and GATT for BLE.
The daemon communicates via D-Bus (org.bluez interface), enabling tools and desktop environments (e.g., GNOME Settings, KDE Plasma) to control Bluetooth. It supports both Classic Bluetooth and Low Energy (LE) modes, with features like LE advertising, mesh networking, and experimental capabilities.
Configuration is via /etc/bluetooth/main.conf, with per-adapter settings in /var/lib/bluetooth/. Logs go to systemd journal or a debug file. Primarily managed as a systemd service (bluetooth.service), not for direct manual runs except debugging.
CAVEATS
Avoid manual execution; use systemctl for bluetooth.service. Multiple instances conflict on D-Bus/ports. Requires kernel Bluetooth modules (btusb, bluetooth). Debug mode increases log verbosity.
CONFIGURATION
Edit /etc/bluetooth/main.conf for globals (e.g., DiscoverableTimeout).
Adapter configs in /var/lib/bluetooth/<MAC>/main.conf.
D-BUS API
System bus service org.bluez at /org/bluez. Use dbus-send or libbluetooth for apps.
LOGGING
Debug with -d; view via journalctl -u bluetooth.
HISTORY
Introduced in BlueZ 3.x (~2004) by Marcel Holtmann's team. Evolved with BlueZ 5.x for modern BLE/GATT support; current in BlueZ 5.70+ with systemd integration since ~2010.
SEE ALSO
bluetoothctl(1), btmgmt(8), hciconfig(8), hcitool(8), systemctl(1)


