もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

デスクトップPCのキーボード・マウスをBluetoothのにしたら辛いことが多すぎたのでラズパイでBT→USBコンバータを作った

これまでのあらすじ

引っ越しを機にPCデスクをお洒落にしたい!
お洒落 is ケーブルレス!これ正義!!!

そんな訳でキーボードとマウスをBluetooth接続にした俺。もぐの。
その直後から数々の不幸が俺に降りかかってきたんだ!

f:id:moguno:20201122215238j:plain

あれぇ?BTスピーカーの調子が悪いなぁ。一回Bluetoothオフにしてみるか。

マウス・キーボードが使用不可に。USBトラックポイントキーボードをジャンク箱から探してきてなんとか復旧。

あ、UEFI触りたいな。

操作不可。さっき仕舞ったUSBトラックポイントキーボードをまた引っ張り出してきてなんとか設定変更。

よーし!パパ最新のLinuxで遊んじゃうよー!

インストーラが操作不可。またUSBトラックポイントキーボードを引っ張り出してきて事なき。

結論

デスクトップPCにBluetoothキーボード・マウスは不適

ノートPCなら内蔵のキーボード&ポインティングデバイスがあるのでどうとでもなるんですが、代替手段のないデスクトップPCでは即GAME OVERなパターンが「KANOSO*1」なみに存在します。
長男だけどくじけたよ。ネ右一くん。

しかしながらBluetoothキーボードはドングル式に比べて種類が豊富

HHKBとかマジェスタッチとか、高級キーボードの有名どころは無線にBluetoothを採用してることが多い気がします。
なかなか捨てがたいです。

USBトラックポイントキーボードはエマージェンシー用途にマジ優秀なのでみんな持ってた方がいい

キーボードとポインティングデバイスがUSBケーブル1本でつなげて便利なのと、薄いし軽いから何かと取り回しがいいのです。必携。

f:id:moguno:20201123123024j:plain


辛すぎたのでRaspberry PI Zero WでBluetooth → USBコンバータを作った

github.com

要はWindowsBluetoothを管理してるから悲しい事件が起きるので、それをラズパイにやらせてPCからはただのUSBキーボード・マウスに見れるようにすればいいって発想です。

f:id:moguno:20201123122602j:plain

ラズパイZero WはLinuxのUSB Gadget機能でUSBデバイスとして振舞うことができます。また、Zero WはBluetoothを内蔵してます。と言うわけでこの用途にジャストミートなんですね。

使い方

リポジトリを/opt/event2usbhidに展開する。

同梱してる各種スクリプトは/opt/event2usbhid決め打ちにしてるのでそこに展開してください。

systemdのserviceファイルをインストールする。

cp -p /opt/event2usbhid/misc/*.service /etc/systemd/system/

systemctl enable mkusbhid
systemctl enable event2usbhid_keyboard
systemctl enable event2usbhid_mouse

Bluetoothキーボード・マウスをペアリングする。

trustで自動接続できるようにするのがポイントです。

bluetoothctl

[bluetooth]# devices
Device 7C:1E:52:B0:87:49 Microsoft Wedge Mobile Keyboard
・・・
[bluetooth]# pair 7C:1E:52:B0:87:49
[bluetooth]# connect 7C:1E:52:B0:87:49
[bluetooth]# trust 7C:1E:52:B0:87:49

udevルールの設定

/opt/event2usbhid/misc/99-bluetooth.rulesのATTRS{name}に先ほどペアリングしたキーボード・マウスの名前を登録した上でインストールします。

cat /opt/event2usbhid/misc/99-bluetooth.rules
KERNEL=="event*", ATTRS{name}=="Microsoft Wedge Mobile Keyboard", TAG+="systemd", SYMLINK+="input/keyboard", ENV{SYSTEMD_ALIAS}="/sys/class/input/keyboard"

KERNEL=="event*", ATTRS{name}=="Microsoft Sculpt Comfort Mouse", TAG+="systemd", SYMLINK+="input/mouse", ENV{SYSTEMD_ALIAS}="/sys/class/input/mouse"

cp -p /opt/event2usbhid/misc/99-bluetooth.rules /etc/udev/rules.d/

リブートする

これでもう泣かなくてもよくなります。きっと。

*1:20年くらいコミケに行ってる先輩に聞いてみよう!