
Stop Guessing: Fix “No Default Controller Available” on Kali
The fastest way to waste an hour on Kali Bluetooth is to keep restarting services that have nothing to manage. When bluetoothctl reports “No default controller available,” it isn’t a BlueZ tantrumโitโs your system quietly telling you the controller never showed up.
Whether blocked by rfkill, failing USB/VM passthrough, or missing firmware, the pain is specific: dead air with no hci0. Keep guessing and you break packages. This guide gets you back to a real controller with a proof-first method: check the kernel, read the right logs, and reset only what matters.
- Spot “blocked vs. missing vs. ignored” in under 60 seconds.
- Pull exact log signatures (firmware, timeouts, USB flaps).
- Fix VM ownership and dongle stability before touching configs.
โNo default controller availableโ means BlueZ canโt see a usable Bluetooth HCI controller. The usual causes are: Bluetooth is blocked (rfkill), the internal/USB adapter isnโt enumerating, firmware/driver (btusb) didnโt load, or bluetoothd is running but has nothing to manage. Start with rfkill list, prove an HCI exists (btmgmt info or hciconfig -a), then read dmesg / journalctl -u bluetooth for firmware or USB errors. If needed, reload modules with modprobe.
Table of Contents
Start here: is the controller missing, blocked, or ignored?
Before you โfix Bluetooth,โ do one thing: classify the failure. This error is a signpost, not a diagnosis. Your goal is to answer a single question: Does the kernel see a Bluetooth HCI device right now?
I learned this the hard way on a travel day: airport Wi-Fi, a USB hub, a cheap dongle, and 20 minutes of โservice restartingโ that did absolutely nothing. The moment I checked for an HCI device, the truth was immediate: there was nothing there to manage.
- Blocked: hardware exists, but radio is disabled (rfkill / BIOS / airplane mode)
- Missing: no HCI device enumerated (USB passthrough, dead adapter, power, hub, counterfeit dongle)
- Ignored: HCI exists, but BlueZ isnโt managing it (service/permissions/firmware/driver state)
Apply in 60 seconds: Run the proof trio below and pick the branch.

The 3 states: Blocked vs Not detected vs Detected but unmanaged
- Blocked:
rfkillshows Bluetooth blocked (soft or hard). HCI may or may not appear. - Not detected:
btmgmt infoandhciconfigshow nothing; logs show USB attach/detach or nothing at all. - Detected but unmanaged: an HCI exists, but
bluetoothctl showcanโt select a default controller (or shows โnot poweredโ).
Proof command trio: rfkill + HCI tools + bluetoothctl
Copy/paste these in order:
rfkill list btmgmt info || true bluetoothctl show
Quick truth: if thereโs no HCI, BlueZ canโt โrestartโ its way into one
This is the moment where people burn an hour. If the kernel canโt see an HCI device, BlueZ is basically a manager showing up to an empty office.
rfkill first: the invisible โno controllerโ mask
The Linux kernel includes rfkill, a subsystem designed to disable radio transmitters (Wi-Fi, Bluetooth, WWAN). Thatโs good. But itโs also why this error can look like a driver failure when itโs really a radio block.
My most embarrassing version of this was on a Dell laptop: I โfixedโ Bluetooth three timesโthen realized Iโd bumped a hardware toggle while moving the machine. The logs were fine. BlueZ was fine. The radio was simply not allowed to transmit.
Soft vs hard block (and why hard blocks waste hours)
- Soft blocked: the OS can toggle it. Usually solvable from the terminal.
- Hard blocked: a physical switch, BIOS setting, or firmware airplane mode. Terminal commands wonโt override reality.
- Is Bluetooth listed in
rfkill list? - Is it Soft blocked: yes?
- Is it Hard blocked: yes?
Apply in 60 seconds: If hard-blocked, check BIOS/UEFI and any laptop radio keys before touching drivers.
The unblock sequence that you verify, not just run
rfkill list sudo rfkill unblock bluetooth rfkill list
Donโt โtrustโ the unblockโverify it. The second rfkill list is your proof.
Laptop toggles/BIOS/airplane-mode gotchas (common US hardware patterns)
- Airplane mode toggles can hard-block radios on some laptops.
- BIOS/UEFI wireless settings sometimes let you disable Bluetooth separately from Wi-Fiโespecially on systems where youโve already wrestled with boot settings during a Kali dual-boot GRUB fix.
- Fn keys can flip states without you noticing (especially when youโre tired and chasing โjust one more fixโ).

