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:
84
install.sh
84
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."
|
||||
|
||||
Reference in New Issue
Block a user