Bluetoothデバイスを利用する際、まずペアリングが行われる。初回接続時に128bitのリンクキーを発行して両者で共有し、通信相手に紐付けておくことで、次回接続時はそのリンクキーを使ってお互いを認証できるというもの。
非常に便利な仕組みだが、Boot Campなどのマルチブート環境では上手く動作しない。それぞれのOSが同じBluetoothアダプタを共有するため、Bluetoothデバイスからは各OSを区別できず、OSを切り替えるたびに既存の接続設定を削除したうえでペアリングを行う必要がある。
これではあまりに面倒なので、この問題を解決する方法を記録しておく。
macOSからリンクキーを読み出す
まず、Windows側でBluetoothデバイスのペアリングを済ませておき、macOSに切り替えてペアリングを行う。無事接続できたら、次のコマンドでリンクキーを取り出す。(以下はHighSerra以降のパス。OSのバージョンによって異なるので要注意)
$ sudo defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist
このコマンドを打つと次のような出力が得られる。
LinkKeys = {
”90-9c-4a-b7-d7-7b” = {
”34-88-5d-45-d5-3d” = {length = 16, bytes = 0x0c8da59137fa7612b2d040a752edb1ff};
};
};
最初の6つのオクテットがMacのBluetoothアダプタのBDアドレス。次の行にペアリングしたBluetoothデバイスのBDアドレスとリンクキーの組が表示されている。
Windowsのリンクキーを書き換える
事前準備として、Windows SysinternalsからPsExecをダウンロードしておく。
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
「コントロール パネル」→「システムとセキュリティ」→「ユーザーアカウント制御の設定」を開き、「通知しない」設定に変更する。(それまで他の設定になっていた場合、再起動が必要)
管理者権限で起動したコマンドプロンプトでPsExecのあるフォルダに移動し、「.\psexec -s -i regedit」を実行しレジストリエディタを起動。以下を開いてリンクキーを書き換える。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\BTHPORT\Parameters\Keys\
macOSで取り出したリンクキーはWindowsとは逆順になっている。そこで16進文字列を2文字(1バイト)ずつ逆順に取り出した文字列も作る必要がある。今回適用したロジクールマウスでは以下のとおり。
- macOSでのリンクキー:
0c8da591 37fa7612 b2d040a7 52edb1ff - Windowsで入力するリンクキー:
FFB1ED52 A740D0B2 1276FA37 91A58D0C
無事に接続できたら、「ユーザーアカウント制御の設定」を元に戻して再起動する。