111 lines
2.9 KiB
Bash
111 lines
2.9 KiB
Bash
#!/bin/sh
|
|
# /usr/sbin/display-manager
|
|
# Central display timer daemon using FIFO
|
|
|
|
FIFO="/var/run/display.fifo"
|
|
BACKLIGHT_PATH="/sys/class/backlight/backlight"
|
|
TIMEOUT_DIM=5
|
|
TIMEOUT_OFF=3
|
|
BRIGHTNESS_DIM_DIVISOR=8
|
|
BRIGHTNESS_OFF=1
|
|
|
|
# Calculated variables
|
|
MAX_BRIGHTNESS=$(cat $BACKLIGHT_PATH/max_brightness 2>/dev/null || echo 1785)
|
|
BRIGHTNESS_FULL=$MAX_BRIGHTNESS
|
|
BRIGHTNESS_DIM=$((MAX_BRIGHTNESS / BRIGHTNESS_DIM_DIVISOR))
|
|
|
|
# Timer PIDs
|
|
TIMER_DIM_PID=""
|
|
TIMER_OFF_PID=""
|
|
|
|
# Create FIFO if not exists
|
|
[ -e "$FIFO" ] || mkfifo "$FIFO"
|
|
|
|
# Cleanup on exit
|
|
trap "rm -f $FIFO; exit 0" EXIT TERM INT
|
|
|
|
maybe_set_lockscreen() {
|
|
[ -n "$1" ] && [ "$1" = "$BRIGHTNESS_DIM" ] && [ -f /etc/boot_logo.fb ] && \
|
|
cat /etc/boot_logo.fb > /dev/fb0 2>/dev/null
|
|
}
|
|
|
|
set_brightness() {
|
|
echo "$1" > "$BACKLIGHT_PATH/brightness"
|
|
maybe_set_lockscreen "$1"
|
|
}
|
|
|
|
cancel_timers() {
|
|
[ -n "$TIMER_DIM_PID" ] && kill "$TIMER_DIM_PID" 2>/dev/null
|
|
[ -n "$TIMER_OFF_PID" ] && kill "$TIMER_OFF_PID" 2>/dev/null
|
|
TIMER_DIM_PID=""
|
|
TIMER_OFF_PID=""
|
|
}
|
|
|
|
start_timers() {
|
|
# Cancel previous timers
|
|
cancel_timers
|
|
|
|
# Timer 1: DIM after TIMEOUT_DIM seconds
|
|
(
|
|
sleep $TIMEOUT_DIM
|
|
logger -t display "Backlight: DIM"
|
|
set_brightness $BRIGHTNESS_DIM
|
|
) &
|
|
TIMER_DIM_PID=$!
|
|
|
|
# Timer 2: OFF after (TIMEOUT_DIM + TIMEOUT_OFF) seconds
|
|
TOTAL_TIMEOUT=$((TIMEOUT_DIM + TIMEOUT_OFF))
|
|
(
|
|
sleep $TOTAL_TIMEOUT
|
|
logger -t display "Backlight: OFF"
|
|
set_brightness $BRIGHTNESS_OFF
|
|
) &
|
|
TIMER_OFF_PID=$!
|
|
}
|
|
|
|
logger -t display "Display manager started"
|
|
|
|
# Main loop reading from FIFO
|
|
while true; do
|
|
if read -r cmd < "$FIFO"; then
|
|
case "$cmd" in
|
|
full)
|
|
logger -t display "Backlight: FULL"
|
|
set_brightness $BRIGHTNESS_FULL
|
|
|
|
# Update display content
|
|
if [ -x /usr/sbin/update-display ]; then
|
|
/usr/sbin/update-display &
|
|
fi
|
|
|
|
# Start auto-dim/off timers
|
|
start_timers
|
|
;;
|
|
dim)
|
|
logger -t display "Backlight: DIM (manual)"
|
|
cancel_timers
|
|
set_brightness $BRIGHTNESS_DIM
|
|
;;
|
|
off)
|
|
logger -t display "Backlight: OFF (manual)"
|
|
cancel_timers
|
|
set_brightness $BRIGHTNESS_OFF
|
|
;;
|
|
cancel)
|
|
logger -t display "Timers cancelled"
|
|
cancel_timers
|
|
;;
|
|
shutdown)
|
|
logger -t display "Shutdown signal received"
|
|
cancel_timers
|
|
echo 0 > "$BACKLIGHT_PATH/brightness" 2>/dev/null
|
|
echo 4 > /sys/class/graphics/fb0/blank 2>/dev/null
|
|
exit 0
|
|
;;
|
|
*)
|
|
logger -t display "Unknown command: $cmd"
|
|
;;
|
|
esac
|
|
fi
|
|
done
|