#!/usr/bin/env bash # # bt-brightness - LCD backlight control for ButtonTask. # # Usage: # bt-brightness status # bt-brightness set <0-100> # # Invoked through sudo by the web configurator / Qt UI. # Prefers /sys/class/backlight/backlight; otherwise the first device with # max_brightness > 0. set -euo pipefail err() { echo "bt-brightness: $*" >&2; exit 1; } BACKLIGHT_ROOT="/sys/class/backlight" find_device() { local d preferred="$BACKLIGHT_ROOT/backlight" max if [ -d "$preferred" ] && [ -f "$preferred/max_brightness" ]; then max="$(cat "$preferred/max_brightness" 2>/dev/null || echo 0)" if [ "$max" -gt 0 ] 2>/dev/null; then echo "$preferred" return 0 fi fi for d in "$BACKLIGHT_ROOT"/*; do [ -d "$d" ] || continue [ -f "$d/max_brightness" ] || continue max="$(cat "$d/max_brightness" 2>/dev/null || echo 0)" if [ "$max" -gt 0 ] 2>/dev/null; then echo "$d" return 0 fi done return 1 } emit_status() { local dev="$1" max cur percent max="$(cat "$dev/max_brightness")" if [ -f "$dev/actual_brightness" ]; then cur="$(cat "$dev/actual_brightness")" else cur="$(cat "$dev/brightness")" fi if [ "$max" -gt 0 ]; then percent=$(( (cur * 100 + max / 2) / max )) else percent=0 fi [ "$percent" -gt 100 ] && percent=100 [ "$percent" -lt 0 ] && percent=0 printf '{"device":"%s","brightness":%s,"max":%s,"percent":%s}\n' \ "$(basename "$dev")" "$cur" "$max" "$percent" } set_percent() { local percent="$1" dev max value [[ "$percent" =~ ^[0-9]+$ ]] || err "percent must be an integer 0-100" [ "$percent" -ge 0 ] && [ "$percent" -le 100 ] || err "percent must be 0-100" dev="$(find_device)" || err "no backlight device found" max="$(cat "$dev/max_brightness")" [ "$max" -gt 0 ] || err "max_brightness is 0" value=$(( (percent * max + 50) / 100 )) [ "$value" -lt 0 ] && value=0 [ "$value" -gt "$max" ] && value="$max" # Avoid completely blank panel unless explicitly requested as 0. printf '%s\n' "$value" > "$dev/brightness" emit_status "$dev" } cmd_status() { local dev dev="$(find_device)" || err "no backlight device found" emit_status "$dev" } case "${1:-}" in status) cmd_status ;; set) [ "$#" -eq 2 ] || err "usage: bt-brightness set <0-100>"; set_percent "$2" ;; *) err "usage: bt-brightness {status|set <0-100>}" ;; esac