Bluetooth can stop working on Linux in a way that feels confusing. Your adapter worked yesterday, your headphones are charged, but when you open bluetoothctl and type power on, you see the message “operation failed: no default controller available”. That message does not mean your headphones are broken. It means the Bluetooth service cannot see any working Bluetooth controller on your system right now.
The good news is that this error is usually fixable in a few minutes. The cause is almost always simple: the service is not running, the adapter is blocked, or the firmware did not load. This guide walks through the checks in order.
Quick Answer
Start the Bluetooth service with sudo systemctl start bluetooth, remove any software block with sudo rfkill unblock bluetooth, and then restart the service. If bluetoothctl list still shows no controller, check that your adapter is detected with lsusb or lspci, reload its firmware or driver, and make sure Bluetooth is enabled in your BIOS or UEFI settings. In most cases, the service or an rfkill block is the whole problem.
What This Error Actually Means
The tool bluetoothctl is only a front end. It talks to a background service called bluetoothd, which is part of the BlueZ stack. BlueZ is the official Bluetooth software for Linux. When the service starts, it looks for Bluetooth hardware, loads the right driver, and registers the adapter as a controller.
If that registration never happens, commands like power on and scan on have nothing to act on, so they fail. Your job is to find out why the controller never appeared.
Common Causes Behind the Missing Controller
- The
bluetoothservice is stopped, disabled, or crashed. - The adapter is blocked by
rfkill, a laptop function key, or an airplane mode switch. - The kernel sees the USB or PCI device, but the firmware file is missing.
- The driver module failed to load after a kernel update or a suspend cycle.
- Bluetooth is disabled in BIOS or UEFI, or the adapter is a cheap USB dongle that needs a different driver.
Work through the steps in order, and test after each one.
Step 1: Check and Restart the Bluetooth Service
This is the most common fix, so start here.
- Open a terminal.
- Check the service status with
systemctl status bluetooth. - If it is inactive or failed, start it with
sudo systemctl start bluetooth. - Enable it at boot with
sudo systemctl enable bluetoothso the problem does not return after a restart. - Open
bluetoothctl, then runlistandshowto see if a controller now appears. - If a controller is listed, run
power onand thenscan onto test pairing.
If the service fails to start, read its recent log. Run journalctl -u bluetooth -b and look near the end for errors about firmware, timeouts, or missing files. The log often names the exact problem, which makes the later steps much faster.
Step 2: Remove rfkill Blocks and Hardware Switches
Linux has a kill switch system for wireless devices called rfkill. A soft block is set in software. A hard block comes from a physical switch or a keyboard shortcut, and software alone cannot clear a hard block.
- Run
rfkill listand look at the Bluetooth entry. - If it says soft blocked: yes, clear it with
sudo rfkill unblock bluetoothorsudo rfkill unblock all. - If it says hard blocked: yes, press your laptop’s wireless key, often
Fnplus a function key with an antenna or Bluetooth icon, or check for a small switch on the side of the machine. - Turn off airplane mode in your desktop settings if it is on.
- Restart the service with
sudo systemctl restart bluetoothand testbluetoothctl listagain.
Step 3: Confirm the System Can See Your Adapter
If the service is running and nothing is blocked, confirm the hardware itself is visible to the kernel.
- For a USB adapter or dongle, run
lsusband look for a Bluetooth or wireless device line. - For a built-in PCI card, run
lspci | grep -i -E "bluetooth|wireless|network". - Run
dmesg | grep -i bluetoothto see what the kernel reported at boot. - Run
hciconfig -aif the tool is installed. An empty result supports the idea that no controller was registered.
If neither command shows the device, try a different USB port, reinsert the dongle, shut down fully, and check BIOS settings. If the device appears but not in bluetoothctl, the problem is likely firmware or the driver, covered next.
For help reading hardware information in the terminal, our guide on checking hardware information in Linux with terminal commands explains the main tools in plain language.
Step 4: Fix Missing Firmware and Reload the Driver
Many modern wireless cards combine Wi-Fi and Bluetooth on one chip from Intel, Broadcom, Realtek, or Qualcomm. Those chips often need a firmware file that is loaded fresh at every boot. If the file is missing or damaged, the kernel sees the chip but cannot bring the Bluetooth part to life.
Check for Firmware Errors
- Run
dmesg | grep -i -E "firmware|bluetooth"and look for lines like “failed to load” or “firmware load failed”. - Note the exact file name in the error if one is shown.
- On Ubuntu and Debian, install or reinstall the firmware package with
sudo apt updateandsudo apt install --reinstall linux-firmware. - On Fedora, use
sudo dnf reinstall linux-firmware. - Reboot fully and test again.
Reload the Bluetooth Modules
Sometimes the driver loads badly after suspend or a kernel update. Stop the service with sudo systemctl stop bluetooth, reload the module with sudo modprobe -r btusb followed by sudo modprobe btusb, then start the service again and test.
The official BlueZ project website and documentation describes how the stack is organised, which helps when log messages mention specific BlueZ components.
Step 5: Try a Full Power Reset and Check Dual Boot
Bluetooth adapters can get stuck in a low-power state that a normal reboot does not clear. A full shutdown often works when a restart does not.
- Shut the computer down completely.
- Unplug the power cable. On a laptop, remove the battery if it is removable.
- Wait about thirty seconds and press the power button once to drain leftover power.
- Reconnect power, boot into Linux, and test
bluetoothctl. - If you dual boot with Windows, boot Windows once, turn Bluetooth on there, shut Windows down fully with Fast Startup disabled, and then boot Linux again.
Step 6: Check BIOS Settings and Test Another Adapter
If nothing above worked, check the firmware settings of the machine itself. Enter BIOS or UEFI setup during boot, look under advanced, devices, or wireless sections, and confirm Bluetooth or the wireless module is enabled. Save and exit if you changed anything.
Next, test with a known good USB dongle if you can borrow one. If it works, your built-in adapter may have failed. If it does not, reinstalling BlueZ is a reasonable last software step before suspecting hardware failure.
Common Mistakes and Useful Tips
- Reinstalling everything at once: Change one thing at a time and test. If you change five things, you will never know which one fixed it, and you cannot undo the wrong one.
- Ignoring dmesg: The kernel log usually tells the truth. A firmware line there is more valuable than an hour of guessing.
- Forgetting suspend: If Bluetooth breaks only after sleep, test a fresh boot. A suspend-only failure points to power management, not to pairing.
- Tip: After a kernel update, reboot before troubleshooting. Old running kernels and new on-disk modules are a frequent mismatch.
The Arch Wiki Bluetooth troubleshooting guide is detailed and applies to many distributions, not only Arch, especially its sections on firmware and rfkill.
Conclusion
The “no default controller available” error means BlueZ found no working Bluetooth adapter to offer you. Work in order: start the service, clear rfkill blocks, confirm the kernel can see the device, fix firmware and reload the driver, try a full power cut, and only then suspect BIOS settings or failed hardware. Most users solve it in the first two steps. Once bluetoothctl list shows your controller and power on succeeds, pairing works just as it did before.
Frequently Asked Questions
Why does bluetoothctl open but show no controller?
The program itself is fine, but the background service has no registered adapter to show it. Fix the service, the block, the firmware, or the hardware detection, not the tool itself.
Does this error mean my Bluetooth adapter is dead?
Usually not. A dead adapter is possible, but stopped services and rfkill blocks are far more common. Only suspect hardware failure after a cold shutdown, a BIOS check, and a test with a different known good dongle have all failed.
Why does Bluetooth break after my laptop sleeps?
Some adapters do not wake cleanly because of power management. Restarting the bluetooth service after wake is a quick workaround. A kernel or firmware update often fixes the root cause, so keep your system updated if this happens often.
Can a Windows dual boot cause this problem?
Yes. Windows Fast Startup can leave the adapter in a state Linux dislikes. Disabling Fast Startup and doing a full shutdown before booting Linux clears many dual-boot cases.
What command tells me the most in one go?
Run dmesg | grep -i bluetooth for kernel messages and journalctl -u bluetooth -b for service messages. Together they usually show whether the device was found and why the service gave up.


Leave a Reply