From cdd2bc2d0236e537746f8dcec6ce61f9db7ece45 Mon Sep 17 00:00:00 2001
From: Karl <karl@k-world.me.uk>
Date: Wed, 4 Jun 2025 12:59:05 +0100
Subject: [PATCH] fixes for all services and reverts

---
 kiosk_skeleton/build.sh                       |  3 +-
 .../etc/systemd/system/screen-refresh.service | 10 ------
 kiosk_skeleton/usr/bin/schedule-reboot        | 15 ++++++++-
 kiosk_skeleton/usr/bin/schedule-screen-timers | 32 +++++++++++++++++--
 kiosk_skeleton/usr/bin/setup-refresh-timer    |  4 +++
 raspberry_pi_skeleton/boot/cmdline.txt        |  2 +-
 6 files changed, 49 insertions(+), 17 deletions(-)
 delete mode 100644 kiosk_skeleton/etc/systemd/system/screen-refresh.service

diff --git a/kiosk_skeleton/build.sh b/kiosk_skeleton/build.sh
index 0845dad..720465d 100755
--- a/kiosk_skeleton/build.sh
+++ b/kiosk_skeleton/build.sh
@@ -80,8 +80,7 @@ systemctl enable nginx
 systemctl enable ssh
 systemctl enable kiosk-sechedule-screen.service
 systemctl enable schedule-reboot.service
-systemctl enable screen-refresh.service
-systemctl enable setup-screen-refresh.service
+systemctl enable setup-refresh-timer.service
 
 
 # generate a version info/build info file
diff --git a/kiosk_skeleton/etc/systemd/system/screen-refresh.service b/kiosk_skeleton/etc/systemd/system/screen-refresh.service
deleted file mode 100644
index 2136ce0..0000000
--- a/kiosk_skeleton/etc/systemd/system/screen-refresh.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=Refresh Screen
-After=graphical.target
-
-[Service]
-Type=oneshot
-User=pi
-Environment=DISPLAY=:0
-Environment=XAUTHORITY=/home/pi/.Xauthority
-ExecStart=/usr/bin/refresh-screen
diff --git a/kiosk_skeleton/usr/bin/schedule-reboot b/kiosk_skeleton/usr/bin/schedule-reboot
index cc5e22b..d2a91d6 100755
--- a/kiosk_skeleton/usr/bin/schedule-reboot
+++ b/kiosk_skeleton/usr/bin/schedule-reboot
@@ -1,6 +1,16 @@
 #!/bin/bash
 
 INI_FILE="/boot/kioskbrowser.ini"
