78 lines
1.9 KiB
Bash
78 lines
1.9 KiB
Bash
#!/bin/sh
|
|
# /etc/hotplug.d/button/20_power_dimm
|
|
|
|
# Only process power button events
|
|
[ "$BUTTON" = "power" ] || exit 0
|
|
|
|
# Configuration variables
|
|
TIMEOUT_DIM=5
|
|
TIMEOUT_OFF=3
|
|
BACKLIGHT_PATH="/sys/class/backlight/backlight"
|
|
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))
|
|
|
|
# PID file for timer management
|
|
TIMER_PID_FILE="/tmp/screen_timer.pid"
|
|
|
|
# Set brightness level
|
|
set_brightness() {
|
|
echo $1 > $BACKLIGHT_PATH/brightness
|
|
|
|
[ "$1" = "$BRIGHTNESS_OFF" ] && [ -f /etc/boot_logo.fb ] && \
|
|
cat /etc/boot_logo.fb > /dev/fb0 2>/dev/null
|
|
}
|
|
|
|
# Function to start a timer
|
|
# Parameters: $1=timeout (seconds), $2=brightness level, $3=log message
|
|
start_timer() {
|
|
local timeout=$1
|
|
local brightness=$2
|
|
local log_msg=$3
|
|
|
|
(
|
|
sleep "$timeout"
|
|
logger -t display "$log_msg"
|
|
set_brightness "$brightness"
|
|
) >/dev/null 2>&1 </dev/null &
|
|
|
|
echo $!
|
|
}
|
|
|
|
# Cancel all active timers
|
|
cancel_timers() {
|
|
if [ -f "$TIMER_PID_FILE" ]; then
|
|
while read pid; do
|
|
kill "$pid" 2>/dev/null
|
|
done < "$TIMER_PID_FILE"
|
|
rm -f "$TIMER_PID_FILE"
|
|
fi
|
|
}
|
|
|
|
# Only act on button release
|
|
[ "${ACTION}" = "released" ] && {
|
|
logger -t display "Button event detected"
|
|
|
|
# Cancel previous timers if any
|
|
cancel_timers
|
|
|
|
# Set full brightness immediately
|
|
logger -t display "Backlight: FULL"
|
|
set_brightness $BRIGHTNESS_FULL
|
|
|
|
# Start timer 1: DIM after TIMEOUT_DIM seconds
|
|
pid1=$(start_timer $TIMEOUT_DIM $BRIGHTNESS_DIM "Backlight: DIM")
|
|
echo "$pid1" >> "$TIMER_PID_FILE"
|
|
|
|
# Start timer 2: OFF after (TIMEOUT_DIM + TIMEOUT_OFF) seconds
|
|
TOTAL_TIMEOUT=$((TIMEOUT_DIM + TIMEOUT_OFF))
|
|
pid2=$(start_timer $TOTAL_TIMEOUT $BRIGHTNESS_OFF "Backlight: OFF")
|
|
echo "$pid2" >> "$TIMER_PID_FILE"
|
|
}
|
|
|
|
exit 0
|