ミルク色の記録

やったこと、やってみたこと

Webプログラマの手持ちスキルを駆使してRaspberry PIに電源OFFボタンをつけた

回路組んで基盤作ったりとかできないので、Raspberry PI用のLCD購入して、UI作って電源OFFボタンをつけた。

UIはLinuxGUIアプリケーションを書く...のは回避して、ブラウザでできるようにして自分の手持ちスキル側に寄せた(Electron使うって手もあったかもだけど)。

使ったLCD

Quimatの3.5インチタッチスクリーン。

仕組み

localhostからのみアクセス可能にしたWebサーバをサービスとして動かしつつ、 GUIでユーザーを自動ログインにしておいて、電源投入されたらブラウザをkioskモードで起動してUI表示する。

UIのPower Offボタンをクリック(タッチ)したらWEB API投げてWebサーバ側でシャットダウンする。

GUI周りの環境構築

Raspberry PIのフォーラムの記事を参考にした。

ウィンドウマネージャはRPDやLXDEではなく一番シンプルなOpenboxを利用した。

Xサーバインストール

まずはフォーラムの記事の「Advanced - Custom Desktop Environment using Openbox WM」に従ってXサーバを推奨インストール無しでインストールする。

$ sudo apt-get install -y --no-install-recommends xserver-xorg

Openboxとlightdm、ブラウザとかのインストール

続いて、Openboxと自動ログインで使用するlightdm、Chromiumブラウザとフォントをインストールする。

lightdmは合わせてaccountsserviceを入れる。これを入れておかないとlightdmがError getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Accounts was not provided by any .service files みたいなエラーを履いたりする。

$ sudo apt-get install -y openbox lightdm accountsservice chromium-browser fonts-noto

自動ログイン後のブラウザのデフォルト起動設定

自動ログインさせるpiユーザーの.config/openbox/autostartを作成し、次の設定を行う。

xset -dpms &
xset s off &
chromium-browser --noerrdialogs --kiosk --incognito --disable-translate --fast --fast-start --disable-infobars --disable-features=TranslateUI --disk-cache-dir=/dev/null --no-first-run --no-default-browser-check --disk-cache-size=0 --media-cache-size=0 --disable-bookmark-reordering --disable-extensions --disable-dev-tools --disable-sync http://localhost:8080/ &

ディスプレイの省電力モードをオフにするためにxset -dpmsスクリーンセーバーをオフにするためにxset s offchromiumkioskモードで起動し、余計なものを色々出さないようにするためにオプションをモリモリつける。

マウスカーソルが表示されないようにする

画面にマウスカーソルが表示されないように、/etc/lightdm/lightdm.confを編集して#xserver-command=Xコメントアウトされている箇所を次のように書き換える。

xserver-command=X -nocursor

自動ログインを有効化

raspi-configで3 Boot Options->B1 Desktop / CLI->B4 Desktop Autologinを設定する。

動作デモ

見づらいGIFになっちゃったけど、こんな感じで動く。Raspberry PI 3 B+を使って、電源投入からブラウザの起動完了まで30秒くらい。

f:id:ushiboy:20190608135913g:plain
動作デモ

まとめ

フロントエンドとかバックエンドとか、諸々のソースコードはこちら。OSのイメージは前に作ったrootfsのReadOnly環境や、extraパーティションを作ったやつにした。今後もっと機能つけて遊んでみるかも。

github.com