Windows と Linux のデュアルブート環境で Bluetooth デバイスを共用する
最近立て続けに Dual boot 環境で Bluetooth デバイスを使う必要に迫られた。 滅多にやる作業ではないので、備忘録としてやり方を残しておく。
今回使うことになったのは以下。
- Bluetooth キーボード: サーバーの操作用 (主にメンテナンス)
- 通常は ssh 接続すれば事足りるが、たまに Windows やコンソールをいじりたい場合がある
- テレビに HDMI 接続しているので近寄って USB キーボードを繋ぐのもねぇ…
- Bluetooth Low Energy (BLE) マウス: ノートPC
- ノートだとやっぱりワイヤレスじゃないとね…
BLE ではないキーボードの方はネット上の情報も豊富で比較的簡単。
問題は BLE マウスの方。 こちらはネット上の情報も乏しく Linux でペアリングすること自体が面倒。 単なる Low Energy なマウスと思っていると痛い目に遭う。 いずれは GUI でできるようになるかもしれないが、今回は Debian Stretch の環境で BLE マウスを使えるようにする。
0) 事前作業
事前作業として sysinternals から pstools をダウンロードして PsExec を入手しておく。
A) Bluetooth デバイスを Windows / Linux Dual boot 環境で共用する
こちらは簡単。 ネット上に 日本語の情報 もあるので、その通りやれば OK。
A-1) まずは Linux 側でペアリングする
BLE ではない Bluetooth デバイスであれば、普通に GUI からでできるはず。
A-2) Windows 側でペアリングして情報を採取する
再起動して Windows を立ち上げ、同じ Bluetooth デバイスを Windows 側でペアリングする。
ペアリングが済んだら 0 項で入手した PsExec を使用して管理者権限でレジストリエディタを起動する。 (PsExec を使用するのは、通常のレジストリエディタ起動ではアクセスできないレジストリをアクセスするため)
PsExec64 -s -i regedit
レジストリエディタを起動したら HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys
を選択し、右クリックして内容をエクスポートする。
.reg
形式でも .txt
形式でもお好きな方を…
続いて、エクスポートしたファイルから Bluetooth デバイスの MAC アドレスを名前とする値を取り出す。
.reg
形式なら以下のような感じ。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\xxxxxxxxxxxx]
"yyyyyyyyyyyy"=hex:00,11,22,33,44,55,66,77,88,99,aa,bb,cc,dd,ee,ff
xxxxxxxxxxxx
がホストの MAC アドレスyyyyyyyyyyyy
が Windows でペアリングした Bluetooth デバイスの MAC アドレス00,11,22,33,44,55,66,77,88,99,aa,bb,cc,dd,ee,ff
が必要な情報
A-3) Linux 側の情報を書き換える
再起動して Linux を立ち上げる。
root ユーザで /var/lib/bluetooth/xx:xx:xx:xx:xx:xx/yy:yy:yy:yy:yy:yy/info
を編集して Key
を A-2 項で取り出した値に書き換える。
[LinkKey]
Key=00112233445566778899aabbccddeeff
ネットの情報では16進数を大文字に書き換えるような指示をしているものも見受けられるが、大文字に書き換えなくても大丈夫。
A-4) 再起動して Linux を立ち上げ直す
これで Windows と Linux の両方で同じ Bluetooth デバイスが使えるようになったはず。
B) Bluetooth Low Energy (BLE) デバイスを Windows / Linux Dual boot 環境で共用する
B-1) まずは Linux でペアリングさせる
この情報が意外に無い。 あっても古い情報が多く、実際に扱える状態まで至らず四苦八苦した。 最終的に参考にしたのは Ubuntu の Accessing GATT Services の内容。
bluetoothctl
コマンドを root ユーザで起動してペアリングさせる。
以下の中で zz:zz:zz:zz:zz:zz
が BLE デバイスの MAC アドレス。
scan on
の後で BLE デバイス側からペアリングを開始すると[New]
として検出される。- デバイスがリストされたら
scan off
でディスカバリーを止める。 - BLE の場合
pair
コマンドではなくconnect
コマンドで接続する。
しばらくして[CHG] Device zz:zz:zz:zz:zz:zz Paired: yes
が表示されたらペアリング完了。
root@XXXX # bluetoothctl
[NEW] Controller xx:xx:xx:xx:xx:xx XXXX [default]
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller xx:xx:xx:xx:xx:xx Discovering: yes
...
[NEW] Device zz:zz:zz:zz:zz:zz ZZZZ Mouse
...
[bluetooth]# scan off
...
Discovery stopped
[CHG] Controller xx:xx:xx:xx:xx:xx Discovering: no
[bluetooth]# connect zz:zz:zz:zz:zz:zz
Attempting to connect to zz:zz:zz:zz:zz:zz
[CHG] Device zz:zz:zz:zz:zz:zz Connected: yes
Connection successful
[NEW] Primary Service
/org/bluez/hci0/dev_zz_zz_zz_zz_zz_zz/service0008
00001801-0000-1000-8000-00805f9b34fb
Generic Attribute Profile
[NEW] Characteristic
/org/bluez/hci0/dev_zz_zz_zz_zz_zz_zz/service0008/char0009
00002a05-0000-1000-8000-00805f9b34fb
Service Changed
[NEW] Descriptor
/org/bluez/hci0/dev_zz_zz_zz_zz_zz_zz/service0008/char0009/desc000b
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
...
[CHG] Device zz:zz:zz:zz:zz:zz UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device zz:zz:zz:zz:zz:zz UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device zz:zz:zz:zz:zz:zz UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Device zz:zz:zz:zz:zz:zz UUIDs: 0000180f-0000-1000-8000-00805f9b34fb
[CHG] Device zz:zz:zz:zz:zz:zz UUIDs: 00001812-0000-1000-8000-00805f9b34fb
[CHG] Device zz:zz:zz:zz:zz:zz UUIDs: 00010000-0000-1000-8000-011f2000046d
[CHG] Device zz:zz:zz:zz:zz:zz ServicesResolved: yes
[CHG] Device zz:zz:zz:zz:zz:zz Modalias: usb:vZZZZpZZZZdZZZZ
[CHG] Device zz:zz:zz:zz:zz:zz Paired: yes
[ZZZZ Mouse]# exit
Agent unregistered
[DEL] Controller xx:xx:xx:xx:xx:xx XXXX [default]
...
これで xx:xx:xx:xx:xx:xx/zz:zz:zz:zz:zz:zz/
配下に attributes
と info
ファイルが作成され、 BLE デバイスが使えるようになったはず。
B-2) Windows 側でペアリングして情報を採取する
再起動して Windows を立ち上げ、同じ BLE デバイスをペアリングする。 Windows 10 であれば、普通にペアリングできるはず。
ペアリングが済んだら、 A-2 項と同様にレジストリの情報を採取する。
PsExec64 -s -i regedit
レジストリエディタを起動したら HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys
を選択し、右クリックして内容をエクスポートする。
BLE の場合は A-2 項に示した通常の Bluetooth デバイスと比べて内容が複雑で、 .reg
形式なら以下のような感じ。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\xxxxxxxxxxxx]
"MasterIRK"=hex:00,10,20,30,40,50,60,70,80,90,a0,b0,c0,d0,e0,f0
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\xxxxxxxxxxxx\zzzzzzzzzzzz]
"LTK"=hex:01,11,21,31,41,51,61,71,81,91,a1,b1,c1,d1,e1,f1
"KeyLength"=dword:00000000
"ERand"=hex(b):02,12,22,32,42,52,62,72
"EDIV"=dword:0000a3b3
"IRK"=hex:04,14,24,34,44,54,64,74,84,94,a4,b4,c4,d4,e4,f4
"Address"=hex(b):zz,zz,zz,zz,zz,zz,00,00
"AddressType"=dword:00000000
"CSRKInbound"=hex:05,15,25,35,45,55,65,75,85,95,a5,b5,c5,d5,e5,f5
"InboundSignCounter"=hex(b):ff,ff,ff,ff,ff,ff,ff,ff
"CSRK"=hex:06,16,26,36,46,56,66,76,86,96,a6,b6,c6,d6,e6,f6
"OutboundSignCounter"=dword:00000000
"MasterIRKStatus"=dword:00000001
"AuthReq"=dword:00000005
B-3) Linux 側の情報を書き換える
再起動して Linux を立ち上げる。
root ユーザで /var/lib/bluetooth/xx:xx:xx:xx:xx:xx/zz:zz:zz:zz:zz:zz/info
を編集して B-2 項で採取した情報に基づき書き換える。
書き換えが必要なのは以下の部分。
[LocalSignatureKey]
Key=06162636465666768696a6b6c6d6e6f6
Counter=0
Authenticated=false
[LongTermKey]
Key=01112131415161718191a1b1c1d1e1f1
Authenticated=0
EncSize=16
EDiv=41907
Rand=8242240712303841794
[LocalSignatureKey]
のKey
を Windows 側のCSRK
の情報に書き換える。[LongTermKey]
のKey
を Windows 側のLTK
の情報に書き換える。[LongTermKey]
のEDiv
を Windows 側のEDIV
の情報を基に書き換える。
この項は 10 進数に変換して記載する必要がある。[LongTermKey]
のRand
を Windows 側のERand
の情報を基に書き換える。
この項は注意が必要。 Windows の.reg
ファイルの内容を逆順にした 16 進数 (B-2 の例では0x7262524232221202
) を 10 進数に変換して記載する必要があること。 (Little Endian の数値表現…と言えばわかる人はわかるでしょう)
こちらも16進数を大文字に書き換えなくても大丈夫。
このあたりは少し古いが console.systems の情報がわかりやすい。 他にも Arch Linux の BBS や Fedora の Q&A 等が参考になる。
【追記 2024/11/10】
BlueTooth 5.1 の BLE デバイスが増えてきたりしていて上記内容は若干古くなっている。
新しい情報は Arch Linux の Wiki (日本語版) 等を参照されたい。
ちなみに私が最近購入した BLE キーボード (Ewin ミニ キーボード) では以下のように設定してうまく動いている。
[IdentityResolvingKey]
のKey
にIRK
の内容をコピー[LongTermKey]
は前述の通り[PeripheralLongTermKey]
と[SlaveLongTermKey]
に[LongTermKey]
と全く同じ内容をコピー
編集前は[PeripheralLongTermKey]
と[SlaveLongTermKey]
の内容は同じだったが[LongTermKey]
とは異なる値が入っていたので 本当は別の暗号キーが使われるはずなのだろうが、 Windows 側に該当するキーエントリが存在しないのでこうするしかなさそう…
B-4) 再起動して Linux を立ち上げ直す
これで Windows と Linux の両方で同じ BLE デバイスが使えるようになったはず。 PC の機種によっては reboot ではダメで、一旦 shutdown して電源を落として立ち上げ直さないと繋がらないことがある。
« Thunderbird 60 で動くお薦め add-on | トップページ | 互換インクで失敗 »
「パソコン・インターネット」カテゴリの記事
- FreeDOS で SATA 接続 CD/DVD が利用可能に(2023.03.22)
- Debian Linux を Secure Boot 環境で使う(2023.03.06)
- コンテナで GUI / GPU を使う(2022.10.19)
- 仮想環境のイメージ格納場所の移動(2022.09.10)
- PC ケースを変えてみたが…(2021.10.31)
「Linux」カテゴリの記事
- Debian Linux を Secure Boot 環境で使う(2023.03.06)
- コンテナで GUI / GPU を使う(2022.10.19)
- 仮想環境のイメージ格納場所の移動(2022.09.10)
- Kodi の設定(2019.12.02)
- メインマシンを AMD Ryzen 5 2400G に(2019.06.24)
「Windows」カテゴリの記事
- 会社のメール環境が Outlook 限定に…(2019.06.09)
- Windows と Linux のデュアルブート環境で Bluetooth デバイスを共用する(2018.09.27)
- SSD への Windows 10 インストールでハマる(2017.03.01)
- FMV Lifebook TH40/D に Windows 10 をクリーンインストール(2016.06.29)
コメント