HCI reality check: prove the kernel sees Bluetooth hardware
This is the section that separates โBluetooth troubleshootingโ from hardware reality. Youโre looking for a Bluetooth controller interfaceโtypically hci0. If you donโt have one, your next steps are about enumeration, not pairing.
In my own notes, I call this the โdonโt negotiate with the voidโ check. Because thatโs what it feels like: trying to convince BlueZ to manage a controller that doesnโt exist.
What โgoodโ looks like in btmgmt / hciconfig
Try:
btmgmt info hciconfig -a
Good typically means you see an index (like hci0) and some basic capabilities. Even if itโs โpowered: no,โ the controller is at least present.
What โbadโ looks like: empty indexes, invalid index, nothing enumerated
btmgmt infoshows no controllers.hciconfigoutputs nothing.bluetoothctlcanโt show a default controller because there isnโt one.
Open loop: why you can see some Bluetooth logs even when thereโs no controller
Because the software stack still starts. bluetoothd can run, systemd can report โactive,โ and D-Bus can happily offer an APIโwhile the kernel has no HCI device to expose. That mismatch is exactly what this error is telling you.
Show me the nerdy details
BlueZ is the user-space Bluetooth protocol stack, and it interacts with the kernelโs Bluetooth subsystem. If no controller is enumerated at the kernel level, user-space canโt create a โdefault controller.โ Thatโs why controller presence checks are so high-signal: they tell you whether youโre fixing user-space behavior or hardware detection.
systemd + bluetoothd: when โactive (running)โ lies
If youโre on Kali, youโre almost certainly on a systemd-based setup. That means the Bluetooth daemon can be โrunningโ while still being effectively useless. Not because systemd is badโbecause it reports service state, not adapter availability.
Iโve watched this play out on a VMware lab: the service was green, the commands worked, and yet the controller never appeared. The issue was USB passthrough. The โactiveโ status was basically a polite shrugโvery similar to the kind of โeverything looks fineโ confusion you get after certain updates in a Kali VirtualBox setup that breaks after an update.
Confirm bluetooth.service status (then immediately pivot to evidence)
systemctl status bluetooth --no-pager
Look for obvious failures, but donโt stop here. A healthy service doesnโt guarantee a controller.
Read the right logs: journalctl -u bluetooth -b
journalctl -u bluetooth -b --no-pager
Youโre scanning for lines that mention firmware load failures, adapter bring-up failures, timeouts, or repeated USB resets.
Hereโs what no one tells youโฆ โRunningโ can still mean โnothing to manageโ
If your HCI check shows nothing, logs become your truth serum. The service can be stable and still โmanageโ zero adapters.
D-Bus and stale state: why restarting helps once (then the error returns)
If a restart temporarily makes the controller appear, youโre likely dealing with state or power issues: autosuspend, hub instability, or a driver that gets wedged after sleep. Thatโs a clueโnot a victory lap.
btusb + module reload: the safest โreset buttonโ
Most USB Bluetooth adapters use the btusb kernel module (with helpers like btintel, btrtl, or vendor-specific modules). If your system is in the โignoredโ stateโHCI kind of exists, but behavior is weirdโthen a module reload is often a clean, reversible move.
Personal rule: I reload modules before I reinstall packages. Itโs like resetting a stuck door latch instead of rebuilding the whole houseโand it fits the same โdo the boring proof firstโ mindset behind building a dependable toolkit of essential Kali tools.
Confirm modules: what youโre looking for
lsmod | grep -E 'btusb|bluetooth|btintel|btrtl|btbcm'
You donโt need every vendor moduleโjust enough to confirm the stack is present and your adapterโs driver is loaded.
The unload/reload sequence (safe, reversible)
sudo systemctl stop bluetooth sudo modprobe -r btusb sudo modprobe btusb sudo systemctl start bluetooth bluetoothctl show
Success criteria: after this, bluetoothctl show should display controller details rather than the โno default controllerโ error.
When reload works: what it implies about suspend/resume or driver state
- If it works after reload but breaks later: suspect autosuspend, hubs, or VM USB glitches.
- If it never works: suspect missing firmware, blocked radios, or hardware enumeration issues.
Firmware signatures: decode โ-2โ, โ-110โ, and opcode failures
This is where the logs stop being โnoiseโ and start being instructions. When Bluetooth fails to initialize, the kernel often tells you exactly what went wrongโjust not in a friendly way.
I once spent 45 minutes blaming BlueZ for what turned out to be a missing firmware blob after a clean reinstall. The log line was there the whole time. I just wasnโt reading it like a clueโespecially common when you rebuilt your system from a stick and had to think about things like Kali persistent USB + Secure Boot before you even got to โBluetooth.โ
โFailed to load firmware file (-2)โ: missing blob / wrong path
In Linux error codes, -2 often corresponds to โfile not found.โ If the kernel is trying to load firmware and canโt, youโll see this kind of message in dmesg or the journal. The fix is usually: install the right firmware package for your chipset, then reboot (or replug/reload).
Timeout / transport failures (often seen as -110): power, suspend, or USB instability
Timeout-style failures often point to transport problems: flaky hubs, poor power, aggressive autosuspend, or a controller thatโs crashing during init. If youโre using a tiny dongle on a front USB port through a hub, this is where the story gets suspicious.
Open loop: the log pattern that suggests a clone/counterfeit dongle
Some ultra-cheap dongles identify as something common, but behave inconsistently under Linux. Youโll see repeated attach/detach cycles, odd vendor IDs, or initialization sequences that fail in the same spot every time. The โfixโ can be replacing the dongle with one that has predictable Linux supportโbecause you canโt patch honesty into a counterfeit chipset.
- -2 / firmware missing: install correct firmware, then re-test
- timeouts: change ports/hubs, reduce autosuspend, stabilize power
- repeat init failures: consider replacing the adapter
Apply in 60 seconds: Run dmesg | tail -n 80 right after a replug or module reload.
USB dongle checks: prove itโs real hardware, not marketing
USB dongles are supposed to be the easy fix. Sometimes they are. Sometimes theyโre the reason youโre here.
I keep two dongles in my kit: one โknown goodโ and one โmystery.โ The mystery one is for learning. The known good one is for getting work done when Iโm on a deadline. If youโre time-poor, you want to become the kind of person who owns one โboring and reliableโ dongleโthe same way a well-built Kali lab infrastructure saves you from chasing phantom issues.
lsusb + topology: hubs, front ports, and power dips
lsusb lsusb -t
- If the dongle doesnโt appear at all: switch ports, remove hubs, try another machine.
- If it appears and disappears: suspect power, hub instability, or a failing adapter.
USB 2.0 vs 3.x quirks (yes, this can matter)
USB 3.x environments can introduce interference and stability issues for some tiny radio devices. If youโre troubleshooting, itโs worth testing a plain USB 2.0 portโor at least removing the dongle from a noisy hub chain.
- When to debug software: dongle enumerates consistently, HCI appears, logs show firmware or service issues
- When to swap hardware: dongle flaps, no HCI ever appears, repeated init failures on multiple ports
- Time trade-off: 10 minutes of proof commands vs 2 hours of random fixes
Apply in 60 seconds: Try a different port with no hub, then re-run the proof trio.
โCSR / Bluetooth 5.xโ listings: what they do not guarantee on Linux
Marketing labels arenโt driver support. Two products can claim the same Bluetooth version and behave very differently. What matters is chipset support in the Linux kernel plus stable firmware behavior.
Open loop: why two โidenticalโ dongles behave differently
Because โidenticalโ on a product page isnโt identical in silicon. Revision changes happen. Counterfeits happen. If you want reliability, you test and you keep a known-good spare.
VM branch: when the controller is trapped on the host
If youโre running Kali inside VirtualBox, VMware, or UTM, you have a special kind of trap: your Bluetooth controller may be perfectly healthyโฆ on the host. The guest never truly owns it, so BlueZ never sees it. If youโre still deciding your platform, start with a clean comparison of VirtualBox vs VMware vs Proxmox for VM-based pentesting so you know what trade-offs youโre inheriting.
Iโve watched people debug inside the guest for days while the dongle was quietly claimed by macOS or Windows. The fix was not โreinstall BlueZ.โ The fix was โpass the USB device through correctly.โ
USB passthrough sanity: does the guest own the device?
- Confirm the device is attached to the VM, not the host.
- Unplug/replug after the VM is running (some hypervisors bind devices at boot only).
- If you canโt pass through Bluetooth reliably: consider using a dedicated USB dongle for the VM.
Host Bluetooth conflicts: when the host grabs the controller first
Your host OS may automatically connect to the dongle or internal controller. That means the guest sees nothing. If you want Bluetooth in the guest, you need a controller the host isnโt actively using.
Snapshot/suspend weirdness: the โreplug is the fixโ reality
VM suspend/resume can wedge USB devices. If your controller disappears after sleep, treat โreplug and reattachโ as a real diagnostic step, not a superstition.
Short Story: A few months ago, I was building a small lab demo on a tight scheduleโone of those โit has to work in 30 minutesโ situations. My Kali VM kept throwing โNo default controller available,โ and I did what everyone does: restarted the service, rebooted the guest, reinstalled packages. Nothing. Then I noticed the host OS had quietly adopted the dongle like a stray catโpairing requests, background scans, the whole vibe.
I detached the device from the host, passed it cleanly to the VM, and the controller appeared instantly. The lesson was painfully simple: sometimes youโre not fixing Bluetooth. Youโre negotiating device ownership.
If youโre on VMware specifically, it helps to understand the practical differences between VMware Player vs Workstation vs Fusion, because device handling quirks often track with โwhich VMwareโ youโre actually using. And if youโre mixing environments, a WSL2 + Kali + VMware hybrid setup can add another layer of โwho owns the device?โ confusion thatโs worth recognizing early.
If youโre building a more permanent lab and want fewer surprises, consider moving heavy workflows to a dedicated host like a Proxmox pentest lab where hardware ownership is simpler and more consistent.
Common mistakes that make this error permanent
This is where I save you the most time. Most โBluetooth fixโ guides fail because they encourage maximum activity with minimum evidence. Here are the mistakes that turn a 10-minute diagnosis into an all-day saga.
Mistake #1: restart-looping services while the kernel sees no HCI
If btmgmt and hciconfig show nothing, restarting BlueZ is theater. Stop and fix enumeration or passthrough.
Mistake #2: installing random Bluetooth GUIs before reading logs
GUIs donโt create controllers. They only add layers. Use them after youโve proven the adapter exists.
Mistake #3: debugging pairing before you have a controller
Pairing issues happen later. Your current job is to get one working controller showing up in the system.
Mistake #4: assuming โworks on Windowsโ means โsupported on Linuxโ
Windows can hide a lot with vendor drivers. Linux is honest. Thatโs a featureโespecially in a lab environment.
Mistake #5: ignoring firmware errors in dmesg
Firmware errors are not โwarnings.โ Theyโre often the entire cause. Read them like a detective, not like background music.
Recovery playbook: smallest-change path to โController shows upโ
This is the part you can follow like a recipe. The goal is to change one variable at a time, with clear stop points. Thatโs how you avoid breaking things while โfixingโ them.
My own ritual: I keep a terminal tab called โproofโ and I rerun the same three commands after every change. Itโs boring. Itโs also the reason I finish fasterโespecially if your shell is tuned for speed (for example, with a Zsh setup for pentesters that makes repeatable checks feel frictionless).
- Step 1โ2: find blocks and hardware presence
- Step 3โ5: confirm logs, then reload the least risky components
- Step 6โ7: decide whether to keep debugging or swap hardware
Apply in 60 seconds: Use the mini time estimator below and commit to a stop point.
Estimate how long you should keep debugging before switching strategy.
- Input 1: Do you see an HCI device? (Yes/No)
- Input 2: Is Bluetooth hard-blocked? (Yes/No)
- Input 3: Does the dongle enumerate consistently in
lsusb? (Yes/No)
Output: If HCI=No AND enumerate=No โ spend 10 minutes max, then change ports/hardware/VM passthrough. If HCI=Yes and blocks=No โ spend 20 minutes on logs + module reload + firmware steps.
Stop Point A: controller appears in bluetoothctl show
bluetoothctl show
If you see controller details, youโre out of the โno controllerโ wilderness. Now you can move to power state, scanning, pairing.
Stop Point B: controller powers on in btmgmt
btmgmt info
If itโs present but not powered, you may need to power it on (or resolve blocks) before it becomes usable.
Stop Point C: scanning works and stays stable
Stability matters. A controller that appears for 30 seconds and then vanishes is telling you about power, autosuspend, or VM USB handling.
btusb and re-test.Goal: Get a stable controller in bluetoothctl show before you chase pairing.

