My Bluetooth adapter does not work in Ubuntu.
$ lsusb | grep tooth
Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 33:03:30:09:74:B4 ACL MTU: 360:4 SCO MTU: 0:0
DOWN
RX bytes:1106 acl:0 sco:0 events:56 errors:0
TX bytes:736 acl:0 sco:0 commands:60 errors:0
$ sudo hciconfig hci0 up
Can't init device hci0: Operation not supported (95)
$ bluetoothctl
Agent registered
[bluetooth]# power on
No default controller available
$ hcitool dev
Devices:
$
$ rfkill
ID TYPE DEVICE SOFT HARD
0 bluetooth hci0 unblocked unblocked
1 wlan phy0 unblocked unblocked
Tried the last two actions:
Bluetake
Works out-of-the-box in Ubuntu v10.04 ~ 11.04 but stopped working reliably in 11.10, frequent kernel panics and other general not good stuff, [Bug: 901770]
$ lsusb <br>Bus 007 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ hciconfig -a hci0 <br>Manufacturer: Cambridge Silicon Radio (10)
Might need same fix as Belkin : add
blacklist hci_usb
to/etc/modprobe.d/blacklist.conf
, and addhci_usb reset=1
to/etc/modules
Also tried
- to install kernel 5.5.2 kernel. But it failed to login, so I've purged it and returned to my
5.3.0-29-generic
kernel. - to do the next, but it failed:
$ make -C /lib/modules/$(uname -r)/build M=$PWD modules make: Entering directory '/usr/src/linux-headers-5.3.0-29-generic' CC [M] /home/spacer/kernel/bluetooth/hci_vhci.o /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_create_device’: /home/spacer/kernel/bluetooth/hci_vhci.c:134:2: warning: dereferencing ‘void *’ pointer 134 | *skb_put(skb, 1) = 0xff; | ^~~~~~~~~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:134:19: error: invalid use of void expression 134 | *skb_put(skb, 1) = 0xff; | ^ /home/spacer/kernel/bluetooth/hci_vhci.c:135:2: warning: dereferencing ‘void *’ pointer 135 | *skb_put(skb, 1) = dev_type; | ^~~~~~~~~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:135:19: error: invalid use of void expression 135 | *skb_put(skb, 1) = dev_type; | ^ /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_get_user’: /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: error: ‘HCI_BREDR’ undeclared (first use in this function) 203 | if (dev_type != HCI_BREDR && dev_type != HCI_AMP) | ^~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: note: each undeclared identifier is reported only once for each function it appears in /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_open_timeout’: /home/spacer/kernel/bluetooth/hci_vhci.c:307:43: error: ‘HCI_BREDR’ undeclared (first use in this function) 307 | vhci_create_device(data, amp ? HCI_AMP : HCI_BREDR); | ^~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c: At top level: /home/spacer/kernel/bluetooth/hci_vhci.c:352:3: error: ‘const struct file_operations’ has no member named ‘aio_write’ 352 | .aio_write = vhci_write, | ^~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: positional initialization of field in ‘struct’ declared with ‘designated_init’ attribute [-Werror=designated-init] 352 | .aio_write = vhci_write, | ^~~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops’) /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: initialization of ‘ssize_t (*)(struct file *, const char *, size_t, loff_t *)’ {aka ‘long int (*)(struct file *, const char *, long unsigned int, long long int *)’} from incompatible pointer type ‘ssize_t (*)(struct kiocb *, const struct iovec *, long unsigned int, loff_t)’ {aka ‘long int (*)(struct kiocb *, const struct iovec *, long unsigned int, long long int)’} [-Werror=incompatible-pointer-types] /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops.write’) cc1: some warnings being treated as errors make[1]: *** [scripts/Makefile.build:290: /home/spacer/kernel/bluetooth/hci_vhci.o] Error 1 make: *** [Makefile:1655: _module_/home/spacer/kernel/bluetooth] Error 2 make: Leaving directory '/usr/src/linux-headers-5.3.0-29-generic'
There are several versions of this device with the same USB ID. According to some are these fake, but I suspect these are only newer models of the chip.
There are a couple of quirks needed to get the chip to work and one needs to patch the kernel code responsible for enabling these quirks to test for these newer models:
I don't give a guarantee that this fixes the issue for all newer models and it may need additional tests to include more LMP sub versions and bcdDevice numbers. However, the above does work for some users who have been using the newer Bluetooth 4.0 models and for myself, using a Bluetooth 5.0 model.
It brings up the device as shown here:
This was tested with kernel 5.5.13 and a cheap Bluetooth 5.0 dongle from AliExpress, and it now lets me connected to a Bluetooth 5.0 headset.
The dongle works just fine under Windows 10 by the way.
Addition: Turning Off USB Auto-Suspend
The auto-suspension of USB ports can interfere with Bluetooth USB dongles. While auto-suspend helps to save power and the devices should wake up quickly on their own can this fail and so degrade the Bluetooth connectivity. By default does the kernel suspend USB ports after 2 seconds. This can be disabled either for all USB ports or only for individual ones, and the Bluetooth USB driver has got a parameter, which specifically controls this for USB-attached Bluetooth dongles. For example, to see the current status:
Here mouse and keyboard are always powered on, but the CSR Bluetooth USB dongle is set to auto-suspend. If auto-suspend is enabled and it is causing trouble then one can test it by temporarily disabling it:
When this helps then one should disable it permanently and there are several ways to do this:
When you are already recompiling the kernel then it is likely best to disable it with the Bluetooth USB kernel module by setting the configuration parameter CONFIG_BT_HCIBTUSB_AUTOSUSPEND to N or by commenting it out in the kernel config file. This will cause the Bluetooth USB driver to disable auto-suspend by default for every port it finds a matching device on, and leaves all other USB devices as they were.
Without recompiling the kernel and where the Bluetooth USB module is compiled into the kernel does one need to do this with a boot parameter. For GRUB edit /etc/default/grub and append the kernel command line with btusb.enable_autosuspend=n. Then update the grub configuration by running update-grub and reboot.
File: /etc/default/grub
File: /etc/modprobe.d/bluetooth-usb.conf
Addition: Enabling The Fast Connectable Setting
Another method for improving Bluetooth connectivity is to enable the FastConnectable setting of the bluetoothd daemon. The setting can be found in /etc/bluetooth/main.conf.
File: /etc/bluetooth/main.conf
I have this dongle - it's several years old so I can't comment on whether it's a fake or whether modern dongles with this USB ID can be fake.
I'm using it with a really old Acer TravelMate 2420 laptop using (out of necessity) the i386 release of Ubuntu 18.04 LTS. (Current kernel as of the time of writing is 4.15.0-106-generic. (No need to feel sympathy. This is just an old spare computer I keep in the bedroom and use occasionally.)
Bluetooth worked for me, but wasn't very reliable. I would get frequent disconnections of my Bluetooth mouse (Microsoft Bluetooth Notebook Mouse 5000).
I solved the problems completely a couple of weeks ago with the following changes in
/etc/default/tlp
:(Find the appropriate lines and add the first and edit the second accordingly.)
It is likely that I don't need the specific ID-based
USB_BLACKLIST
command (I've not tested this) but thought I'd leave it in for safety. The second (USB_BLACKLIST_BTUSB) defaults to 0 on my system and I suspect this is the key configuration to change.You may need to install the
tlp
package specifically, if it's not already installed. Don't forget to restart it after reconfiguring it.I hope this helps.
I had issues with two different
0a12:0001 Cambridge Silicon Radio
. Both were TRENDnet TBW-106UB. I purchased two new USB Bluetooth Dongles, and haven't had an issue since. I've used the new dongles with Ubuntu 18.04 and 19.10.https://www.amazon.com/gp/product/B07J5WFPXX
https://www.amazon.com/gp/product/B007Q45EF4
Updating the kernel to the latest version works for me.
https://www.how2shout.com/linux/how-to-change-default-kernel-in-ubuntu-22-04-20-04-lts/
My new Bluetooth dongle don't work in Linux Mint 20.2 and Kubuntu
Tests in Linux Mint 20.2 (work) Kernel 5.4.0-74-generic
$ lsusb
$ grep . /sys/bus/usb/devices/[0-9]*/power/control
$ hciconfig -a hci0