eucaly が 2024年10月25日19時10分30秒 に編集
初版
タイトルの変更
ラズパイのキオスク化 ~ IoT案件だと余りがちなHDMIを使って
タグの変更
RaspberryPi
デジタルサイネージ
メイン画像の変更
記事種類の変更
セットアップや使用方法
ライセンスの変更
(MIT) The MIT License
本文の変更
こんにちは、ゆうかりです。 今回は、ウチのラズパイさんのIoTな使い方的なものを紹介します。 なお、センサーやIR制御などは、ウチでは、ESP32ベースで組んじゃってるので、IoTハードウェア的なお話ではありません。 「データ表示とかどうしましょう」案件です。 # Raspberry Piと映像 ラズパイさんは、映像出力を持っています。 特に最近のは、複数画面に対応してたり、4Kに対応してたりと、割とリッチです。 が、センサー用途などに使われる場合、往々にして映像出力は使われません。 割と勿体ない気がするので、リッチなデータモニターとして使えるキッティングを紹介したいと思います。 # 全画面Webブラウザ ・・・を、割と最低限な構成で。 「電源を入れたら、特定のサイトを全画面に表示する」系の自動実行が、ラズパイには合っていると思います。 なので、そんな風にキッティングしていきましょうか。 # キッティング ## 前提条件 ・Raspberry Pi OS LiteをMicroSDカードに展開してあること ・管理者ユーザーを設定、ネットワークに接続し、SSH接続を有効化、SSHで接続していること ## 作戦 まあ、ざっくり以下な感じです。 ・自動ログイン用ユーザーを作成、設定 ・X11を、全画面表示専用なウインドウマネージャで起動 ・chromiumを自動起動に最適化して実行 ## キッティングスクリプト コイツをsudo suした状態でSSH端末から流し込んであげれば、次回起動時に「elchika.com」が表示されるはずっ!。 ```sh:kitting.sh ## install package apt update -y apt upgrade -y apt install -y xserver-xorg xinit matchbox-window-manager x11-apps x11-xserver-utils xfonts-75dpi xterm unclutter apt install -y chromium ## setup user adduser player --disabled-password << EOF Y EOF ## set monitor config cat <<EOF > /usr/share/X11/xorg.conf.d/10-monitor.conf Section "ServerFlags" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0" Option "BlankTime" "0" EndSection EOF ## auto login mkdir /etc/systemd/system/getty@tty1.service.d cat <<EOF > /etc/systemd/system/getty@tty1.service.d/override.conf [Service] ExecStart= ExecStart=-/sbin/agetty --autologin player --noclear %I 38400 linux EOF systemctl daemon-reload ## auto start x window cp -f /etc/skel/.profile /home/player/.profile cat <<EOF >> /home/player/.profile if [ -z "\$DISPLAY" ] && [ \$(tty) = /dev/tty1 ]; then exec startx -- -nocursor fi EOF chown player:player /home/player/.profile chmod 644 /home/player/.profile ## auto start player cat <<EOF > /home/player/.xsessionrc #!/bin/sh /usr/bin/xsetroot -solid grey10 & /bin/sleep 2 /home/player/startPlayer.sh & EOF chown player:player /home/player/.xsessionrc chmod 755 /home/player/.xsessionrc cat <<EOF > /home/player/.xinitrc #!/bin/sh sh ./.xsessionrc matchbox-window-manager EOF chown player:player /home/player/.xinitrc chmod 664 /home/player/.xinitrc ## start chromium cat <<EOF > /home/player/startPlayer.sh #!/bin/sh chromecount=`ps -ef |grep chromium |grep -v grep |wc -l ` if [ $chromecount = 0 ] ; then if [ -e /home/player/chromeuserdata/Local\ State ]; then if grep -q "\"exited_cleanly\":true" /home/player/chromeuserdata/Local\ State; then : else rm -rf /home/player/chromeuserdata fi else rm -rf /home/player/chromeuserdata fi chromium --window-size=1920,1080 --window-pos=0,0 --enable-frame-rate-limit=60 --disable-gpu-vsync --disable-dev-tools --no-first-run --no-default-browser-check --allow-running-insecure-content --disable-crash-reporter --disable-software-rasterizer --disable-extension --disable-background-mode --disable-web-security --user-data-dir="/home/player/chromeuserdata" --unlimited-quota-for-files --unlimited-storage --disable-permissions-api --noerrdialogs --allow-file-access-from-files --disable-popup-blocking --disable-features=PreloadMediaEngagementData,AutoplayIgnoreWebAudio,MediaEngagementBypassAutoplayPolicies --autoplay-policy=no-user-gesture-required --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT' --kiosk --app=https://www.elchika.com/ --enable-logging=stderr --v=0 &>> /dev/null fi /bin/sleep 30 ./startPlayer.sh & EOF chown player:player /home/player/startPlayer.sh chmod 755 /home/player/startPlayer.sh ``` ## キッティングスクリプトの簡単な説明 ### install package X11、及び「matchbox-window-manager」という全画面専用なウインドウマネージャーをインストールしてます。 あとchromium。 ### setup user 「player」という名前のユーザーを、自動起動用に作成しています。 ### set monitor config ラズパイ標準だと、10分くらいで画面がスリープしてしまいます。 そんなスリープ設定を無効化するおまじない。 ### auto login systemdでtty1をフックし、自動的にログインする感じ。 ### auto start x window ユーザーがログインした際、tty1からの場合は、自動的にX11を起動せよ、て感じの仕込みです。 ### auto start player ウインドウマネージャー設定、及びchromium起動用スクリプトの呼び出し回りです。 ### start chromium chromiumを起動するためのスクリプトです。 なんか事故ってchromiumが落ちた場合、自動的にchromiumを再起動します。 また、chromiumのプロファイルが壊れてそうな場合は初期化します。 chromiumの起動オプションは、ぐぐって頂ければ分かるかと。 ユーザー確認系や音声設定、初期設定、開発ツールなど、要らなそうな要素を飛ばす設定を入れています。 「--app=https://www.elchika.com/」の部分を書き換えると、任意のWebサイトを表示できます。 例えば、、、同じラズパイにセットアップしたapacheのサイトを「--app=http://localhost/」で呼んだり、ね!。 また、/dev/nullに捨てている出力は、ログファイルなどに書き換えることで、chromiumのコンソール出力をロギングすることができます。 デバッグなどにどうぞ!。 # 作業場での使い方 例えば、、、 ・ESP32+IRレシーバーでリモコンコードを受け取る ・ラズパイへJSONを送信 ・ラズパイは貰ったJSONをapache経由で公開 ・chromium上でajax非同期でJSON読み込み、処理実行 を実装することで、「リモコン対応Web画面」を作ったりしています。 また、HEMS画面を拡大してテレビに表示とか、やらかしたりしてたり・・・。 ![キャプションを入力できます](https://camo.elchika.com/0c53ae7867049bbe93b23c0f8e9c18ebf8218070/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666637633237372d646465642d343333632d393736342d6162303436346433326631302f64653662323464392d353766352d343831622d626535652d646439306137646231663733/) これは元々720P固定なパナソニックのaiseg画面を拡大し、Raspberry pi 5を使ってテレビに表示している、やーつです。 # たのしんでくださいな ・・・まあこれ、普通にデジタルサイネージなプレイヤーとして使える設定だったりします・・・。 もし余ってるモニターがあって、それがセンサー扱いのラズパイの近くにあるなら、試してみてくださいなっ!。 以上です。