diff --git a/.keep-screen-alive.sh b/.keep-screen-alive.sh new file mode 100755 index 0000000..3616090 --- /dev/null +++ b/.keep-screen-alive.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Keep-screen-alive wrapper for player +# Prevents screen from locking/turning off while player is running + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Function to keep screen awake +keep_screen_awake() { + while true; do + # Move mouse slightly to prevent idle + if command -v xdotool &> /dev/null; then + xdotool mousemove_relative 1 1 + xdotool mousemove_relative -1 -1 + fi + + # Disable DPMS and screensaver periodically + if command -v xset &> /dev/null; then + xset s reset + xset dpms force on + fi + + sleep 30 + done +} + +# Function to inhibit systemd sleep (if available) +inhibit_sleep() { + if command -v systemd-inhibit &> /dev/null; then + # Run player under systemd inhibit to prevent sleep + systemd-inhibit --what=sleep --why="Signage player running" \ + bash "$SCRIPT_DIR/start.sh" + return $? + fi + return 1 +} + +# Try systemd inhibit first (most reliable) +if inhibit_sleep; then + exit 0 +fi + +# Fallback: Start keep-alive in background +keep_screen_awake & +KEEPALIVE_PID=$! + +# Start the player +cd "$SCRIPT_DIR" +bash start.sh +PLAYER_EXIT=$? + +# Kill keep-alive when player exits +kill $KEEPALIVE_PID 2>/dev/null || true + +exit $PLAYER_EXIT diff --git a/.player_heartbeat b/.player_heartbeat index c7df7fb..24fba67 100644 --- a/.player_heartbeat +++ b/.player_heartbeat @@ -1 +1 @@ -1768668626.7380302 \ No newline at end of file +1768669315.640205 \ No newline at end of file diff --git a/install.sh b/install.sh index bf334f9..4fb1cc9 100644 --- a/install.sh +++ b/install.sh @@ -232,6 +232,90 @@ EOF echo "✓ X11 screensaver disabled in .xinitrc" fi + # Create screen keep-alive wrapper script + echo "Creating screen keep-alive service..." + KEEPALIVE_SCRIPT="$SCRIPT_DIR/.keep-screen-alive.sh" + cat > "$KEEPALIVE_SCRIPT" << 'EOF' +#!/bin/bash +# Keep-screen-alive wrapper for player +# Prevents screen from locking/turning off while player is running + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Function to keep screen awake +keep_screen_awake() { + while true; do + # Move mouse slightly to prevent idle + if command -v xdotool &> /dev/null; then + xdotool mousemove_relative 1 1 + xdotool mousemove_relative -1 -1 + fi + + # Disable DPMS and screensaver periodically + if command -v xset &> /dev/null; then + xset s reset + xset dpms force on + fi + + sleep 30 + done +} + +# Function to inhibit systemd sleep (if available) +inhibit_sleep() { + if command -v systemd-inhibit &> /dev/null; then + # Run player under systemd inhibit to prevent sleep + systemd-inhibit --what=sleep --why="Signage player running" \ + bash "$SCRIPT_DIR/start.sh" + return $? + fi + return 1 +} + +# Try systemd inhibit first (most reliable) +if inhibit_sleep; then + exit 0 +fi + +# Fallback: Start keep-alive in background +keep_screen_awake & +KEEPALIVE_PID=$! + +# Start the player +cd "$SCRIPT_DIR" +bash start.sh +PLAYER_EXIT=$? + +# Kill keep-alive when player exits +kill $KEEPALIVE_PID 2>/dev/null || true + +exit $PLAYER_EXIT +EOF + + chmod +x "$KEEPALIVE_SCRIPT" + echo "✓ Screen keep-alive service created" + + # Create systemd service to run keep-alive service + sudo tee /etc/systemd/system/screen-keepalive.service > /dev/null << EOF +[Unit] +Description=Keep Screen Awake During Signage Player +After=display-manager.service +PartOf=graphical-session.target + +[Service] +Type=simple +ExecStart=/bin/bash -c 'while true; do xset s reset 2>/dev/null; sleep 30; done' +Restart=always +RestartSec=5 + +[Install] +WantedBy=graphical-session.target +EOF + + sudo systemctl daemon-reload + sudo systemctl enable screen-keepalive.service + echo "✓ Systemd screen keep-alive service enabled" + echo "" echo "⚠️ Note: Some changes require a system reboot to take effect." echo "Please rerun this script after rebooting if power management issues persist."