最近购买了一个罗技 Pebble 蓝牙鼠标和一个高斯 GS87D 蓝牙机械键盘,结果在双系统中就遇到了问题。一旦在其中一个系统中配对成功,在另一个系统中就没法使用了。在网上找了半天原因,才明白这是因为不同系统配对的时候生成的密钥,地址这些都会有所不同,造成了不能共享的问题。参考了网上的一些解决方案,终于实现了共享,现将过程记录如下。
首先需要下载 PSTools 工具,以访问注册表中一些需要超级管理员权限才能看到的东西。
在 Archlinux 中安装 bluez 和 bluemen,命令如下:
sudo pacman -S bluez blueman
sudo systemctl enable bluetooth.service
重启后使用 blueman 图形界面配对蓝牙鼠标键盘,确保能够使用。
在 Windows 系统中将蓝牙键盘鼠标配对成功,并保证能够使用,此时 Linux 下的配置会失效。
将 PSTools 解压出来后,执行如下命令打开注册表:
PsExec -s -i regedit
-
打开 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys 目录,找到下面的 {你的蓝牙适配器MAC地址} 的子目录,在其中找到名为蓝牙键盘的 MAC 地址的 REG_BINARY 键,记录下其值,如图所示:
-
罗技 pebble 是LE(Low Energy)蓝牙设备,配对方式会略有不同。打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys{你的蓝牙适配器MAC地址}{蓝牙鼠标MAC地址}目录,记录下其值,如图所示:
-
重启进入 Linux ,用 su 命令切换到 root 用户,进入 /var/lib/bluetooth/ 目录,找到你的蓝牙适配器MAC地址对应的目录,如图所示:
首先将蓝牙设备对应的 MAC 地址的目录进行重命名,命名为跟 Windows 目录下地址相同的名字,如果已经相同则忽略这一步。
进入蓝牙键盘对应的 MAC 地址的目录,编辑 info 文件,修改 LinkKey 中的 KEY= 一项,与之前记录的值相同,注意这里要大写,例如:
[General]
Name=GS87-D Keyboard
Class=0x000540
SupportedTechnologies=BR/EDR;
Trusted=true
Blocked=false
WakeAllowed=true
Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;
[LinkKey]
Key=73E80723FBD1F6B978617D434D209CEB
Type=4
PINLength=0
[DeviceID]
Source=2
Vendor=1452
Product=544
Version=1
- 进入蓝牙鼠标对应的目录,编辑 info 文件,如下所示:
[General]
Name=Logitech Pebble
Appearance=0x03c2
AddressType=static
SupportedTechnologies=LE;
Trusted=false
Blocked=false
WakeAllowed=true
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=21DCF8B7E9CC09AA2726C7F9F9CADA16
[LongTermKey]
Key=DE782F2738D5652C84E06FE6382CF7AD
Authenticated=0
EncSize=16
EDiv=54965
Rand=8720642171819249024
[DeviceID]
Source=2
Vendor=1133
Product=45089
Version=7
这里我们要修改的是如下几项:
- IdentityResolvingKey 中的 Key ,对应 Windows 中的 IRK,只是全大写
- LongTermKey 中的 Key, 对应 Windows 中的 LTK,只是全大写
- LongTermKey 中的 EDiv ,对应 Windows 中的 EDIV,只是需要把 Windows 中的十六进制转成十进制
- LongTermKey 中的 EncSize ,对应 Windows 中的 KeyLength,只是需要把 Windows 中的十六进制转成十进制
- LongTermKey 中的 Rand,对应 Windows 中的 ERand,但是比较麻烦的是首先要把 ERand 反过来(两位两位的来),再转成十进制。比如 ERand 是 80cd93f0d9f00579 ,反过来就是 7905f0d9f093cd80 ,转成十进制,就得到了 8720642171819249024 。其实在上面的截图里都能看到对应的十进制的值。
- 重启系统,就能完成双系统共享蓝牙鼠标键盘了。