一、问题现象
同一台蓝牙设备,连接同一台电脑下的Windows和Mac这两个不同系统,需要反复重置蓝牙设备,重新进行连接的问题。
二、问题实质
问题的实质,就在于即使是同一个台电脑的两个系统,Windows和Mac也会在连接同一台蓝牙设备的时候,各自生成一个link ID,所以本文目的在于:将该蓝牙设备先连接Windows,然后再连接Mac,然后获取Mac对该设备的link ID,经转换后再粘贴到Windows下该蓝牙设备的link ID上。
三、处理步骤
1、将该蓝牙设备连接到Windows系统。
2、重启电脑进入Mac系统,将该蓝牙设备连接到Mac系统。
3、获取蓝牙设备在Mac系统下的link ID
在Mac系统下,对于10.11 MacOS El Captain 输入
sudo defaults read/private/var/root/Library/blued.plist
对于10.12 MacOS Sierra 输入
sudo defaults read /private/var/root/Library/Preferences/blued.plist
对于10.13 MacOS High Sierra 输入
sudo defaults read /private/var/root/Library/Preferences/com.apple.Bluetoothd.plist
可得到如下信息包含如下部分:
{
LinkKeys= {
"3c-4d-be-0d-83-92" = {length = 16, bytes = 0x3694fb73a14592cb73eb569d66400fc4};
"6c-47-60-09-ef-32" = {length = 16, bytes = 0x1cbcfb84bdad7e79d00f9100abe43fe2};
"94-db-56-79-ce-d9" = {length = 16, bytes = 0x82b4e98543cb4e079991616971929475};
"d4-57-63-5c-4a-b7" = {length = 16, bytes = 0xdfbef40e116e170fa79c0828025fd682};
};
上面只是一个例子,包含了Mac系统下连接的四台蓝牙设备的link ID信息,link ID各自为bytes后的32位的16进制信息(注意去掉16进制标识0x)。
4、转换link ID
由于Mac系统是以Little Ending 储存数据,而Windows 是以Big Ending 储存的,所以需要将link ID由Little Ending转换为Big Ending,其规则举例如下: 3694fb73a14592cb73eb569d66400fc4 转换为 c40f40669d56eb73cb9245a173fb9436 也就是32位信息,8位为一组,进行反转,每一组内,2位为一小组,进行反转。
5、将转换后的link ID放回Windows的该蓝牙设备的link ID中
再次打开Windows修改注册表,由于注册表中,这个link ID是被保护的,所以需要下载工具“PSTools”: PSTools,解压缩该压缩包后,以管理员身份运行“命令提示符”,然后cd 到解压缩之后的 PSTools 文件夹,输入以下口令:
psexec -s -i regedit
然后在这个工具打开的注册表下,找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys\(蓝牙适配器地址)
如下图: 右侧三个文件,即为3个蓝牙设备,后面的数据,就是该设备在Windows下的link ID,这里需要确定好自己连接的蓝牙设备,找到对应文件,右键-〉修改二进制值,如下图: 利用转换过的Big Ending 格式的Link ID,逐一将16进制数值替换掉,键入其中,点击确定,则不需要重启,再回到Windows的蓝牙设备连接界面,可直接连接成功! 注意:该处理方案只能是针对各个蓝牙设备逐一进行处理,如有新的蓝牙设备,需要重复执行以上步骤。
|