デュアルブート環境でBluetoothデバイスを再ペアリングせず使う [Win10/WinXP]
Windows 10とXPのデュアルブート環境でLogicool K380キーボードを使用しているのだが、これが一度ペアリングすると片方のOSでしか使えない。しかも、K380は3デバイスまで切替でペアリング可能なのだが、各OSを別々のデバイスとしてペアリング設定しても、直近のペアリング設定しか使えない。これは何事かと思ったのだが、どうも相性問題ではなくBluetoothの仕様上発生する問題で、解決方法としては各OSがペアリング時にランダムで設定するリンクキーなるものを同じ値で統一して設定させればいいらしい。
症状
同じBluetoothレシーバを使用する1台のPCで複数のOSをインストールしたマルチブート環境にて、片方のOSでペアリングを設定すると他のOSではペアリング設定が機能しなくなる。状態欄にはペアリング設定済みと表示されるが、接続済みにはならず接続されない。
解決方法
普通は下の方法の通りにやれば上手くいく。
→ マルチブート環境の全OSで同じBluetoothデバイスを使う - hnwの日記
私の場合はWindows 10とWindows XPのデュアルブート環境で、Windows 10の場合は標準ドライバが使われるが、Windows XPでは使っている中華製 CSR BluetoothのCDから別途ドライバをインストールした関係か、リンクキーの場所やデータの保存方法が異なっていたため、少し手こずった。
Windows XPかつCSR (Cambridge Silicon Radio) 製Bluetoothドライバの場合、リンクキーは次の場所にある。
レジストリキー | 名前 | データ型 |
HKLM\SYSTEM\CurrentControlSet\Services\CsrBtPort | ScDbData | BINARY |
中身は複数デバイスのリンクキーを含むバイナリデータになっていて、ここから該当デバイスのリンクキーを探るのは少し手間が掛かる。
まず、一度デバイスをペアリングした状態で、ScDbDataをファイルにエクスポートしておく。次に、デバイスを削除して再度ペアリングした状態でScDbDataを別のファイルにエクスポートしておく。リンクキーはペアリングを行う毎に変わるので、バイナリ中でデータが変わっている部分が該当デバイスのリンクキーのはず。
2つのファイルを差分比較してみる。ちょうど16バイト分だけ値が異なる場所 (e0 6a 7f d3 7e 77 59 4e 61 d9 ce 09 18 cf e6 6b
) があるのでこれがXP側のリンクキーか。
Windows 10標準ドライバを使用している場合、リンクキーが保存されている場所はSYSTEMユーザー(管理者権限ユーザーとは異なる)でないとアクセスできないらしい。レジストリエディターをSYSTEMユーザーとして実行するために、PsExecを使う。コマンドpsexec -s -i regedit
を実行する。ただし、PowerShellから実行する場合は./psexec -s -i regedit
。
キーの場所はHKLM\System\CurrentControlSet\services\BTHPORT\Parameters\Keys
で、BDアドレス(接続機器)毎にサブキーが置かれるらしい。Bluetooth機器一つしか繋いでないのなら、一つしかぶら下がっていないのでそれを開く。
名前にある34885d987a2e
という文字列。バイト毎に逆にすると2e 7a 98 5d 88 34
。これ、さっきのScDbDataにも似たようなバイナリがあるのでそれっぽい。この項目のバイナリを先ほどの差分比較で判明したXPのリンクキーに置き換える。
キーボードの電源を入れ直してみる。Windows 10でも使えるようになった。表示も「接続済み」になったよ。パーでき!やったね!
(EOF)
参考サイト
問題解決の参考になった資料。感謝!
- マルチブート環境の全OSで同じBluetoothデバイスを使う - hnwの日記 http://d.hatena.ne.jp/hnw/20150308
- Where to find Bluetooth link keys in the Windows registry for the EkoBuy USB dongle / CSR Harmony… https://medium.com/@richardvigars/where-to-find-bluetooth-link-keys-in-the-windows-registry-for-the-ekobuy-usb-dongle-csr-harmony-b7777c90b41