restart chromium demon
#!/bin/bash
set -euo pipefail
# CONFIGURATION
APP_URL="http://localhost:8080"
INACTIVITY_MINUTES=10
CHROMIUM_BIN="/usr/bin/chromium-browser"
WATCHDOG_SCRIPT="/usr/bin/chromium-idle-restart.sh"
SERVICE_FILE="/etc/systemd/system/chromium-idle-restart.service"
USER_NAME="kiosk"
echo "=== Installing Wayland-Compatible Chromium Idle Watchdog ==="
# 1. Write the Chromium Watchdog Script
cat >"$WATCHDOG_SCRIPT" <<EOF
#!/bin/bash
set -euo pipefail
APP_URL="$APP_URL"
INACTIVITY_MINUTES=$INACTIVITY_MINUTES
CHROMIUM_BIN="$CHROMIUM_BIN"
USER_NAME="$USER_NAME"
PARAMS="--ozone-platform=wayland --enable-features=UseOzonePlatform,WaylandWindowDecorations \
--no-first-run --no-default-browser-check --disable-session-crashed-bubble --disable-infobars \
--start-maximized --noerrdialogs --incognito --kiosk \$APP_URL"
while true; do
idle_ns=\$(loginctl show-user "\$USER_NAME" -p IdleSinceHint | cut -d= -f2)
now_ns=\$(date +%s%N)
if [[ "\$idle_ns" =~ ^[0-9]+$ ]]; then
idle_ms=\$(( (now_ns - idle_ns) / 1000000 ))
if [ "\$idle_ms" -ge \$((INACTIVITY_MINUTES*60*1000)) ]; then
echo "\$(date) - Wayland Idle Detected. Restarting Chromium..."
pkill -9 -f "\$CHROMIUM_BIN" || true
sleep 2
eval "\$CHROMIUM_BIN \$PARAMS &"
sleep \$((INACTIVITY_MINUTES*60))
fi
fi
sleep 30
done
EOF
chmod +x "$WATCHDOG_SCRIPT"
# 2. Create the systemd service
cat >"$SERVICE_FILE" <<EOF
[Unit]
Description=Wayland Chromium Idle Restart Watchdog
After=graphical.target
[Service]
ExecStart=$WATCHDOG_SCRIPT
Restart=always
User=$USER_NAME
[Install]
WantedBy=graphical.target
EOF
# 3. Activate the service
systemctl daemon-reload
systemctl enable --now chromium-idle-restart.service
echo "=== Chromium Idle Watchdog Installed and Running ==="