This commit is contained in:
Miguel Fuertes committed 2025-10-17 12:55:44 +02:00
1 parent 0e6ee96929
commit 0c5d4535c5
2 files changed
+57 -16

No files matched your search

+3 -4
View File
@@ -32,15 +32,14 @@ cat > /etc/rc.button/power << 'EOF'
SECONDS=3
[ "${ACTION}" = "pressed" ] && exit ${SECONDS}
[ "${ACTION}" = "timeout" ] && {
logger "Power held for ${SECONDS}: Shutting down system"
[ "${ACTION}" = "released" ] && [ "${SEEN}" -ge "${SECONDS}" ] && {
logger "Power held for ${SEEN}s: Shutting down system"
poweroff &
exit 0
}
exit 0
EOF
chmod +x /etc/rc.button/power
@@ -13,37 +13,79 @@ if pgrep poweroff >/dev/null 2>&1 || \
fi
# Configuration variables
TIMEOUT_OFF=8
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"
maybe_set_lockscreen(){
# Show lockscreen if brightness is OFF
[ -n "$1" ] && [ "$1" = "$BRIGHTNESS_DIM" ] && [ -f /etc/boot_logo.fb ] && \
cat /etc/boot_logo.fb > /dev/fb0 2>/dev/null
}
# Set brightness level
set_brightness() {
echo "$1" > "$BACKLIGHT_PATH/brightness"
# Check if we should show lockscreen
maybe_set_lockscreen "$1"
}
# 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 timer if exists
[ -f "$TIMER_PID_FILE" ] && kill $(cat "$TIMER_PID_FILE") 2>/dev/null
# Cancel previous timers if any
cancel_timers
# Set full brightness immediately
logger -t display "Backlight: FULL"
echo $BRIGHTNESS_FULL > "$BACKLIGHT_PATH/brightness"
set_brightness $BRIGHTNESS_FULL
# Start single timer: OFF + lockscreen after TIMEOUT_OFF seconds
(
sleep "$TIMEOUT_OFF"
logger -t display "Backlight: OFF + lockscreen"
echo $BRIGHTNESS_OFF > "$BACKLIGHT_PATH/brightness"
[ -f /etc/boot_logo.fb ] && cat /etc/boot_logo.fb > /dev/fb0 2>/dev/null
) >/dev/null 2>&1 </dev/null &
# Start timer 1: DIM after TIMEOUT_DIM seconds
pid1=$(start_timer $TIMEOUT_DIM $BRIGHTNESS_DIM "Backlight: DIM")
echo "$pid1" >> "$TIMER_PID_FILE"
echo $! > "$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