昔から愛用してるBluetoothキーボードがあるのだけど、自作PCにしてからUEFIを操作することが増えて、その度に有線キーボードに変えるのが手間だった。
Logicoolとかが出してるBluetooth以外の無線キーボードに乗り換えることも考えたけど、UEFI操作以外は特段困ってないし、買い替えせずになんかいい解決策ないかなあと思っていたところ、以下の記事に出会った。

で、メルカリでラズパイの中古品ないかなあとウォッチしてたら2,000円くらいで売られてるのを見つけて、ちょうどメルカリのポイントも同じくらい余ってたので、買って実際に試してみたというわけ。
ちなみに今回の環境はこんな感じ。
- ラズパイ:Raspberry Pi Zero WH (OS 10.7)
- キーボード:FILCO Majestouch MINILA Air (初代)
- 母艦PC:Windows 10 Pro
ラズパイの初期設定
本題に入る前に、まずはラズパイの初期設定をやっていく。これが地味にめんどい。
基本的には以下の記事に書かれていることを上から行っていく。ただしいくつか変えた箇所とか詰まった箇所があるので後述する。

OSの選択
記事ではLITEを選択しているが、必要なソフトウェアがなかったりしたらダルいのでFULLを選択した。実際に動かして数週間経つけど、今のところ動作が重いとか本体が熱いとかいった問題はない。
ドライバの設定
母艦のWindows側でラズパイ用のドライバをインストールするのだけど、リンク先が若干怪しい。いつ削除されてもいいように、正規の(?)Microsoftのダウンロード先をメモしておく。
ドライバ名は「Acer Incorporated. – Other hardware – USB Ethernet/RNDIS Gadget」。
ネットワーク共有のエラー
母艦のWindows側でラズパイのネットワークを共有するとき、謎のNULLエラーが発生して共有できず困った。けど、以下のコメント欄を参考にタスクマネージャからICSサービスを見つけて再起動したら解消した。
ここ以外に有益な情報がないからめちゃくちゃ助かった。
Wi-Fi設定後のネットワーク共有無効化
インターネット接続方法について、ラズパイのWi-Fiと母艦(Windows)経由の2つあっても片方は使わないので、母艦経由のほうを無効化した。結局、上記でエラー対応したのに無意味になった。
ついでに、Wi-FiのIPアドレスを固定化した。
$ sudo nano /etc/dhcpcd.conf
//以下の行を追加
interface wlan0
static ip_address=192.168.0.105/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8
event2usbhid設定
ここからが本題。基本的には配布元のサイトにある手順のとおりだけど、いくつか詰まった箇所があるので手順を全て載せる。
GitHubから資材のダウンロード
配布元にはない手順だけどここはまあ普通。
$ cd /opt $ sudo wget --no-check-certificate https://github.com/moguno/event2usbhid/tarball/master $ sudo tar xvf master $ sudo mv moguno-event2usbhid-43eed1e event2usbhid
serviceファイルのインストール
配布元の手順どおり。
$ sudo cp -p /opt/event2usbhid/misc/*.service /etc/systemd/system/
$ sudo systemctl enable mkusbhid
$ sudo systemctl enable event2usbhid_keyboard
$ sudo systemctl enable event2usbhid_mouse
Bluetoothキーボードをペアリング
今回接続するFILCOのキーボードをペアリング設定する。ちなみにBluetoothctlコマンドの使い方はこのサイトを参考にした。
$ bluetoothctl [bluetooth]# scan on Device 00:18:00:3B:41:8C FILCO Bluetooth Keyboard … [bluetooth]# pair 00:18:00:3B:41:8C [bluetooth]# connect 00:18:00:3B:41:8C [bluetooth]# trust 00:18:00:3B:41:8C [bluetooth]# scan off [bluetooth]# quit
udevルールの設定
配布元の手順どおり。キーボード名の設定をFILCO~にする。
$ sudo nano /opt/event2usbhid/misc/99-bluetooth.rules //以下に変更 KERNEL=="event*", ATTRS{name}=="FILCO Bluetooth Keyboard", TAG+="systemd", SYMLINK+="input/keyboard", ENV{SYSTEMD_ALIAS}="/sys/class/input/keyboard" //変更を反映 $ sudo cp -p /opt/event2usbhid/misc/99-bluetooth.rules /etc/udev/rules.d/
【重要】モジュール読み込み設定変更
配布元のサイトに一切書かれてないけど、これをやってないと全く動かないという重要な設定。自分はこれに気付かずに一週間くらい四苦八苦した。
$ sudo nano /boot/cmdline.txt //以下の太字箇所を変更する … rootwait modules-load=dwc2,g_hid …
再起動
設定反映のために再起動する。
$ sudo reboot
起動してきたら母艦のWindowsにBluetoothキーボードで入力できるはず。お疲れさまでした。
使ってみた雑感など
反応速度は普段使いであれば気にならないレベル。体感では、母艦PCのBluetoothに接続してた頃と何ら変わらない。ただ、電源節約モード?スリープモード?からの復帰時は、若干時間がかかる。
あと、手元のLogicoolのBluetoothマウスはペアリングまではうまくいったけど、母艦PCでは認識しなかった。キーボードと2台同時には接続不可とか、制約があるのかな?まあ、今回の目的はキーボードのみで特に困らないから無視した。
その他設定もろもろ
以下は本筋とは直接関係ないラズパイ関連の設定について。別の記事にまとめるのも面倒なのでついでに残しておく。
ユーザ名とパスワードの変更
以下の記事を参考にした。

ただ、新規ユーザでBluetoothコントローラを起動できなかったので、以下のコマンドでBluetoothのグループに所属する。
$ sudo usermod -a -G bluetooth {ユーザ名}
IPv6の無効化
IPv4しか使わないので無効化する。
$ sudo nano /etc/sysctl.conf //以下の行を追加する net.ipv6.conf.all.disable_ipv6 = 1 //以下のコマンドで反映 $ sudo sysctl -p
MicroSDのRAM化
ラズパイのSDカードは壊れやすいらしいので、以下の記事を参考にファイルシステムをリードオンリーにする。
肝は、途中で実行するスクリプトが自分の環境では動作しなかったので、冒頭のKERNELVER変数を使った条件文を全部コメントアウトして実行した点。これでいいのかは正直わからん。
ラズパイのバックアップ/リストア
以下の記事を参考に「Win32 Disk Imager」を使用した。たまに途中で失敗するけど、大抵は単純リトライでなんとかなる。

USBドングル
今回、ラズパイ本体から直接USB接続できる拡張ボードも買った。ディスプレイ裏に接続してる。
コード不要で扱いやすいけど、思いのほか光ってまぶしい。
一応参考までに公式サイトのWikiを貼っておく。