Fix โ€œNo default controller availableโ€ on Kali (BlueZ): btusb, rfkill, systemd, and USB dongle checks

Kali no default controller fix

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.
Fast Answer (snippet-ready):

โ€œ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.


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.

Takeaway: Treat this as a 3-state problemโ€”blocked, missing, or ignoredโ€”then youโ€™ll only run fixes that can actually work.
  • 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.

Kali no default controller fix

The 3 states: Blocked vs Not detected vs Detected but unmanaged

  • Blocked: rfkill shows Bluetooth blocked (soft or hard). HCI may or may not appear.
  • Not detected: btmgmt info and hciconfig show nothing; logs show USB attach/detach or nothing at all.
  • Detected but unmanaged: an HCI exists, but bluetoothctl show canโ€™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.
Takeaway: If Bluetooth is hard-blocked, every other step is noise.
  • 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โ€).

Kali no default controller 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 info shows no controllers.
  • hciconfig outputs nothing.
  • bluetoothctl canโ€™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.

Takeaway: Your logs are the shortest path to the correct fixโ€”firmware, power, or hardware.
  • -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.

Takeaway: Decide quickly whether youโ€™re debugging software or validating hardware.
  • 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).

Takeaway: Fixing this is mostly about sequencing, not brilliance.
  • 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.

Mini Calculator (no storage):

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.

Infographic: The controller-first fix flow (read left to right)
1) rfkill
Blocked? Unblock or fix hard block.
2) HCI proof
No HCI? Switch ports/hardware/VM passthrough.
3) Logs
Firmware? Install correct firmware. Timeouts? Fix power/USB.
4) Module reload
Reload btusb and re-test.

Goal: Get a stable controller in bluetoothctl show before you chase pairing.


Kali no default controller fix

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.)

Takeaway: The quickest fixes happen when you gather the right proof outputs.
  • 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