diff --git a/kiosk_skeleton/boot/kioskbrowser.ini b/kiosk_skeleton/boot/kioskbrowser.ini index 55bac86..ef935c8 100644 --- a/kiosk_skeleton/boot/kioskbrowser.ini +++ b/kiosk_skeleton/boot/kioskbrowser.ini @@ -2,6 +2,11 @@ [general] hostname = "kioskpi" +[reboot] +; can be used to set an automatic reboot on a specific time (time in 24 horus format) +enabled=0 +reboot_time = 04:00 + [screen] ; can be used to force 1080p on 4k screens or workaround broken EDID communication ;force_resolution = "1920x1080" diff --git a/kiosk_skeleton/build.sh b/kiosk_skeleton/build.sh index fa06f2b..104eb7b 100755 --- a/kiosk_skeleton/build.sh +++ b/kiosk_skeleton/build.sh @@ -78,6 +78,8 @@ systemctl enable ntpdate systemctl enable lightdm systemctl enable nginx systemctl enable ssh +systemctl enable schedule-reboot.service + # generate a version info/build info file echo -n "Chromium version: " >> /version-info diff --git a/kiosk_skeleton/etc/systemd/system/schedule-reboot.service b/kiosk_skeleton/etc/systemd/system/schedule-reboot.service new file mode 100644 index 0000000..9b71e23 --- /dev/null +++ b/kiosk_skeleton/etc/systemd/system/schedule-reboot.service @@ -0,0 +1,10 @@ +[Unit] +Description=Schedule Reboot from kioskbrowser.ini +After=multi-user.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/schedule-reboot + +[Install] +WantedBy=multi-user.target diff --git a/kiosk_skeleton/usr/bin/schedule-reboot b/kiosk_skeleton/usr/bin/schedule-reboot new file mode 100644 index 0000000..cc5e22b --- /dev/null +++ b/kiosk_skeleton/usr/bin/schedule-reboot @@ -0,0 +1,51 @@ +#!/bin/bash + +INI_FILE="/boot/kioskbrowser.ini" +REBOOT_ENABLED=$(awk -F '=' '/^\[reboot\]/ { in_reboot=1; next } + in_reboot && /^\[/ { in_reboot=0 } + in_reboot && $1 ~ /enabled/ { gsub(/ /, "", $2); print $2 }' "$INI_FILE") + +REBOOT_TIME=$(awk -F '=' '/^\[reboot\]/ { in_reboot=1; next } + in_reboot && /^\[/ { in_reboot=0 } + in_reboot && $1 ~ /reboot_time/ { gsub(/ /, "", $2); print $2 }' "$INI_FILE") + +if [[ "$REBOOT_ENABLED" -eq 1 ]] && [[ "$REBOOT_TIME" =~ ^[0-2][0-9]:[0-5][0-9]$ ]]; then + echo "Scheduling reboot for $REBOOT_TIME..." + + TARGET_TIME=$(date -d "$REBOOT_TIME" +%s) + NOW=$(date +%s) + + if [ "$TARGET_TIME" -le "$NOW" ]; then + TARGET_TIME=$(date -d "tomorrow $REBOOT_TIME" +%s) + fi + + TARGET_ISO=$(date -d "@$TARGET_TIME" --iso-8601=seconds) + + REBOOT_UNIT="/etc/systemd/system/reboot-at.timer" + cat < "$REBOOT_UNIT" +[Unit] +Description=One-off reboot timer + +[Timer] +OnCalendar=$TARGET_ISO +Persistent=false + +[Install] +WantedBy=timers.target +EOF + + # Create the associated service + cat < /etc/systemd/system/reboot-at.service +[Unit] +Description=Scheduled Reboot + +[Service] +Type=oneshot +ExecStart=/sbin/reboot +EOF + + systemctl daemon-reload + systemctl enable --now reboot-at.timer +else + echo "Reboot not scheduled (disabled or invalid time)" +fi