35 lines
997 B
Bash
Executable File
35 lines
997 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Backlight brightness (first device under /sys/class/backlight). Refreshes
|
|
# on backlight udev events, which also fire for the hardware keys.
|
|
#
|
|
# brightness status loop (deflisten)
|
|
# brightness set PERCENT
|
|
|
|
dev=""
|
|
for d in /sys/class/backlight/*; do
|
|
[[ -e $d ]] && { dev=${d##*/}; break; }
|
|
done
|
|
|
|
state() {
|
|
[[ -n $dev ]] || { printf '{"percent":0,"available":false}'; return; }
|
|
local max cur
|
|
max=$(<"/sys/class/backlight/$dev/max_brightness")
|
|
cur=$(cat "/sys/class/backlight/$dev/actual_brightness" 2>/dev/null \
|
|
|| cat "/sys/class/backlight/$dev/brightness")
|
|
printf '{"percent":%d,"available":true}' "$(((cur * 100 + max / 2) / max))"
|
|
}
|
|
|
|
refresh() { emit "$(state)"; }
|
|
_bl_events() { exec udevadm monitor --udev --subsystem-match=backlight; }
|
|
|
|
case ${1:-} in
|
|
set) [[ -n $dev ]] && brightnessctl -q -d "$dev" set "${2%.*}%" ;;
|
|
*)
|
|
refresh
|
|
[[ -n $dev ]] || exit 0
|
|
mux_init
|
|
mux_add _bl_events
|
|
mux_loop refresh
|
|
;;
|
|
esac
|