Add screen keep-alive functionality to prevent display sleep

- Created .keep-screen-alive.sh wrapper script with multiple methods:
  * systemd-inhibit (primary - prevents OS-level sleep/suspend)
  * xset commands (prevents X11 screensaver)
  * Mouse movement (prevents idle timeout)

- Added screen-keepalive.service systemd unit:
  * Runs xset s reset every 30 seconds
  * Auto-restarts on failure
  * Integrated with graphical session

- Multiple layers of screen protection:
  * HDMI blanking disabled
  * CPU power saving disabled
  * System sleep/suspend disabled
  * X11 screensaver disabled
  * DPMS (Display Power Management) disabled
  * Display forced on periodically

Screen will now remain active while player is running, preventing lockups or blank screens during playback.
This commit is contained in:
Kiwy Player
2026-01-17 19:02:00 +02:00
parent 81432ac832
commit 17ae5439bd
3 changed files with 139 additions and 1 deletions

54
.keep-screen-alive.sh Executable file
View File

@@ -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

View File

@@ -1 +1 @@
1768668626.7380302
1768669315.640205

View File

@@ -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."