+
+remount_root() {
+    local mode=$1
+    echo "Remounting root filesystem as $mode..."
+    mount -o remount,"$mode" / || {
+        echo "Failed to remount root as $mode"
+        exit 1
+    }
+}
+
 REBOOT_ENABLED=$(awk -F '=' '/^\[reboot\]/ { in_reboot=1; next }
                              in_reboot && /^\[/ { in_reboot=0 }
                              in_reboot && $1 ~ /enabled/ { gsub(/ /, "", $2); print $2 }' "$INI_FILE")
@@ -12,6 +22,8 @@ REBOOT_TIME=$(awk -F '=' '/^\[reboot\]/ { in_reboot=1; next }
 if [[ "$REBOOT_ENABLED" -eq 1 ]] && [[ "$REBOOT_TIME" =~ ^[0-2][0-9]:[0-5][0-9]$ ]]; then
     echo "Scheduling reboot for $REBOOT_TIME..."
 
+    remount_root rw
+
     TARGET_TIME=$(date -d "$REBOOT_TIME" +%s)
     NOW=$(date +%s)
 
@@ -34,7 +46,6 @@ Persistent=false
 WantedBy=timers.target
 EOF
 
-    # Create the associated service
     cat <<EOF > /etc/systemd/system/reboot-at.service
 [Unit]
 Description=Scheduled Reboot
@@ -46,6 +57,8 @@ EOF
 
     systemctl daemon-reload
     systemctl enable --now reboot-at.timer
+
+    remount_root ro
 else
     echo "Reboot not scheduled (disabled or invalid time)"
 fi
diff --git a/kiosk_skeleton/usr/bin/schedule-screen-timers b/kiosk_skeleton/usr/bin/schedule-screen-timers
index 16d13ef..f4b7c0a 100755
--- a/kiosk_skeleton/usr/bin/schedule-screen-timers
+++ b/kiosk_skeleton/usr/bin/schedule-screen-timers
@@ -3,6 +3,18 @@
 INI_FILE="/boot/kioskbrowser.ini"
 SYSTEMD_DIR="/etc/systemd/system"
 
+
+# Function to safely remount root FS
+remount_root() {
+    local mode=$1
+    echo "Remounting root filesystem as $mode..."
+    mount -o remount,"$mode" / || {
+        echo "Failed to remount root as $mode"
+        exit 1
+    }
+}
+
+
 get_ini_value() {
     local section=$1 key=$2
     awk -F '=' -v sec="$section" -v k="$key" '
@@ -17,6 +29,17 @@ get_ini_value() {
 create_recurring_timer() {
     local action=$1
     local time=$2
+    local value
+
+    if [[ "$action" == "on" ]]; then
+        value=1
+    elif [[ "$action" == "off" ]]; then
+        value=0
+    else
+        echo "Invalid action: $action"
+        return 1
+    fi
+
     local name="screen-${action}"
 
     echo "Setting daily screen ${action} at ${time}"
@@ -39,9 +62,7 @@ Description=Turn screen ${action}
 
 [Service]
 Type=oneshot
-Environment=DISPLAY=:0
-ExecStart=/usr/bin/xset dpms force ${action}
-Environment=XAUTHORITY=/home/pi/.Xauthority
+ExecStart=/usr/bin/vcgencmd display_power ${value}
 User=pi
 EOF
 
@@ -49,6 +70,7 @@ EOF
     systemctl enable --now "${name}.timer"
 }
 
+
 cleanup_screen_timers() {
     for action in on off; do
         systemctl disable --now screen-${action}.timer 2>/dev/null
@@ -57,6 +79,8 @@ cleanup_screen_timers() {
     systemctl daemon-reload
 }
 
+remount_root rw
+
 # === MAIN ===
 SCREEN_ON=$(get_ini_value screen screen_on_time)
 SCREEN_OFF=$(get_ini_value screen screen_off_time)
@@ -65,3 +89,5 @@ 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"
+
+remount_root ro
diff --git a/kiosk_skeleton/usr/bin/setup-refresh-timer b/kiosk_skeleton/usr/bin/setup-refresh-timer
index 661ddfa..4510cc5 100755
--- a/kiosk_skeleton/usr/bin/setup-refresh-timer
+++ b/kiosk_skeleton/usr/bin/setup-refresh-timer
@@ -29,9 +29,13 @@ if [[ "$REFRESH_INTERVAL" =~ ^[0-9]+$ ]] && (( REFRESH_INTERVAL > 0 )); then
     cat <<EOF | tee "$SERVICE_UNIT" > /dev/null
 [Unit]
 Description=Refresh Screen
+After=graphical.target
 
 [Service]
 Type=oneshot
+User=pi
+Environment=DISPLAY=:0
+Environment=XAUTHORITY=/home/pi/.Xauthority
 ExecStart=/usr/bin/refresh-screen
 EOF
 
diff --git a/raspberry_pi_skeleton/boot/cmdline.txt b/raspberry_pi_skeleton/boot/cmdline.txt
index becbf91..27e719e 100644
--- a/raspberry_pi_skeleton/boot/cmdline.txt
+++ b/raspberry_pi_skeleton/boot/cmdline.txt
@@ -1 +1 @@
-console=serial0,115200 console=tty1 root=PARTUUID=544c6228-02 rootfstype=ext4 rw rootwait logo.nologo consoleblank=0 loglevel=0 quiet
\ No newline at end of file
+console=serial0,115200 console=tty1 root=PARTUUID=544c6228-02 rootfstype=ext4 ro rootwait logo.nologo consoleblank=0 loglevel=0 quiet
\ No newline at end of file