1. 簡介
當我們在一臺電腦上安裝了多個操作系統,且電腦只有一個藍牙適配器時,如果此時使用藍牙設備(比如藍牙鼠標),且希望切換系統時能自動連接,則會發現問題:
- 如果在當前系統配對後,然後跑到另一個系統下配對,再回到當前系統下會發現藍牙無法自動連接,只能刪除配對並再次配對。然而這樣導致的結果就是在另一個系統下同樣無法自動連接。
- 如此往復,永遠無法實現能夠在兩個操作系統共享藍牙設備。
這種情況下你可能認爲是系統的藍牙驅動有問題,然而並非如此。
2. 原理
藍牙適配器、藍牙設備在實際通信過程中,都是靠其唯一的 MAC 地址來匹配的。當系統和藍牙設備配對時:
- 系統會保留藍牙設備的 MAC 地址和配對 Key。
- 藍牙設備也會保留系統的藍牙適配器的 MAC 地址和配對 Key。
當同一臺電腦上的多個系統分別和同一個藍牙設備進行配對時,藍牙設備中保留的系統藍牙適配器的信息會被覆蓋,即此次配對信息會覆蓋上一次的配對信息。因爲藍牙設備是根據 MAC 地址來標識不同的藍牙適配器的,同一 MAC 地址的藍牙適配器在藍牙設備裏只會有一個配對 Key。
【注】Mac 地址爲 48 位長度,其一般格式爲 xx:xx:xx:xx:xx:xx
。
3. 解決
解決思路很簡單,就是將當前系統下配對好的 Key 值覆蓋其他已經配對的系統上的 Key 值。
3.1 Windows 10
查找 Windows 上藍牙適配器和藍牙設備的 Mac 地址:「開始菜單右鍵 -> 設備管理器 -> 藍牙」,分別找到系統的藍牙適配器和藍牙設備,「右鍵屬性 -> 高級」,記錄下它們各自對應的 Mac 地址。
定位 Windows 上配對的 Key 值:
- 首先需要安裝
psexec
工具,其一般在 Windows 上沒有安裝,點此跳轉下載。- 然後以管理員權限運行
CMD
(具體做法:組合鍵Win+R
,輸入cmd
,最後Ctrl+Shift+Enter
)。- 接着在
CMD
下以運行以下命令:psexec -s -i regedit.exe
- 在打開的註冊表中查找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys\[bth ada MAC]\[bth dev MAC]
(其中,[bth ada MAC]
爲藍牙適配器的 MAC 地址,[bth dev MAC]
爲藍牙設備的 MAC 地址)
【注】如果在[bth ada MAC]
下沒有找到[bth dev MAC]
(比如藍牙耳機),則直接在[bth ada MAC]
查找對應的 Key 值。- 最後找到
LTK
項,其對應的數據值即爲配對的 Key 值,只需要修改覆蓋掉該項即可。
3.2 Linux(Ubuntu 20.04、LinuxMint 20.0、Manjaro 20.2)
- 查找 Linux 上藍牙適配器的 MAC 地址:
bdaddr
查找 Linux 上藍牙設備的 Mac 地址:利用
bluetoothctl
工具查找,具體參考 Deepin15.11下藍牙配對和連接。定位 Linux 上配對的 Key 值:
su
cd /var/lib/bluetooth/[bth ada MAC]/[bth dev MAC]
vim info
其中,[bth ada MAC]
爲藍牙適配器的 MAC 地址,[bth dev MAC]
爲藍牙設備的 MAC 地址。在打開的 info
文件中找到:
[LongTermKey] # 有的是 [LinkKey]
Key=C10C22EB648541239C3A3857784A6130
其中的 Key
對應的即爲配對的 Key 值,只需要修改覆蓋掉該項即可。
【注】如果是 Linux 多系統,其實最簡便的方法就是將已經配對好的系統上的 /var/lib/bluetooth/[bth ada MAC]/[bth dev MAC]
直接複製到其他 Linux 系統的 /var/lib/bluetooth/[bth ada MAC]
中,這樣其他 Linux 系統都不需要事先和藍牙設備進行配對就能使用藍牙設備。如果是 Windows 和 Linux 多系統,由於 Windows 系統增刪改註冊表比較麻煩,所以最好就是解決順序是:
- 先在一個 Linux 系統上配對。
- 接着到所以 Windows 系統上依次配對。
- 然後記錄下最後一個配對的 Windows 系統的 Key 值。
- 接着覆蓋之前配對的 Windows 系統的 Key 值,以及最初的 Linux 系統的 Key 值。
- 最後將最初的 Linux 系統上的配對信息文件夾
/var/lib/bluetooth/[bth ada MAC]/[bth dev MAC]
直接拷貝到其他 Linux 系統的藍牙適配器文件夾/var/lib/bluetooth/[bth ada MAC]
下。- 這樣就完成了多 Windows 和 Linux 系統共享藍牙設備。