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

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

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

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

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

自動で Chromium を起動する

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

  • --noerrdialogs: エラーダイアログをすべて抑制します。
  • --disable-background-mode: バックグラウンド機能を止める
  • --start-maximized: 起動時に最大化した状態で起動する
  • --app=: app モードにする
  • --kiosk: これを設定すると CPU使用率などが確認できなくなったため外した
  • RuntimeMaxSec= で指定秒数でプロセスが再起動されるので実現できる今回は15分とした
/etc/systemd/system/chromium-autorun.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[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=[email protected]

daemon を再読み込みして自動起動登録をする

1
2
3
4
systemctl daemon-reload
systemctl start chromium-autorun.service
systemctl enable chromium-autorun.service
systemctl is-enabled chromium-autorun.service

マウスカーソルを消す

unclutter を利用する

1
sudo apt install unclutter

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

/etc/systemd/system/unclutter.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[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

daemon を再読み込みして自動起動登録をする

1
2
3
4
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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[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=[email protected]

service ファイルを変更したので一度 dsaible して再度登録する

1
2
3
4
5
6
7
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 するように変更

インストール

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

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

if [[ "${ACTWIN}" == *$1* ]]; then
    #echo 'FOUND!!!'
    xdotool key ctrl+F5
fi
1
chmod +x /etc/systemd/system/chromium-reload.sh
/etc/systemd/system/chromium-reload.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[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=[email protected]
1
2
3
4
5
6
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
1
2
3
4
5
6
7
8
9
[Unit]
Description=Scheduled chromium reload

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

[Install]
WantedBy=timers.target
1
2
3
4
5
6
systemctl daemon-reload
systemctl stop chromium-reload.timer
systemctl disabled chromium-reload.timer

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

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

1
2
3
4
5
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
Built with Hugo
テーマ StackJimmy によって設計されています。