2025年12月7日日曜日

windowsとlinuxのデュアルブートでbluetoothを共用したい

windowsでbluetoothマウスをペアリングして、デュアルブートのlinuxに切り替えるとペアリングしなおさないと使えない。なんとなく、ハードウェア的にはペアリング状態が記録されてそうだが、OS側の情報がlinuxとwindowsで別々になっていて使えないっぽい感じがある。

デュアルブートでOSを切り替えるたびにペアリングしなおす必要があり、地味にめんどくさい。OSの情報だけの問題なら何とかなりそうなので検索した。 

見つかったサイトは以下。 

https://blanktar.jp/blog/2020/10/dual-boot-bluetooth 

windowsのレジストリにある情報で、linuxの/var/lib/bluetoothにおいてある情報を更新するというやり方のようだ。

後半にはchntpwというwindowsのレジストリをいじるコマンドで情報をとってくるやり方が書いてある。

なんかここまでくると、スクリプト書いて自動化できそうな感じがする。書いてみようか?と思ったが、こんな需要がありそうなものは既に誰かが作っているんじゃないか? 

と思って調べてみたらあった。

https://github.com/x2es/bt-dualboot

上記chntpwとやらを使ってwindows側のレジストリをいじるという中々に危険なプログラムっぽい。 githubページの後半には似たようなソフトの一覧もあって、このプログラムが優れている点を挙げている。自信があるんだろう。

まあ、バックアップもとるみたいだし、ありがたく使わせていただくことにした。

インストール

pipで入れるらしいが、aptで入れたpipだとsystem-wideにプログラムを入れられないっぽい。(なぜか?sudoで入れる必要があるからか?)

一応apt search bt-dualbootとやってみたがさすがに公式には入ってなさそうだ。

仕方ないので、エラーメッセージで表示された通りvenvを入れてみる。python3-fullが必要らしい。chntpwも要るだろう。

sudo apt install chntpw
sudo apt install python3-full

ユーザでvenvを作る。なんとなく.venvに入れてみる。

python3 -m venv .venv

sudo su -でrootになってbt-dualbootを入れる。
(root権限が要るのは/var/lib/bluetoothが一般ユーザで読めないからだろう)

. .venv/bin/activate
pip install bt-dualboot 

使ってみる

とりあえず.venvのbinを直接sudoで実行すればいいようだ。

windows側のレジストリをいじるだけあって、前準備としてwindowsファイルシステムをマウントしている必要がある。ubuntuなら、クリックするだけでマウントはされる。 

windowsのファイルシステムを認識しているか?コマンドを打ってみる。 

sudo .venv/bin/bt-dualboot --list-win-mounts

Windows locations:
==================
 /media/user/Windows 

大丈夫そうだ。

次に、プログラムが認識しているbluetoothの一覧を表示してみる。
1つ目のELECOM TK-FBP102は一度コマンドを実行して同期したもの。2つ目のELECOM IR Optical Mouseはlinuxでペアリングしなおしたもの。2個目のマウスはNeeds syncとなっている。

sudo .venv/bin/bt-dualboot -l

Works both in Linux and Windows
===============================
 [DC:2C:26:19:86:45] ELECOM TK-FBP102

Needs sync
==========

Following devices available for sync with `--sync-all` or `--sync MAC` options.

 [DC:2C:26:A7:D9:F0] ELECOM IR Optical Mouse

コマンドを実行してみる。-b(backup)か-n(no-backup)をつけないと実行できないらしい。一応-bにしておく。

sudo .venv/bin/bt-dualboot --sync-all -b
> BACKUP /media/user/Windows/Windows/System32/config/SYSTEM to /var/backup/bt-dualboot/SYSTEM-2025-12-07--12-44-28

Syncing...
==========
 [DC:2C:26:A7:D9:F0] ELECOM IR Optical Mouse
...done

できたようだ。もう一度見てみる。 

sudo .venv/bin/bt-dualboot -l

Works both in Linux and Windows
===============================
 [DC:2C:26:19:86:45] ELECOM TK-FBP102
 [DC:2C:26:A7:D9:F0] ELECOM IR Optical Mouse

Needs sync
==========

No device found ready to sync.
Try pair devices first.

sync必要なしとなっている。
再起動してwindowsにしてもマウスとキーボードが使えた。
Tested with Windows 10と書いてあったので心配だったが、Windows 11でも大丈夫だったようだ。

これで一つ快適になった。 

おまけ(時刻同期) 

以下ついでに、windowsとlinuxで時間が数時間ずれるやつ。linuxはUTC、windowsはローカルタイムでrtcを使うのでずれる。linuxをローカルタイムにすればいい。 

https://qiita.com/Juice/items/63279e93f818ba74312d

sudo timedatectl set-local-rtc 1

しかし、PCを海外に持っていくとき、windowsはいちいちrtcいじるのか。サマータイムでも余計なことをして1時間ずらしたりするんだよな。マイクロソフト馬鹿なんじゃねーの?