通常、BIOSやFileVaultのロック解除画面では、Bluetooth接続されたキーボードは使用できません。

これを回避し、HHKBでFileVaultのロック解除を行う方法を探していたところ、HID Proxyなる機能にたどり着きました。

この記事では、BIOSやFileVaultのパスワード入力画面で、Bluetooth接続のキーボードを使用する方法を説明しています。

動作原理

Raspberry Pi Zero WはBluetooth経由でキーボードの入力を受け取ります。
そしてRaspberry Pi Zero Wは仮想キーボードとして動作し、USB経由で入力をコンピュータに送信します。

こちらの記事で紹介されているように、HID Proxyに対応したドングルのみでも可能な場合がありますが、HHKBとは相性が悪いのか、私の環境では動作しませんでした。Raspberry Pi Zero Wもトータルコストはそんなに変わらないので、個人的にはこの記事の方法をおすすめします。

必要デバイス

  • Raspberry Pi Zero W
  • Raspberry Piとパソコンを接続するためのUSBケーブル

手順

1. 必要とされるオプションを追記します

echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
echo "dwc2" | sudo tee -a /etc/modules
echo "libcomposite" | sudo tee -a /etc/modules

2. Bluetooth接続のキーボードと、Raspberry Pi Zero Wを接続します。

3. Quimbyと呼ばれるソフトウェアをリポジトリからクローン、インストールします。

git clone https://gitlab.com/dcro/quimby.git
cd quimby
sudo apt install python3-evdev
sudo cp quimby-* /usr/local/bin/
sudo cp udev/quimby.rules /etc/udev/rules.d/
sudo cp systemd/system/quimby.service /usr/lib/systemd/system/

4. Raspberry Pi Zero Wを再起動します。

sudo reboot

私のキーボード(HHKB)は、入力デバイスが2つとして認識されており、”/dev/input/event0 “が共通のキー入力で、”/dev/input/event1 “がメディア制御などのための特殊なキー入力でした。
AppleのMagic Keyboard 2の場合は入力デバイスが1つの扱いだったので、HHKB特有の仕様なのかもしれません。

そこで、/usr/lib/systemd/system/quimby.serviceのExecStartの引数の-iオプションに”/dev/input/event1 “を追加しました。

[Unit]
Description=Quimby Input Forwarder
Requires=bluetooth.service
[Service]
Type=simple
ExecStartPre=/usr/local/bin/quimby-setup quimby
ExecStart=/usr/local/bin/quimby-relay -i /dev/input/event0 -i /dev/input/event1 -k /dev/hidg0 -c /dev/hidg1
ExecStop=/usr/local/bin/quimby-cleanup quimby

参照元

https://mlug-au.org/lib/exe/fetch.php?media=workshops:quimby_a_bluetooth-usb_hid_proxy.pdf

https://gitlab.com/dcro/quimby