FAQ
What does โNo default controller availableโ mean in bluetoothctl?
It means BlueZ canโt find a usable Bluetooth controller (an HCI device) to manage. Either the controller is blocked, missing, or present but not being managed correctly.
Why is bluetooth.service running but thereโs still no controller?
bluetooth.service being โactiveโ only means the daemon is running. It doesnโt guarantee your system has an enumerated controller. Verify HCI presence with btmgmt info or hciconfig -a.
Whatโs the fastest order of operations to fix this?
Do it in this order: rfkill (block state) โ HCI proof (controller exists) โ logs (firmware/USB clues) โ module reload (btusb reset) โ re-test in bluetoothctl.
My USB dongle shows up in lsusb. Why is there still no controller?
Enumeration in lsusb only proves the USB device is detectedโnot that the Bluetooth controller successfully initialized. Check logs for firmware failures or timeouts, and confirm an HCI appears in btmgmt / hciconfig.
Do I need a USB Bluetooth dongle for Kali in a VM?
Often, yes. Many VM setups canโt reliably pass through an internal Bluetooth controller. A dedicated USB dongle passed directly to the VM is usually the cleanest path.
What logs should I collect before asking for help?
Collect: rfkill list, btmgmt info (or hciconfig -a), and journalctl -u bluetooth -b --no-pager. Those three outputs typically reveal whether the issue is block state, enumeration, firmware, or service behavior.
Next step: run the controller-first checklist (copy/paste)
This is your โ15-minute, no-dramaโ next step. Run it once, top to bottom, and stop when you hit the branch that matches your output.
I keep this exact block in a notes file because it saves me from myselfโespecially when Iโm tired and tempted to do the loud, complicated thing instead of the correct, boring thing. (If you like this kind of repeatable โone routine, many fixesโ approach, it pairs well with a fast enumeration routine for any VMโsame philosophy, different subsystem.)
- rfkill state (soft/hard blocks)
- HCI presence (btmgmt / hciconfig)
- Bluetooth service logs (journalctl)
Apply in 60 seconds: Copy the checklist below, run it, and save the outputs in one paste.
# 1) Block state rfkill list # 2) HCI proof btmgmt info || true hciconfig -a || true # 3) Service + logs systemctl status bluetooth --no-pager journalctl -u bluetooth -b --no-pager | tail -n 120 # 4) Optional: safe reset sudo systemctl stop bluetooth sudo modprobe -r btusb sudo modprobe btusb sudo systemctl start bluetooth # 5) Re-test bluetoothctl show
If you want a clean โask for helpโ post, include exactly those outputs plus one sentence: โInternal adapter or USB dongle?โ That single detail changes the entire diagnosis path.
Conclusion: make the controller real first, then make it work
Letโs close the loop from the beginning: this error isnโt a mystery message. Itโs BlueZ telling you, plainly, that it canโt see a controller to manage. When you treat it as a controller-detection problemโblocked vs missing vs ignoredโyou stop wasting time on fixes that canโt possibly help.
Give yourself 15 minutes today: run the controller-first checklist, pick the correct branch, and commit to a stop point. If the hardware isnโt real or stable, replacing a $10โ$20 dongle can be the most โprofessionalโ move you make all week. Boring, reliable, done. And once your box is stable again, itโs a good moment to tighten the basicsโespecially if this is a machine you use outside the labโlike Kali SSH hardening so your โworking systemโ doesnโt become a soft target.
Last reviewed: 2025-12-26