1台のBluetoothマウスをマルチブート環境で使う方法

# はじめに
私は所有するPCをすべてWindowsとUbuntuのデュアルブートにしています。

Unifyingレシーバーのような、専用のUSBドングルであれば問題ありませんが、
Bluetoothマウスの場合、それぞれのOSで毎回ペアリング設定を行う必要があり、
非常に面倒です。

そこで、1台のBluetoothマウスを再ペアリングしなくても、それぞれのOSで使用できるようにするための方法を紹介します。
これに関して説明してくださっている記事はいくつかあるのですが、私の環境では細かなところで詰まったため、補足説明を加えて説明していきます。

# 環境
- PC
    - Microsoft Surface Book 2 15''
        - CPU : Core i7 8650U
        - RAM : 16 GB
        - OS : Windows 10 Pro ver.1909 / Ubuntu 20.04 LTS
    - Lenovo ThinkPad T14 Gen1 AMD
        - CPU : Ryzen 7 Pro 4750U
        - RAM : 48 GB
        - OS : Windows 10 Pro ver.1909 / Ubuntu 20.04 LTS
- マウス
    - Logicool MX Anywhere 2S
        - このマウスは3台を切り替えて使えるタイプですが、1台目をSurfaceのWindows&Ubuntuに、2台目をThinkPadのWindows&Ubuntuに、3台目をUnifyingレシーバーに、それぞれペアリングしました。

# 手順
## 【Ubuntu側】マウスをペアリングする
これは普通の手順で行います

## 【Windows側】マウスペアリングする
これも普通の手順で行います

## 【Windows側】でペアリング情報を取得
### 事前準備
その際に[PSTools](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)という物が必要なため、ダウンロードし、展開しておきます。

### レジストリから情報を取得
PowerShellを管理者権限で起動し、下記コマンドを実行します。

```
cd <psexec.exeがあるフォルダ>
```

```
./psexec.exe -s -i regedit /e C:\mouse.txt HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys
```

これにより、C:直下に`mouse.txt`という、ペアリング情報が記録されたtxtファイルが生成されるので、Ubuntu側で開ける場所に保存します。

この後再起動してUbuntuに切り替える際、**必ずマウスの電源を切ってください**。そうしないと、私の環境ではWindows側で使えなくなり、最初からやり直しになりました。

## 【Ubuntu側】ペアリング情報を編集
### MACアドレスを編集
下記コマンドで、`/var/lib/blutooth/`を管理者権限で開く。

```
sudo nautilus /var/lib/blutooth/
```

`/var/lib/bluetooth/XX:XX:XX:XX:XX:XX/YY:YY:YY:YY:YY:YY`というフォルダ構成になっていると思います。このうち、`YY:YY:YY:YY:YY:YY`を`HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\XXXXXXXXXXXX\YYYYYYYYYYYY`の`YYYYYYYYYYYY`と同じになるよう、フォルダ名を編集します。

### ペアリング情報の編集
先程のフォルダの`info`ファイルをテキストエディタで開きます。
下記の対応になるよう、値をコピペしていきます。
ただし、先程Windows側で保存したデータはUTF-16のため、開いたときは文字化けしている場合があります。その場合は、文字コードをUTF-16に変更して再度開き直してください。

| Windowsでの名前 | Ubuntuでの名前        | 備考                                                         |
| --------------- | --------------------- | ------------------------------------------------------------ |
| LTK             | LongTermKey           |                                                              |
| EDIV            | EDiv                  | 16進数→10進数へ変換してから貼り付けます                      |
| CSRK            | LocalSignatureKey     |                                                              |
| IRK             | IdentitiyResolvingKey |                                                              |
| Rand            | ERand                 | *エディアン変換*をしてから16進数→10進数へ変換し、貼り付けます。(私はここでかなりハマりました。) |

#### 16進数→10進数への変換
私は、[2進数、8進数、10進数、16進数相互変換ツール](https://hogehoge.tk/tool/number.html)を使いました。

#### エディアン変換とは
要するに、Windowsでの表記と、Ubuntuでの表記で順番が違うため、順番を逆にする必要があるらしいです。

例えば、Windows側で`01,02,03,04,05,06,0a,0b`となっていたら、まずはエディアン変換をして`0b,0a,06,05,04,03,02,01`としてから、これを10進数に変換します。

## 電源を切り→電源を入れる（再起動は☓）
設定を反映させるために一度電源を落とすのですが、私の環境では再起動だとだめでした。そのため、電源を一旦切ってから再度電源を入れ、Ubuntu・Windowsそれぞれで使えるか確認してください。

# 参考にしたサイト
- [デュアルブート環境で、Bluetooth Low Energy (LE) マウスを快適に使う](https://thewayout.hatenablog.com/entry/2018/09/24/205134)
- [Windows と Linux のデュアルブート環境で Bluetooth デバイスを共用する](http://aimingoff.way-nifty.com/blog/2018/09/windows-linux-b.html)