diff --git a/kiosk_skeleton/boot/kioskbrowser.ini b/kiosk_skeleton/boot/kioskbrowser.ini index 7385a43..dc8609d 100644 --- a/kiosk_skeleton/boot/kioskbrowser.ini +++ b/kiosk_skeleton/boot/kioskbrowser.ini @@ -9,9 +9,9 @@ hostname = "kioskpi" ;custom_modeline = "40.141 1024 1032 1064 1104 600 604 612 618 +HSync -VSync" ; set screen rotation to be used (normal, left, right, inverted) ;rotate_screen = "normal" -; configure screen to power on/off as specific time of day (24 hours) -;screen_off_time = 23:00 -;screen_on_time = 07:00 +; configure screen to power on/off as specific time of day (time format in 24 hours) +;screen_off_time=23:00 +;screen_on_time=07:00 [wifi] ; If you need more complex WiFi settings (like WPA2-Enterprise, hidden SSIDs, etc.) diff --git a/kiosk_skeleton/build.sh b/kiosk_skeleton/build.sh index fa06f2b..f75bbcd 100755 --- a/kiosk_skeleton/build.sh +++ b/kiosk_skeleton/build.sh @@ -78,6 +78,7 @@ systemctl enable ntpdate systemctl enable lightdm systemctl enable nginx systemctl enable ssh +systemctl enable kiosk-sechedule-screen.service # generate a version info/build info file echo -n "Chromium version: " >> /version-info diff --git a/kiosk_skeleton/etc/systemd/system/kiosk-sechedule-screen.service b/kiosk_skeleton/etc/systemd/system/kiosk-sechedule-screen.service new file mode 100644 index 0000000..7658d7c --- /dev/null +++ b/kiosk_skeleton/etc/systemd/system/kiosk-sechedule-screen.service @@ -0,0 +1,11 @@ +# /etc/systemd/system/kiosk-sechedule-screen.service +[Unit] +Description=Schedule Screen On/Off Timers +After=multi-user.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/schedule-screen-timers + +[Install] +WantedBy=multi-user.target diff --git a/kiosk_skeleton/usr/bin/schedule-screen-timers b/kiosk_skeleton/usr/bin/schedule-screen-timers new file mode 100644 index 0000000..e8471af --- /dev/null +++ b/kiosk_skeleton/usr/bin/schedule-screen-timers @@ -0,0 +1,65 @@ +#!/bin/bash + +INI_FILE="/boot/kioskbrowser.ini" +SYSTEMD_DIR="/etc/systemd/system" + +get_ini_value() { + local section=$1 key=$2 + awk -F '=' -v sec="$section" -v k="$key" ' + $0 ~ /^\[.*\]/ { in_section = ($0 == "[" sec "]") } + in_section && $1 ~ "^"k"$" { + gsub(/^[ \t]+|[ \t]+$/, "", $2) + print $2 + exit + }' "$INI_FILE" +} + +create_recurring_timer() { + local action=$1 + local time=$2 + local name="screen-${action}" + + echo "Setting daily screen ${action} at ${time}" + + cat < "$SYSTEMD_DIR/${name}.timer" +[Unit] +Description=Daily screen ${action} timer + +[Timer] +OnCalendar=*-*-* ${time}:00 +Persistent=true + +[Install] +WantedBy=timers.target +EOF + + cat < "$SYSTEMD_DIR/${name}.service" +[Unit] +Description=Turn screen ${action} + +[Service] +Type=oneshot +Environment=DISPLAY=:0 +ExecStart=/usr/bin/xset dpms force ${action} +EOF + + systemctl daemon-reload + systemctl enable --now "${name}.timer" +} + +cleanup_screen_timers() { + for action in on off; do + systemctl disable --now screen-${action}.timer 2>/dev/null + rm -f "$SYSTEMD_DIR/screen-${action}.timer" "$SYSTEMD_DIR/screen-${action}.service" + done + systemctl daemon-reload +} + +# === MAIN === +SCREEN_ON=$(get_ini_value screen screen_on_time) +SCREEN_OFF=$(get_ini_value screen screen_off_time) + +cleanup_screen_timers + +[[ "$SCREEN_ON" =~ ^[0-2][0-9]:[0-5][0-9]$ ]] && create_recurring_timer on "$SCREEN_ON" +[[ "$SCREEN_OFF" =~ ^[0-2][0-9]:[0-5][0-9]$ ]] && create_recurring_timer off "$SCREEN_OFF"