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:
54
.keep-screen-alive.sh
Executable file
54
.keep-screen-alive.sh
Executable 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
|
||||||
@@ -1 +1 @@
|
|||||||
1768668626.7380302
|
1768669315.640205
|
||||||
84
install.sh
84
install.sh
@@ -232,6 +232,90 @@ EOF
|
|||||||
echo "✓ X11 screensaver disabled in .xinitrc"
|
echo "✓ X11 screensaver disabled in .xinitrc"
|
||||||
fi
|
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 ""
|
||||||
echo "⚠️ Note: Some changes require a system reboot to take effect."
|
echo "⚠️ Note: Some changes require a system reboot to take effect."
|
||||||
echo "Please rerun this script after rebooting if power management issues persist."
|
echo "Please rerun this script after rebooting if power management issues persist."
|
||||||
|
|||||||
Reference in New Issue
Block a user