Dz99 Blog

Arch(Dual Boot)でBluetoothのセットアップをする

2022-06-04

Linux デュアルブート環境で Bluetooth デバイスを使う環境を整えました!少し躓いた部分があったので残しておこうと思います。

bluez などのパッケージのインストール

バックエンド bluez とコンソールクライアントを追加する bluez-utils をインストール。GUI クライアントはいくつか選択肢があるが、今回は i3 を使っていることもありトレイアプレットが含まれる blueberry を選択した。bluetooth アダプタのドライバ btusb をロードし、bluetooth.service を起動、有効化する。

$ modprobe btusb
$ sudo systemctl start bluetooth
$ sudo systemctl enable bluetooth

Bluetooth アダプタを自動で起動。接続

デフォルトでは自動で起動しないので、/etc/bluetooth/main.conf に以下を追加

[Policy]
AutoEnable=true

デュアルブートに対応させる

これが起こってしまう理由だが、Bluetooth サービスはペアリングの際に、コンピュータには Bluetooth デバイスの MAC アドレスに対応させたペアリングキーを、BLuetooth デバイスにはコンピュータの MAC アドレスに対応させたペアリングキーを保存する。こうすることによって情報を保存している。しかし、コンピュータの MAC アドレスは一意のものなので、それぞれの OS で Bluetooth デバイスをペアリングしようとすると、Bluetooth デバイスに保存されているペアリングキーが上書きされてしまうことになる。したがって片方の OS で生成されたペアリングキーをもう片方の OS で上書き保存すれば、複数の OS で共有することが出来る!

Windows で生成されたペアリングキーを抜き取る

PsTools をダウンロードして解凍、レジストリエディタを起動する

./PsExec64.exe -s -i regedit.exe

レジストリエディタで HKEY_LOCAL_MACHINE に移動
このもう少し下に各 Bluetooth デバイスの MAC アドレスの書かれたキーが見つかるので、見つかりしだいそれをエクスポートする。テキストエディタでのぞくと LTKERand などが見られるはず。最後にレジスタファイルをテキストに変換したものを Linux 側が簡単に受け取れるように保存。

Linux にて Windwos で生成されたペアリングキーに情報を修正する

root ユーザに切り替えて /var/lib/bluetooth/XX:XX:XX... に移動する。このディレクトリの中には Bluetooth デバイスの MAC アドレスの名前のディレクトリがあるので、対応するディレクトリに入る。Windows と Linux で該当の Bluetooth デバイスの MAC アドレスが一致していない可能性があるので(???)違っていた場合は、Windows に合わせて修正(MAC アドレスはコンピュータやデバイスごとに一意のものだと思っていたので不思議)。
Bluetooth デバイスのディレクトリ内で info というファイルがあるので、ここにあるペアリングキー情報を Windows のものに置き換えていく。デバイスによって違うが、Windows のレジスタファイルでLTKERandEDIVIRK を記載されていたものを Linux の info 内でそれぞれ LongTermKey.KeyRandEDivIdentityResolvingKey.Key に対応させて記述する

[LongTermKey]
Key=(convert(LTK))
Rand=(convert(ERand))
EDiv=(convert(EDIV))
...etc

最後はリブートで動作確認しておしまいです!よき Linux ライフを :-)

© 2022, dz99