我的新蓝牙耳机(HONOR CHOICE 开放式耳塞)出了点问题。我可以将它们与我的 Ubuntu 24.10 PC(一台带有蓝牙适配器的台式电脑)配对,配对后它们工作正常,直到我重新启动电脑(或重新启动服务bluetooth
),这时它就无法连接了。我之前的蓝牙耳机没有出现这种情况,在 Ubuntu 上运行良好。
重启后,我连接耳机的唯一方法是经过另一个配对过程:经过一些调整(关闭耳机或适配器并反复尝试连接)后,Ubuntu 要求我确认一个 6 位数的代码,单击“确认”后,耳机即可再次工作。(顺便说一句,6 位数的代码本身很奇怪:以前的耳机不需要代码,而且耳机无论如何都无法显示代码,所以我实际上并没有将该代码与任何东西进行比较。)
完成此过程后,LinkKey
in/var/lib/bluetooth/XX:XX:XX:XX:XX:XX/XX:XX:XX:XX:XX:XX/info
会发生变化;此外,我安装的蓝牙管理器程序(blueman
包)在标有“蓝牙配对请求”的通知中显示相同的代码。这让我有理由确信这实际上是另一次配对。
此问题特定于 Ubuntu:在同一台计算机上安装 Windows 11 时不会发生此问题,重启后重新连接没有任何问题。(请注意,这不是在双启动的情况下必须在两个不同的操作系统之间同步蓝牙密钥的问题:在这里我将耳机与 Ubuntu 配对,然后再次重新启动到 Ubuntu,根本不触及 Windows。我只提到 Windows 以将问题缩小到 Ubuntu,而不是耳机或 PC 硬件。)
如果我尝试通过命令行连接耳机,它会产生以下错误消息(我删除了设备的地址):
$ bluetoothctl connect XX:XX:XX:XX:XX:XX
Attempting to connect to XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
Failed to connect: org.bluez.Error.Failed br-connection-unknown
我该如何修复此问题?
编辑:我发现了这个btmon
工具,它似乎可以转储计算机与其交互的设备之间交换的蓝牙消息的完整痕迹。
在失败的连接尝试的跟踪中,我发现了以下交换:
> HCI Event: Link Key Request (0x17) plen 6 #55 [hci0] 13.039915
Address: XX:XX:XX:XX:XX:XX (Tiinlab Corporation)
< HCI Command: Link Key Request Negative Reply (0x01|0x000c) plen 6 #56 [hci0] 13.039939
Address: XX:XX:XX:XX:XX:XX (Tiinlab Corporation)
以下是成功连接尝试的跟踪的相应部分(配对之后和重启之前):
> HCI Event: Link Key Request (0x17) plen 6 #34 [hci0] 13.524821
Address: XX:XX:XX:XX:XX:XX (Tiinlab Corporation)
< HCI Command: Link Key Request Reply (0x01|0x000b) plen 22 #35 [hci0] 13.524834
Address: XX:XX:XX:XX:XX:XX (Tiinlab Corporation)
Link key[16]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
看来,Ubuntu 在服务bluetooth
重启后不记得它有一个该设备的链接密钥。