蓝牙配对是连接设备的一种信息认证的过程,通过在两个设备之间注册信息,然后连接到一起。若要使用蓝牙设备,必须先将其与另一台蓝牙设备配对,配对有点像是交换电话号码,类似于要先跟想要通话的对象交换电话号码一样,若要连接蓝牙设备,需要先注册每台设备的配对信息。第一次配对设备之后,就不需要再重复配对。原因是每部设备都已储存必要信息,因此可以轻松连接。

双系统不能共用一个蓝牙设备的原因

假如当你从已经配对的 Windows 系统切换到 Ubuntu 系统时, Ubuntu系统此时没有配对验证文件,这时就要进行配对,这里要注意虽然两者是不同的系统,但却是同一个设备,所以在鼠标看来,它要做的不是连接一个新设备而是更新之前的配对信息。这就导致了当你回到 Windows 时,系统因配对验证文件过时而无法连接蓝牙设备。

解决思路

  1. 在 Windows 下进行配对, 用于产生配对信息
  2. 在 Linux 下重新配对,用于产生配对文件
  3. 将 Linux 下的配对信息修改为与 Windows 一致

具体实现

参考以下文章:

https://blog.nanpuyue.com/2018/040.html

https://desktopi18n.wordpress.com/2018/02/02/bluetooth-mouse-in-dual-boot-of-windows-10-and-linux

我是通过文章一中提到的dumphive工具来读取Windows 注册表的,它可以将Windows注册表转换成一个文本文件,方便查找蓝牙设备信息。

这里我遇到一个坑,就是我的蓝牙设备和新设备建立连接时会随机生成一个MAC地址???,后来我查资料发现BLE 协议新增了一种地址:随机设备地址,即设备地址不是固定分配的,而是在设备启动后随机生成的。所以我比上面文章多了一步就是把Linux下的蓝牙设备的MAC地址也改为与WIndows一致。

之后

1
systemctl restart bluetooth

成功建立连接!