1. 簡介
當我們在一臺電腦上安裝了多個操作系統(tǒng),且電腦只有一個藍牙適配器時,如果此時使用藍牙設(shè)備(比如藍牙鼠標),且希望切換系統(tǒng)時能自動連接,則會發(fā)現(xiàn)問題:
- 如果在當前系統(tǒng)配對后,然后跑到另一個系統(tǒng)下配對,再回到當前系統(tǒng)下會發(fā)現(xiàn)藍牙無法自動連接,只能刪除配對并再次配對。然而這樣導(dǎo)致的結(jié)果就是在另一個系統(tǒng)下同樣無法自動連接。
- 如此往復(fù),永遠無法實現(xiàn)能夠在兩個操作系統(tǒng)共享藍牙設(shè)備。
這種情況下你可能認為是系統(tǒng)的藍牙驅(qū)動有問題,然而并非如此。
2. 原理
藍牙適配器、藍牙設(shè)備在實際通信過程中,都是靠其唯一的 MAC 地址來匹配的。當系統(tǒng)和藍牙設(shè)備配對時:
- 系統(tǒng)會保留藍牙設(shè)備的 MAC 地址和配對 Key。
- 藍牙設(shè)備也會保留系統(tǒng)的藍牙適配器的 MAC 地址和配對 Key。
當同一臺電腦上的多個系統(tǒng)分別和同一個藍牙設(shè)備進行配對時,藍牙設(shè)備中保留的系統(tǒng)藍牙適配器的信息會被覆蓋,即此次配對信息會覆蓋上一次的配對信息。因為藍牙設(shè)備是根據(jù) MAC 地址來標識不同的藍牙適配器的,同一 MAC 地址的藍牙適配器在藍牙設(shè)備里只會有一個配對 Key。
【注】Mac 地址為 48 位長度,其一般格式為 xx:xx:xx:xx:xx:xx 。
3. 解決
解決思路很簡單,就是將當前系統(tǒng)下配對好的 Key 值覆蓋其他已經(jīng)配對的系統(tǒng)上的 Key 值。
3.1 Windows 10
查找 Windows 上藍牙適配器和藍牙設(shè)備的 Mac 地址:「開始菜單右鍵 -> 設(shè)備管理器 -> 藍牙」,分別找到系統(tǒng)的藍牙適配器和藍牙設(shè)備,「右鍵屬性 -> 高級」,記錄下它們各自對應(yīng)的 Mac 地址。
定位 Windows 上配對的 Key 值:
- 首先需要安裝
psexec工具,其一般在 Windows 上沒有安裝,點此跳轉(zhuǎn)下載。- 然后以管理員權(quán)限運行
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]為藍牙設(shè)備的 MAC 地址)
【注】如果在[bth ada MAC]下沒有找到[bth dev MAC](比如藍牙耳機),則直接在[bth ada MAC]查找對應(yīng)的 Key 值。- 最后找到
LTK項,其對應(yīng)的數(shù)據(jù)值即為配對的 Key 值,只需要修改覆蓋掉該項即可。
3.2 Linux(Ubuntu 20.04、LinuxMint 20.0、Manjaro 20.2)
- 查找 Linux 上藍牙適配器的 MAC 地址:
bdaddr
查找 Linux 上藍牙設(shè)備的 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] 為藍牙設(shè)備的 MAC 地址。在打開的 info 文件中找到:
[LongTermKey] # 有的是 [LinkKey]
Key=C10C22EB648541239C3A3857784A6130
其中的 Key 對應(yīng)的即為配對的 Key 值,只需要修改覆蓋掉該項即可。
【注】如果是 Linux 多系統(tǒng),其實最簡便的方法就是將已經(jīng)配對好的系統(tǒng)上的 /var/lib/bluetooth/[bth ada MAC]/[bth dev MAC] 直接復(fù)制到其他 Linux 系統(tǒng)的 /var/lib/bluetooth/[bth ada MAC] 中,這樣其他 Linux 系統(tǒng)都不需要事先和藍牙設(shè)備進行配對就能使用藍牙設(shè)備。如果是 Windows 和 Linux 多系統(tǒng),由于 Windows 系統(tǒng)增刪改注冊表比較麻煩,所以最好就是解決順序是:
- 先在一個 Linux 系統(tǒng)上配對。
- 接著到所以 Windows 系統(tǒng)上依次配對。
- 然后記錄下最后一個配對的 Windows 系統(tǒng)的 Key 值。
- 接著覆蓋之前配對的 Windows 系統(tǒng)的 Key 值,以及最初的 Linux 系統(tǒng)的 Key 值。
- 最后將最初的 Linux 系統(tǒng)上的配對信息文件夾
/var/lib/bluetooth/[bth ada MAC]/[bth dev MAC]直接拷貝到其他 Linux 系統(tǒng)的藍牙適配器文件夾/var/lib/bluetooth/[bth ada MAC]下。- 這樣就完成了多 Windows 和 Linux 系統(tǒng)共享藍牙設(shè)備。