Skip to main content

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 ==="