見出し画像

【ペアリング不要】マウス・キーボードのBluetooth→USB変換ドングル作成

去年、在宅勤務用にHHKBキーボードのTyps-Sを購入した。Type-SはUSBとBluetoothのどちらでも接続できるハイブリッドなキーボードだ。打鍵感が至高であることは言うまでもない。通常はHHKBをBluetoothでPCと接続をしているが、やはり時折接続先のPCを変更したい場合がある。Type-Sにはペアリング先を4つまで記憶して切り替える機能がついているため、通常はこれを利用する。しかし、切り替えには「Fn + Ctrl + 1〜4(接続先デバイス番号)」と入力せねばならず少々めんどくさい。また、Bluetooth接続切り替えには少々時間がかかる。普段使っているBluetoothマウスは以前Raspberry Pi Zeroで作ったBluetoothマウス用USBドングルを用いて、USB切り替え機器のボタンのワンプッシュの操作で済ませていたため、これをBluetoothキーボードも同時に接続可能なUSBドングルに改造した。今回作ったBT→USB変換ドングルの構成は以下。

画像1

Raspberry Pi ZeroにBluetoothマウスとキーボードを接続しておき、さらにUSBガジェットポートを通してPCと接続する。PCからするとRaspberry Pi ZeroはUSBマウス・キーボードのマルチHIDデバイスに見えており、Raspberry Pi ZeroはBluetoothマウスとキーボードからくるイベントをUSBに変換してPCに送る。

インストール

以下からソースコードをダウンロードし、インストール後、Raspberry Pi Zeroをリブートする。

$ git clone https://github.com/K-TEE-R/hid_bridge.git
$ cd hid_bridge
$ sudo ./install.sh
$ sudo reboot

設定

1.ペアリング

毎度ながら、ペアリング不要といいつつ、Raspberry Pi ZeroとBluetoothマウス自体は一度だけペアリングする必要がある。sshでRaspberry Pi Zeroにログイン後、以下の手順でBluetoothマウスとBluetoothキーボードのペアリングを実施。

$ sudo bluetoothctl

# agent on
# default-agent
# scan on
# pair <BluetoothマウスのMACアドレス>
# connect <BluetoothマウスのMACアドレス>
# trust <BluetoothマウスのMACアドレス>

2.デバイス登録

前回はデバイスパスを指定して、Bluetoothマウスのイベントを取得するようにしたが、デバイスパスが変動することも考慮して、今回はデバイス名で指定するように変更した。まずhexdumpでBluetoothマウス・キーボードを操作したときに最も反応するデバイスパスをメモしておく。

$ hexdump /dev/input/event0 # キーボード操作時に一番反応あり
$ hexdump /dev/input/event1
$ hexdump /dev/input/event2
$ hexdump /dev/input/event3 # マウス操作時に一番反応あり
$ hexdump /dev/input/event4
$ hexdump /dev/input/event5

次に、/proc/bus/input/devicesを調べて、それぞれのデバイスパスに対応するデバイス名をメモする。

$ cat /proc/bus/input/devices
I: Bus=0005 Vendor=04fe Product=0021 Version=0001
N: Name="HHKB-Hybrid_3 Keyboard"  <---★★これがキーボードデバイス名
P: Phys=B8:27:EB:FF:64:5B
S: Sysfs=/devices/virtual/misc/uhid/0005:04FE:0021.0001/input/input0
U: Uniq=E8:82:BA:81:A6:99
H: Handlers=sysrq kbd leds event0 <---★★キーボード操作時に反応があったデバイス(event0)
B: PROP=0
B: EV=120013
B: KEY=10000 7 ff9f207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=1f

---- 略 ----

I: Bus=0005 Vendor=046d Product=b010 Version=1002
N: Name="Bluetooth Mouse M557 Mouse" <---★★これがマウスのデバイス名
P: Phys=b8:27:eb:ff:64:5b
S: Sysfs=/devices/platform/soc/20201000.serial/tty/ttyAMA0/hci0/hci0:11/0005:046D:B010.0002/input/input2
U: Uniq=34:88:5d:ab:4c:c7
H: Handlers=mouse0 event2 <---★★キーボード操作時に反応があったデバイス(event2)
B: PROP=0
B: EV=17
B: KEY=ff0000 0 0 0 0 0 0 0 0
B: REL=1943
B: MSC=10

---- 略 ----

上記でメモしたデバイス名(今回の例ではHHKB-Hybrid_3 Keyboard、Bluetooth Mouse M557 Mouse)をソースコードのdevice_config.pyに追記する。

[device_config.py]

ALLOWED_MOUSE_DEVS = [
   'Bluetooth Mouse M557 Mouse',
   ★必要に応じてここに自身が使っているBluetoothマウスのデバイス名を追記
]

ALLOWED_KEYBOARD_DEVS = [
   'HHKB-Hybrid_3 Keyboard',
   ★必要に応じてここに自身が使っているBluetoothキーボードのデバイス名を追記
]

再度./install.shを実行してインストール後、再起動。

$ sudo ./install.sh
$ sudo reboot

ここまでくれば、Raspberry Pi ZeroのUSB接続先PCを切り替えるだけで、新たなペアリング操作をすることなくBluetoothマウス・キーボードが利用できるようになる。

試したときの様子は以下


この記事が気に入ったらサポートをしてみませんか?