Raspberry Pi Zero W/WHをBluetoothキーボードの受信機にする

昔から愛用してるBluetoothキーボードがあるのだけど、自作PCにしてからUEFIを操作することが増えて、その度に有線キーボードに変えるのが手間だった。

Logicoolとかが出してるBluetooth以外の無線キーボードに乗り換えることも考えたけど、UEFI操作以外は特段困ってないし、買い替えせずになんかいい解決策ないかなあと思っていたところ、以下の記事に出会った。

http://moguno.hatenablog.jp/entry/2020/11/22/220450

で、メルカリでラズパイの中古品ないかなあとウォッチしてたら2,000円くらいで売られてるのを見つけて、ちょうどメルカリのポイントも同じくらい余ってたので、買って実際に試してみたというわけ。

ちなみに今回の環境はこんな感じ。

  • ラズパイ:Raspberry Pi Zero WH (OS 10.7)
  • キーボード:FILCO Majestouch MINILA Air (初代)
  • 母艦PC:Windows 10 Pro

ラズパイの初期設定

本題に入る前に、まずはラズパイの初期設定をやっていく。これが地味にめんどい。

基本的には以下の記事に書かれていることを上から行っていく。ただしいくつか変えた箇所とか詰まった箇所があるので後述する。

https://qiita.com/Liesegang/items/dcdc669f80d1bf721c21

OSの選択

記事ではLITEを選択しているが、必要なソフトウェアがなかったりしたらダルいのでFULLを選択した。実際に動かして数週間経つけど、今のところ動作が重いとか本体が熱いとかいった問題はない。

ドライバの設定

母艦のWindows側でラズパイ用のドライバをインストールするのだけど、リンク先が若干怪しい。いつ削除されてもいいように、正規の(?)Microsoftのダウンロード先をメモしておく。

https://www.catalog.update.microsoft.com/Search.aspx?q=USB+RNDIS%20Gadget

ドライバ名は「Acer Incorporated. – Other hardware – USB Ethernet/RNDIS Gadget」。

ネットワーク共有のエラー

母艦のWindows側でラズパイのネットワークを共有するとき、謎のNULLエラーが発生して共有できず困った。けど、以下のコメント欄を参考にタスクマネージャからICSサービスを見つけて再起動したら解消した。

https://answers.microsoft.com/en-us/windows/forum/windows_10-networking-winpc/an-error-occurred-while-internet-connection/59b09f0c-9505-473c-aacc-3ed48a18d280

ここ以外に有益な情報がないからめちゃくちゃ助かった。

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台同時には接続不可とか、制約があるのかな?まあ、今回の目的はキーボードのみで特に困らないから無視した。

その他設定もろもろ

以下は本筋とは直接関係ないラズパイ関連の設定について。別の記事にまとめるのも面倒なのでついでに残しておく。

ユーザ名とパスワードの変更

以下の記事を参考にした。

https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc

ただ、新規ユーザで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カードは壊れやすいらしいので、以下の記事を参考にファイルシステムをリードオンリーにする。

https://github.com/janztec/empc-arpi-linux-readonly

肝は、途中で実行するスクリプトが自分の環境では動作しなかったので、冒頭のKERNELVER変数を使った条件文を全部コメントアウトして実行した点。これでいいのかは正直わからん。

ラズパイのバックアップ/リストア

以下の記事を参考に「Win32 Disk Imager」を使用した。たまに途中で失敗するけど、大抵は単純リトライでなんとかなる。

https://gloria.cool/blog/20200209-raspberrypi-backup/

USBドングル

今回、ラズパイ本体から直接USB接続できる拡張ボードも買った。ディスプレイ裏に接続してる。

コード不要で扱いやすいけど、思いのほか光ってまぶしい。

一応参考までに公式サイトのWikiを貼っておく。

https://wiki.52pi.com/index.php/USB_dongle_for_Raspberry_Pi_Zero/Zero_W_SKU:EP-0097
タイトルとURLをコピーしました