最近購買了一個羅技 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地址對應的目錄,如圖所示:
Linux 藍牙目錄 首先將藍牙設備對應的 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 。其實在上面的截圖里都能看到對應的十進制的值。
- 重啟系統,就能完成雙系統共享藍牙鼠標鍵盤了。