我在 X1C 中安装的是双系统,我会根据使用需求切换系统,但是蓝牙鼠标却无法同时和两个系统配对。
Contents
原因
解决方案
上面已经分析了出现问题的理由,那么解决方法也就显而易见了:直接将最后一次配对生成的密钥复制给其他系统即可。这里我们最后一次直接使用 Windows 进行配对。配对后,你需要通过蓝牙设置->设备与打印机->你的鼠标,在蓝牙选项卡里找到 MAC 地址。
接下来我们需要从系统注册表获取其他信息。这里我们需要使用微软官方提供的调试工具才能查看这部分信息:
https://docs.microsoft.com/en-us/sysinternals/downloads/pstools
下载完成后使用管理员权限打开命令行,并运行:
psexec -s -i regedit.exe
你可以在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys\本机蓝牙适配器MAC\鼠标蓝牙MAC
下找到相关信息。如果你没有看到 CurrentControlSet
可以尝试查看 ControlSet001
对于传统蓝牙设备来说,这里通常只有一个值直接对应 Linux 中的 LinkKey
,但是 BLE 设备则会有一串相关的密钥,后文需要用到的是:
-
IRK
对应 Linux 下的IdentityResolvingKey
(十六进制值,字母需要大写) -
CSRK
对应 Linux 下的LocalSignatureKey
(十六进制值,字母需要大写) -
LTK
对应 Linux 下的LongTermKey
(十六进制值,字母需要大写) -
ERand
对应 Linux 下的Rand
(十进制) -
EDIV
对应 Linux 下的EDiv
(十进制)
如果说 Linux 下未进行过相应的配对,则还需要 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Devices\鼠标蓝牙MAC
下的参数:
-
LERemoteConnParamsIntervalMax
对应 Linux 下MinInterval
-
LERemoteConnParamsIntervalMin
对应 Linux 下MaxInterval
-
LERemoteConnParamsLatency
对应 Linux 下Latency
-
LERemoteConnParamsLSTO
对应 Linux 下Timeout
记录下这些值以后就可以切换到 Linux 系统中进行下一步操作
Linux 下的蓝牙连接信息存储于 /var/lib/bluetooth/本机蓝牙适配器MAC/鼠标蓝牙MAC/info
如果你还没有连接过,则可以直接新建相关文件夹。例如:mkdir -p /var/lib/bluetooth/50:E0:55:75:6C:EC/F0:A2:16:E5:40:F0
接着,编辑 info
文件。
我鼠标使用的配置文件大概是这样的:
[General] Name=M585/M590 Appearance=0x03c2 AddressType=static SupportedTechnologies=LE; Trusted=true Blocked=false Services=00001800-0000-1000-8000-00805f9b34fb;00001801-0000-1000-8000-00805f9b34fb;0000180a-0000-1000-8000-00805f9b34fb;0000180f-0000-1000-8000-00805f9b34fb;00001812-0000-1000-8000-00805f9b34fb;00010000-0000-1000-8000-011f2000046d; [ConnectionParameters] MinInterval=6 MaxInterval=9 Latency=44 Timeout=216 [IdentityResolvingKey] Key=B31054DA983C4E1467A1CE123174ABFC [LocalSignatureKey] Key=AF88E3DC47C025D9642FFC2DB9601E22 Counter=0 Authenticated=false [LongTermKey] Key=1F78025A3BB0152C1330496A29729EBA Authenticated=0 EncSize=16 EDiv=37618 Rand=1717945424792556205 [DeviceID] Source=2 Vendor=1133 Product=45083 Version=7 [ServiceChanged] CCC_LE=2
根据上面提到的对应关系将参数分别替换即可。最后重启蓝牙服务即可完成连接
sudo systemctl restart bluetooth
参考:
https://unix.stackexchange.com/questions/402488/dual-boot-bluetooth-le-low-energy-device-pairing