本帖最后由 allegro 于 2018-12-6 15:14 编辑
这个问题一直都有讨论,各路高手也给出了多种解决方案,随着系统版本和设备的变化,有些细节可能发生了变化,下面结合我最近的折腾来总结一下。 当然也有朋友对这个问题嗤之以鼻:”在两个系统分别配对就可以用了嘛”,我的微软Sculpt鼠标的确可以这样,我的理解是鼠标可以保存多组连接数据(当时只有两个系统)。这算是一种特例吧,不在今天讨论范围。 我的环境是这样的: 硬件: 蓝牙适配器:BCM94352z内置,蓝牙4.0; 终端设备:小米便携鼠标(双模),蓝牙4.0。 操作系统有3个: 1. macOS Mojave(10.14) 2. Win10 3. Parrot OS 4.2.2(Debian Linux衍生) 先找出各操作系统中,蓝牙信息保存的位置: 1. macOS Mojave保存在/private/var/root/Library/Preferences目录下,文件名是com.apple.bluetoothd.plist 2.win10保存在注册表里,位置在\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\适配器地址(连续6字节,字母小写)\设备地址(连续6字节,字母小写) 3.Parrot保存在/var/lib/bluetooth/适配器地址(冒号分隔6字节,字母大写)/设备地址(冒号分隔6字节,字母大写)目录下,文件名是info
分析发现,在几个系统的蓝牙配对过程中,设备地址(图中红色方框)和LTK、RAND、EDIV几个参数都发生了变化,导致在一个系统配对后,前一个配对成功的系统里又不能用了。这几个系统里Linux最简单,参数修改后重启服务就生效;Win10里设备地址有多处存在,修改困难;Mojave里修改配置文件后仍无法使用,估计是还有其他地方保存的有相关参数。所以打算以win10为基准,修改其他几个系统。 大致步骤如下: 1. 分别在几个操作系统下配对,以生成基本的配置文件结构。注意最后在Win10里配对。 2. 使用我写的工具(链接:https://pan.baidu.com/s/1RG130lGeYrWFwNQ02dl-Dw 提取码:1nbj)读取并转换蓝牙参数,受权限限制要使用PsExec工具(使用管理员身份打开命令行窗口:PsExec64.exe -s -i getBTInfo.exe)。双击列表框中的适配器地址,再双击查找出的设备地址。 3. 用生成的Linux参数到Parrot OS里去修改相应的目录名和文件内容,重启。 4. 到Mojave里修改文件/private/var/root/Library/Preferences/com.apple.bluetoothd.plist。可以先获取root权限后把文件复制出来,用PlisEditPro等工具编辑后放回原位。 5. 使用LightBlue(APPStore可以下载)连接蓝牙鼠标,这个工具可以在不使用配对过程的情况下连接(原理未知)。要注意的是,不要在蓝牙设备多的环境连接,否则很难成功。 这样,鼠标就可以在三个系统下使用了。
很多思路来自各路前辈,这里只是总结,一并致谢!
|