Bluetooth Not Working
Linux Linux
Severity: MinorWhat Does This Error Mean?
Bluetooth problems on Linux usually fall into one of three categories: the Bluetooth service is not running, the required firmware file for your adapter is missing, or a kernel module has not loaded. Running a few quick commands in a terminal will tell you which situation you are in and point you to the right fix. Most Bluetooth issues on modern Linux distributions (Ubuntu, Fedora, Mint) are solvable without advanced knowledge.
Affected Models
- Ubuntu
- Debian
- Fedora
- Arch Linux
- Linux Mint
- openSUSE
- Pop!_OS
Common Causes
- The BlueZ Bluetooth service (bluetooth.service) is not running or has crashed
- Firmware files for the Bluetooth adapter are missing — especially common with Intel and Realtek adapters
- The btusb or btintel kernel module is not loaded
- Bluetooth was disabled via a hardware switch, function key, or rfkill software block
- A conflict between the Bluetooth and Wi-Fi adapter sharing the same chipset (common on laptops)
How to Fix It
-
Check if the Bluetooth service is running. In a terminal run: sudo systemctl status bluetooth — if it shows 'inactive (dead)' or 'failed', start it with: sudo systemctl start bluetooth — and enable it to start automatically: sudo systemctl enable bluetooth.
The systemctl status output also shows recent error messages from the Bluetooth service which can pinpoint the specific problem.
-
Check if Bluetooth is blocked by rfkill. Run: rfkill list — look for 'Bluetooth' in the output. If it says 'Soft blocked: yes', unblock it with: sudo rfkill unblock bluetooth. If it says 'Hard blocked: yes', a physical switch on the laptop is disabling it.
Many laptops have a function key combination (like Fn + F3 or Fn + F12) that toggles wireless hardware on and off. Check your laptop's keyboard for a wireless or Bluetooth symbol.
-
Check if the Bluetooth kernel module is loaded. Run: lsmod | grep bluetooth — and: lsmod | grep btusb. If there is no output, load the module manually: sudo modprobe btusb. After loading, restart the Bluetooth service.
If modprobe btusb returns an error saying the module cannot be found, your kernel may need an update to include the driver for your specific adapter.
-
Install missing firmware. Run: dmesg | grep -i bluetooth after plugging in a USB Bluetooth adapter or booting. Look for messages like 'firmware not found'. On Ubuntu/Debian, install: sudo apt install firmware-linux-nonfree linux-firmware. On Fedora: sudo dnf install linux-firmware.
Intel and Realtek Bluetooth adapters commonly require firmware files from the linux-firmware package. Without them, the adapter initializes but cannot communicate properly.
-
If pairing works but the device disconnects frequently, add PairableTimeout=0 and DiscoverableTimeout=0 to /etc/bluetooth/main.conf under the [Policy] section. Restart the Bluetooth service after saving the file.
The default discoverable and pairable timeouts can cause devices to appear to drop the connection. Setting them to 0 disables the timeout.
When to Call a Professional
Bluetooth on Linux rarely requires professional intervention. If your adapter does not appear even after loading the kernel module and the firmware is confirmed present, the hardware itself may have failed. External USB Bluetooth adapters are inexpensive ($10-20) and work well on Linux as a replacement.
Frequently Asked Questions
My Bluetooth adapter shows up in lsusb but bluetoothctl does not see it. Why?
This usually means the kernel module loaded but the firmware failed to initialize. Run: dmesg | grep -i bluetooth and look for firmware-related error messages. The adapter hardware is visible to USB (hence lsusb shows it) but the Bluetooth subsystem could not initialize it fully. Installing the correct firmware package (linux-firmware or a vendor-specific package) and reloading the module should fix this.
Can I pair a Bluetooth device from the command line?
Yes, using bluetoothctl. Run: bluetoothctl — then type: power on — then: scan on — wait for your device to appear, note its MAC address — then type: pair [MAC address] — then: connect [MAC address]. For headphones and audio devices, also run: trust [MAC address] so they reconnect automatically next time. Type exit to leave bluetoothctl.
Audio through Bluetooth headphones sounds terrible or stutters. How do I fix it?
Bluetooth audio quality on Linux depends on which audio codec is being used. Install and configure PipeWire (which has replaced PulseAudio in most modern distributions) for better Bluetooth audio codec support. On Ubuntu: sudo apt install pipewire pipewire-pulse — then reboot. PipeWire supports AAC, aptX, and LDAC codecs which provide much better audio quality than the default SBC codec. Also check if there is a conflict between your Wi-Fi and Bluetooth adapters — they share the 2.4 GHz band and can interfere with each other.