Bluetooth – Fix bluetoothctl Not Detecting Device but hcitool Can

16.04bluetoothsound

I have been trying to get my laptop pair with my wireless headphones, I enabled the drivers for my BCM chip as per the instructions here, https://askubuntu.com/a/632348/20245.

Now if do

~ $ hciconfig hci0: Type: BR/EDR Bus: USB
BD Address: 00:71:CC:9D:3F:8A ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:3677 acl:0 sco:0 events:203 errors:0
TX bytes:29291 acl:0 sco:0 commands:189 errors:0

I can see my device, I can scan with hcitool, however blueman-manager wasn't working, digging deeper I found that my device isn't detected in bluetoothctl.

 ~  $  bluetoothctl 
[bluetooth]# scan on
No default controller available
[bluetooth]# 

How do I make bluetoothhctl see what hcitool detects and interfaces with?

lsusb output

Bus 001 Device 002: ID 8087:8000 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 004: ID 105b:e065 Foxconn International, Inc. BCM43142A0 Bluetooth module
Bus 002 Device 003: ID 5986:055e Acer, Inc 
Bus 002 Device 002: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

rfkill shows something interesting though, it shows 2 wifi devices.

 ~  $  rfkill list
0: ideapad_wlan: Wireless LAN
        Soft blocked: no
        Hard blocked: no
1: ideapad_bluetooth: Bluetooth
        Soft blocked: no
        Hard blocked: no
2: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
3: brcmwl-0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
5: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

dmesg gives me

[  571.720739] Bluetooth: hci0: BCM: chip id 70
[  571.736769] Bluetooth: hci0: BCM43142A
[  571.736778] Bluetooth: hci0: BCM (001.001.011) build 0000
[  572.226888] Bluetooth: hci0: BCM (001.001.011) build 0215
[  572.242883] Bluetooth: hci0: Broadcom Bluetooth Device (43142)

Best Answer

Upgrade your Linux kernel to 5.1.6 or above.

The issue fixed in this release has to do with buggy Bluetooth controller firmware, that would send a completion event twice, making the kernel turn the scan into a passive scan, therefore not creating device found events.

Kernel -> controller: LE Set Random Address
Controller -> kernel: Command "LE Set Random Address" Complete
Kernel -> controller: LE Set Scan Parameters (active scan)
Controller -> kernel: Command "LE Set Random Address" Complete

The kernel would previously have assumed it could not set the scan to and active scan, so it resumes as a passive scan instead.

Relevant commit is: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=a3d50fb7ce931f08a2c6194fdc4c9a56c9ed4153

You can verify you have this issue by running btmon.

Related Question