我的蓝牙适配器在 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
尝试了最后两个动作:
Bluetake
在 Ubuntu v10.04 ~ 11.04 中开箱即用,但在 11.10 中停止可靠工作,频繁的内核恐慌和其他一般不好的东西,[错误: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)
可能需要与 Belkin 相同的修复:添加
blacklist hci_usb
到/etc/modprobe.d/blacklist.conf
,然后添加hci_usb reset=1
到/etc/modules
也试过
- 安装内核 5.5.2 内核。但它无法登录,所以我已经清除它并返回到我的
5.3.0-29-generic
内核。 - 做下一个,但它失败了:
$ 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'
该设备有多个版本具有相同的 USB ID。有些人说这些是假的,但我怀疑这些只是芯片的较新型号。
让芯片工作需要一些怪癖,并且需要修补负责使这些怪癖能够测试这些新型号的内核代码:
我不保证这可以解决所有较新型号的问题,并且可能需要额外的测试以包含更多 LMP 子版本和 bcdDevice 编号。但是,以上内容对一些使用较新的蓝牙 4.0 型号的用户和我自己使用蓝牙 5.0 型号的用户确实有效。
它会打开设备,如下所示:
这是使用内核 5.5.13 和 AliExpress 的廉价蓝牙 5.0 加密狗进行测试的,现在它可以让我连接到蓝牙 5.0 耳机。
顺便说一句,加密狗在 Windows 10 下工作得很好。
补充:关闭 USB 自动挂起
USB 端口的自动暂停可能会干扰蓝牙 USB 加密狗。虽然自动挂起有助于节省电量,并且设备应该自行快速唤醒,但如果这会失败并因此降低蓝牙连接性。默认情况下,内核会在 2 秒后挂起 USB 端口。这可以对所有 USB 端口或仅对单个端口禁用,并且蓝牙 USB 驱动程序有一个参数,该参数专门控制 USB 连接的蓝牙加密狗。例如,要查看当前状态:
此处鼠标和键盘始终处于开机状态,但 CSR 蓝牙 USB 加密狗设置为自动挂起。如果启用了自动挂起并且它造成了麻烦,那么可以通过暂时禁用它来测试它:
当这有帮助时,应该永久禁用它,有几种方法可以做到这一点:
当您已经在重新编译内核时,最好使用蓝牙 USB 内核模块禁用它,方法是将配置参数CONFIG_BT_HCIBTUSB_AUTOSUSPEND设置为N或在内核配置文件中将其注释掉。这将导致蓝牙 USB 驱动程序默认禁用它找到匹配设备的每个端口的自动挂起,并让所有其他 USB 设备保持原样。
无需重新编译内核并且蓝牙 USB 模块编译到内核中的位置是否需要使用引导参数来执行此操作。对于 GRUB 编辑/etc/default/grub并在内核命令行中附加btusb.enable_autosuspend=n。然后通过运行update-grub并重新启动来更新 grub 配置。
文件:/etc/default/grub
文件:/etc/modprobe.d/bluetooth-usb.conf
补充:启用快速连接设置
改善蓝牙连接的另一种方法是启用b luetoothd守护程序的FastConnectable设置。该设置可以在/etc/bluetooth/main.conf中找到。
文件:/etc/bluetooth/main.conf
我有这个加密狗——它已经有好几年了,所以我无法评论它是否是假的,或者带有这个 USB ID 的现代加密狗是否是假的。
我将它与一台非常旧的 Acer TravelMate 2420 笔记本电脑一起使用(出于必要)使用 Ubuntu 18.04 LTS 的 i386 版本。(截至撰写本文时,当前内核为 4.15.0-106-generic。(无需同情。这只是我放在卧室里偶尔使用的旧备用电脑。)
蓝牙对我有用,但不是很可靠。我的蓝牙鼠标(Microsoft 蓝牙笔记本鼠标 5000)会经常断开连接。
几周前,我通过以下更改完全解决了这些问题
/etc/default/tlp
:(找到适当的行并添加第一行并相应地编辑第二行。)
很可能我不需要特定的基于 ID 的
USB_BLACKLIST
命令(我没有测试过),但我认为为了安全起见我会保留它。第二个(USB_BLACKLIST_BTUSB)在我的系统上默认为 0,我怀疑这是要更改的关键配置。tlp
如果尚未安装,您可能需要专门安装该软件包。重新配置后不要忘记重新启动它。我希望这有帮助。
我有两个不同的问题
0a12:0001 Cambridge Silicon Radio
。两者都是 TRENDnet TBW-106UB。我购买了两个新的 USB 蓝牙适配器,从那以后就没有问题了。我在 Ubuntu 18.04 和 19.10 中使用了新的加密狗。https://www.amazon.com/gp/product/B07J5WFPXX
https://www.amazon.com/gp/product/B007Q45EF4
将内核更新到最新版本对我有用。
https://www.how2shout.com/linux/how-to-change-default-kernel-in-ubuntu-22-04-20-04-lts/
我的新蓝牙加密狗在 Linux Mint 20.2 和 Kubuntu 中不起作用
Linux Mint 20.2 中的测试(工作)内核 5.4.0-74-generic
$ lsusb
$ grep 。/sys/bus/usb/devices/[0-9]*/电源/控制
$ hciconfig -a hci0