Top 10 Commands to Troubleshoot Bluetooth USB Adapter on Linux

There are few ways to find if your Bluetooth adapter is installed or not detected by the system. This was tested on Ubuntu Linux 22 and I use an unbranded Cambridge Silicon Radio Bluetooth clone USB adapter

  1. Use “dmesg” command to display kernel-related messages like hardware and device driver initialization that takes places during the system startup. By inspecting these messages, you can have an idea if your hardware was booted or detected successfully.

sudo dmesg | grep Bluetooth

hendrix@purplehaze:~$ sudo dmesg | grep Bluetooth
[sudo] password for hendrix:
[ 7.236654] Bluetooth: Core ver 2.22
[ 7.236673] Bluetooth: HCI device and connection manager initialized
[ 7.236677] Bluetooth: HCI socket layer initialized
[ 7.236680] Bluetooth: L2CAP socket layer initialized
[ 7.236684] Bluetooth: SCO socket layer initialized
[ 7.327059] Bluetooth: hci0: CSR: Setting up dongle with HCI ver=10 rev=0089; LMP ver=10 subver=0089; manufacturer=2279
[ 7.327064] Bluetooth: hci0: CSR: Unbranded CSR clone detected; adding workarounds and force-suspending once…
[ 7.327069] Bluetooth: hci0: CSR: Couldn’t suspend the device for our Barrot 8041a02 receive-issue workaround
[ 7.327073] Bluetooth: hci0: HCI Delete Stored Link Key command is advertised, but not supported.
[ 7.327075] Bluetooth: hci0: HCI Read Default Erroneous Data Reporting command is advertised, but not supported.
[ 7.327076] Bluetooth: hci0: HCI Set Event Filter command not supported.
[ 19.618313] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 19.618317] Bluetooth: BNEP filters: protocol multicast
[ 19.618321] Bluetooth: BNEP socket layer initialized
[ 20.641995] Bluetooth: RFCOMM TTY layer initialized
[ 20.642006] Bluetooth: RFCOMM socket layer initialized
[ 20.642014] Bluetooth: RFCOMM ver 1.11

2. Use “lsusb” command to display information about USB buses in the system and the devices connected to them.

lsusb | grep  Blue

hendrix@purplehaze:~$ lsusb | grep Blue
Bus 001 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

3.  Use “hciconfig” to configure Bluetooth devices and display basic information on device hciX installed in the system.

Use the parameter -a to display Bluetooth information.

hciconfig -a

hendrix@purplehaze:~$ hciconfig -a
hci0: Type: Primary Bus: USB
BD Address: 04:7F:0E:12:80:ED ACL MTU: 1021:9 SCO MTU: 255:4
UP RUNNING PSCAN ISCAN
RX bytes:1794 acl:0 sco:0 events:116 errors:0
TX bytes:5824 acl:0 sco:0 commands:116 errors:0
Features: 0xbf 0xee 0xcd 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV3
Link policy: RSWITCH SNIFF
Link mode: PERIPHERAL ACCEPT
Name: ‘purplehaze’
Class: 0x7c0104
Service Classes: Rendering, Capturing, Object Transfer, Audio, Telephony
Device Class: Computer, Desktop workstation
HCI Version: 5.1 (0xa) Revision: 0x89
LMP Version: 5.1 (0xa) Subversion: 0x89
Manufacturer: Barrot Technology Limited (2279)

Note:  From the output below, the USB bus is on “hci0”

To toggle the status, you can use up,down or reset

hciconfig hci0 up
hciconfig hci0 down
hciconfig hci0 reset

4. Use the command “rfkill” to enable or disable wireless devices, including bluetooth adapters.

rfkill

hendrix@purplehaze:~$ rfkill list
0: hci0: Bluetooth
Soft blocked: no
Hard blocked: no

You can use the following commands to enable:

rfkill unblock bluetooth

or disable:

rfkill block bluetooth

5. Use the command “lsmod”to show the status of modules in Linux Kernel

lsmod | grep -e btusb

hendrix@purplehaze:~$ lsmod | grep -e btusb
btusb 61440 0
btrtl 24576 1 btusb
btbcm 24576 1 btusb
btintel 40960 1 btusb
btmtk 16384 1 btusb
bluetooth 827392 44 btrtl,btmtk,btintel,btbcm,bnep,btusb,rfcomm

6. Use the command “hwinfo” to probe for the hardware present in the system. This command need to install using the “sudo apt install hwinfo”

