Naoki Aoyama
naa0yama's Blog

naa0yama's Blog

Raspberry Pi 4B にキオスクモードにてサイネージにする

Naoki Aoyama's photo
Naoki Aoyama

Published on Jun 13, 2021

2 min read

弊宅では、大量にあるサーバーとネットワーク機器を Zabbix で管理しておりダッシュボードである程度 宅内の状況を確認出来るようにしている。

かなり前に導入したが、 Chromium の自動起動は設定しなかったため設定する事にする

今回は、下記の設定を合わせてした。

  • 自動で Chromium を起動する
  • 15分に一回画面をリロードする
  • マウスカーソルを消す

自動で Chromium を起動する

autostart とやらで昔はできたらしいが今はできないため systemd で起動する

  • --noerrdialogs: エラーダイアログをすべて抑制します。
  • --disable-background-mode: バックグラウンド機能を止める
  • --start-maximized: 起動時に最大化した状態で起動する
  • --app=: app モードにする
  • --kiosk: これを設定すると CPU使用率などが確認できなくなったため外した
  • RuntimeMaxSec= で指定秒数でプロセスが再起動されるので実現できる今回は15分とした

Ref: 起動オプション - Google Chrome まとめWiki

  • /etc/systemd/system/chromium-autorun.service
[Unit]
Description=Chromium Autorun

[Service]
Type=simple
Environment=DISPLAY=:0.0
Environment=XAUTHORITY= ~/.Xauthority
ExecStartPre=rm -rf ~/.config/chromiumu/Singleton*
ExecStart=/usr/bin/chromium-browser \
        --noerrdialogs \
        --disable-background-mode \
        --start-maximized \
        --app=https://google.co.jp/
Restart=always
RuntimeMaxSec=900
User=pi
Group=pi

[Install]
WantedBy=user@.service
systemctl daemon-reload
systemctl start chromium-autorun.service
systemctl enable chromium-autorun.service
systemctl is-enabled chromium-autorun.service

マウスカーソルを消す

unclutter を利用する

sudo apt install unclutter

マウスの動きが2秒間アイドル状態になったらカーソル表示を消す

  • /etc/systemd/system/unclutter.service
[Unit]
Description=unclutter daemon to hide mouse pointer
Requires=lightdm.service
After=lightdm.service

[Service]
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=~/.Xauthority
Type=simple
ExecStart=/usr/bin/unclutter -idle 2 -jitter 3
Restart=always
User=pi
Group=pi

[Install]
WantedBy=mystuff.target
systemctl daemon-reload
systemctl start unclutter.service
systemctl enable unclutter.service
systemctl is-enabled unclutter.service

2021/06/16

リロードのタイミングで画面がちらつくのが気になるので変更

  • /etc/systemd/system/chromium-autorun.service
[Unit]
Description=Chromium Autorun

[Service]
Type=simple
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=~/.Xauthority
ExecStartPre=rm -rf ~/.config/chromiumu/Singleton*
ExecStart=/usr/bin/chromium-browser \
        --noerrdialogs \
        --disable-background-mode \
        --start-maximized \
        --app=https://google.co.jp/
Restart=always
#RuntimeMaxSec=86400
User=pi
Group=pi

[Install]
WantedBy=user@.service
systemctl daemon-reload
systemctl stop chromium-autorun.service
systemctl disable chromium-autorun.service

systemctl start chromium-autorun.service
systemctl enable chromium-autorun.service
systemctl is-enabled chromium-autorun.service

xdotool で F5 するように変更

インストール

apt install xdotool
  • cli でテストしてみる
export DISPLAY=:0.0
WID=$(xdotool search --onlyvisible --class chromium|head -1)
xdotool windowactivate ${WID}
xdotool key ctrl+F5
  • アクティブウィンドウIDを取得する
xdotool getactivewindow
  • ウィンドウ名を取得
xdotool getactivewindow --onlyvisible --class chromium | xargs -L1 xdotool getwindowname
  • /etc/systemd/system/chromium-reload.sh
#!/usr/bin/env bash
set -eu

ACTWIN=$(xdotool getactivewindow | xargs -L1 xdotool getwindowname)

if [[ "${ACTWIN}" == *$1* ]]; then
    #echo 'FOUND!!!'
    xdotool key ctrl+F5
fi
chmod +x /etc/systemd/system/chromium-reload.sh
  • /etc/systemd/system/chromium-reload.service
[Unit]
Description=Scheduled chromium reload

[Service]
Type=simple
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=~/.Xauthority
ExecStart=/etc/systemd/system/chromium-reload.sh "zabbix"
User=pi
Group=pi

[Install]
WantedBy=user@.service
systemctl daemon-reload
systemctl stop chromium-reload.service
systemctl disabled chromium-reload.service

systemctl start chromium-reload.service
systemctl enable chromium-reload.service
  • /etc/systemd/system/chromium-reload.timer
[Unit]
Description=Scheduled chromium reload

[Timer]
Unit=chromium-reload.service
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl stop chromium-reload.timer
systemctl disabled chromium-reload.timer

systemctl start chromium-reload.timer
systemctl enable chromium-reload.timer

timer が稼働するかはここで確認出来る

root@raspberrypi:~# systemctl status chromium-reload.timer
● chromium-reload.timer - Scheduled chromium reload
   Loaded: loaded (/etc/systemd/system/chromium-reload.timer; enabled; vendor preset: enabled)
   Active: active (waiting) since Wed 2021-06-16 22:34:09 JST; 2min 19s ago
  Trigger: Wed 2021-06-16 22:49:50 JST; 13min left
 
Share this