hwinfo – -bluetooth

hendrix@purplehaze:~$ hwinfo –bluetooth
09: USB 00.0: 11500 Bluetooth Device
[Created at usb.122]
Unique ID: lfzD.nQKjiuCfL84
Parent ID: ADDn.4Nx_qoDfSd7
SysFS ID: /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0
SysFS BusID: 1-1.1:1.0
Hardware Class: bluetooth
Model: “Cambridge Silicon Radio Bluetooth Dongle (HCI mode)
Hotplug: USB
Vendor: usb 0x0a12 “Cambridge Silicon Radio, Ltd”
Device: usb 0x0001 “Bluetooth Dongle (HCI mode)”
Revision: “88.91”
Driver: “btusb”
Driver Modules: “btusb”
Speed: 12 Mbps
Module Alias: “usb:v0A12p0001d8891dcE0dsc01dp01icE0isc01ip01in00”
Driver Info #0:
Driver Status: btusb is active
Driver Activation Cmd: “modprobe btusb”
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #23 (Hub)

7. Use the command “inxi” with the parameter -E or – -bluetooth. Install the command using the “sudo apt install inxi”

inxi -E
inxi – – bluetooth

Sample output if it’s down:

hendrix@purplehaze:~$ inxi -E
Bluetooth:
Device-1: Cambridge Silicon Radio Bluetooth Dongle (HCI mode) type: USB
driver: btusb
Report: hciconfig ID: hci0 rfk-id: 0 state: down
bt-service: enabled,running rfk-block: hardware: no software: no
address: 04:7F:0E:12:80:ED

Sample if it’s up:

hendrix@purplehaze:~$ inxi -E
Bluetooth:
Device-1: Cambridge Silicon Radio Bluetooth Dongle (HCI mode) type: USB
driver: btusb
Report: hciconfig ID: hci0 state: up address: 04:7F:0E:12:80:ED bt-v: 3.0

8. Use the command “bluetoothctl” to control bluetooth in an interative way.

bluetoothctl

hendrix@purplehaze:~$ bluetoothctl
Agent registered
[bluetooth]#

Other commands once you are in the bluetooth prompt are “scan on/off, discoverable on/off, pair or use the “help” command for more commands

hendrix@purplehaze:~$ bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 04:7F:0E:12:80:ED Discovering: yes
[NEW] Device 63:E5:DA:38:33:D5 Galaxy Watch5 (0QHD)
[NEW] Device 5E:0F:66:6B:38:35 Galaxy Watch4 Classic (08ZK)
[NEW] Device C0:E5:ED:0C:15:88 Satur OPPO

[bluetooth]# discoverable on
Changing discoverable on succeeded

9. Use the “btmon” command for Bluetooth monitor for reading HCI traces

btmon

hendrix@purplehaze:~$ sudo btmon
Bluetooth monitor ver 5.64
= Note: Linux version 5.19.0-46-generic (x86_64) 0.051246
= Note: Bluetooth subsystem version 2.22 0.051249
= New Index: 04:7F:0E:12:80:ED (Primary,USB,hci0) [hci0] 0.051250
= Open Index: 04:7F:0E:12:80:ED [hci0] 0.051250
= Index Info: 04:7F:0E:12:80:ED (Barrot Technology Limited) [hci0] 0.051251
@ MGMT Open: bluetoothd (privileged) version 1.22 {0x0001} 0.051252
@ RAW Open: blueman-manager version 2.22 {0x0002} 0.068958

Capture hci0 and save in a file

sudo btmon -i hciX -w filename

Read the trace file:

sudo btmon -r filename

10. Use the “systemctl” to display the state of the bluetooth

systemctl status bluetooth

hendrix@purplehaze:~$ systemctl status bluetooth
● bluetooth.service – Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor pre>
Active: active (running) since Sun 2023-07-09 21:18:19 +08; 33min ago
Docs: man:bluetoothd(8)
Main PID: 742 (bluetoothd)
Status: “Running”
Tasks: 1 (limit: 16624)
Memory: 1.8M
CPU: 78ms
CGroup: /system.slice/bluetooth.service
└─742 /usr/lib/bluetooth/bluetoothd

I have difficulty on troubleshooting why my generic (China made) Bluetooth USB adapter on my Ubuntu 22. This is the website I used to fix the issue. Kudos to FOSSPost.

My Linux Kernel Didn’t Support My Bluetooth Adapter, So I Patched It

About the author

Free Linux

View all posts

Leave a Reply