Package: acpi-support Version: 0.142-8 Tags: patch Please accept this patch updating the brightness-adjusting script.
I noticed that asus-keyboard-backlight.sh did all the things I wanted, but it had the path of the device class hardwired in, and I have different hardware. So I pulled out the path into a second argument. In the process I enhanced the values you can pass as the first (up/down) argument to support a wide variety of devices and behavior. Because the new script is more general, I renamed it from asus-keyboard-backlight.sh to brightness.sh and changed the callers. With this change, anyone will be able to add brightness support for a new device merely by adding new events files. < Stephen diff --git a/events/asus-keyboard-backlight-down b/events/asus-keyboard-backlight-down index 88bcfc1..892a338 100644 --- a/events/asus-keyboard-backlight-down +++ b/events/asus-keyboard-backlight-down @@ -1,7 +1,5 @@ # /etc/acpi/events/asus-keyboard-backlight-down -# This is called when the user presses the key brightness -# down button and calls /etc/acpi/asus-keyboard-backlight.sh for -# further processing. +# This is called when the user presses the key brightness down button. event=hotkey ATKD 000000c5 -action=/etc/acpi/asus-keyboard-backlight.sh down +action=/etc/acpi/brightness.sh down leds/asus::kbd_backlight diff --git a/events/asus-keyboard-backlight-up b/events/asus-keyboard-backlight-up index 52a3d5a..ba438ac 100644 --- a/events/asus-keyboard-backlight-up +++ b/events/asus-keyboard-backlight-up @@ -1,7 +1,5 @@ # /etc/acpi/events/asus-keyboard-backlight-up -# This is called when the user presses the key brightness -# up button and calls /etc/acpi/asus-keyboard-backlight.sh for -# further processing. +# This is called when the user presses the key brightness up button. event=hotkey ATKD 000000c4 -action=/etc/acpi/asus-keyboard-backlight.sh up +action=/etc/acpi/brightness.sh up leds/asus::kbd_backlight diff --git a/brightness.sh b/brightness.sh new file mode 100755 index 0000000..c47b76c --- /dev/null +++ b/brightness.sh @@ -0,0 +1,98 @@ +#! /bin/sh +# Generic script to increase or decrease an ACPI brightness level. +# Can be used for screen backlight, keyboard backlight, +# and even to turn on and off binary LEDs. + +# An example entry in /etc/acpi/events/ might contain these two lines: +# +# event=video/brightnessup * +# action=/etc/acpi/brightness.sh +12% backlight/myvendor_backlight +# +# The "event" line gives the event as reported by acpi_listen when +# that hotkey is pressed. +# The "action" lines gives the path to this script and its arguments. +# Here, we are increasing by 12% the brightness of "myvendor_backlight". +# +# See comments about the arguments in the code, below. + +acpi_basedir=/sys/class + +# The amount to change the brightness. Values can be: +# +N% -- up by that percentage, e.g., "+5%" +# -N% -- down by that percentage +# =N% -- set to that percentage +# +N -- up by that raw value +# -N -- down by that raw value +# =N -- set to that raw value +# <word> -- there are various aliases defined; see the case statement below. + +# In the +/- cases, the amount may be adjusted to make some difference. +# For example, raising a two-value keyboard backlight by +5% will actually +# raise it by 50%, because that is the granularity of the value. +# This behavior is intended to make the "up" and "down" aliases most useful. + +adjustment_arg=$1 +case $adjustment_arg in + up) adjustment_arg="+5%" ;; + down) adjustment_arg="-5%" ;; + on) adjustment_arg="=100%" ;; + off) adjustment_arg="=0%" ;; + +*|-*|=*) ;; + *) echo "$0: Unknown adjustment argument '$1'" >&2 ; exit 1 ;; +esac + +# The subdirectory of /sys/class that contains the brightness files +# This is probably a directory under leds/ or backlight/ +# If unspecified and there is a unique directory under backlight/ +# we use that. + +if [ "$2" ]; then + # no leading .. allowed in directory names + case $2 in ..*|*/..*) exit 1;; esac + acpi_dir=$acpi_basedir/$2 +else + acpi_dir=$(echo "$acpi_basedir"/backlight/*) +fi + +# Quit if we don't find the directory or the files we expect. +set -e + +cd "$acpi_dir" + +read -r max_value < ./max_brightness +read -r cur_value < ./brightness + +case $adjustment_arg in + =*) + absolute_arg=${adjustment_arg#=} + case $absolute_arg in + *%) new_value=$((max_value * ${absolute_arg%\%} / 100));; + *) new_value=$absolute_arg;; + esac + ;; + *%) + step_by=$((max_value * ${adjustment_arg%\%} / 100)) + if [ "$step_by" = 0 ]; then + # This works for keyboard backlights (which often have only 2 levels), + # and binary lights with only one level. + case $adjustment_arg in + -*) step_by=-1 ;; + *) step_by=1 ;; + esac + fi + new_value=$((cur_value + step_by)) + ;; + *) + new_value=$((cur_value + adjustment_arg)) + ;; +esac + +if [ "$new_value" -lt 0 ]; then + new_value=0 +elif [ "$new_value" -gt "$max_value" ]; then + new_value=$max_value +fi + +if [ "$new_value" != "$cur_value" ]; then + echo "$new_value" > ./brightness +fi diff --git a/asus-keyboard-backlight.sh b/asus-keyboard-backlight.sh deleted file mode 100644 index 3fef2ff..0000000 --- a/asus-keyboard-backlight.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -# this directory is a symlink on my machine: -KEYS_DIR=/sys/class/leds/asus\:\:kbd_backlight - -test -d $KEYS_DIR || exit 0 - -MIN=0 -MAX=$(cat $KEYS_DIR/max_brightness) -VAL=$(cat $KEYS_DIR/brightness) - -if [ "$1" = down ]; then - VAL=$((VAL-1)) -else - VAL=$((VAL+1)) -fi - -if [ "$VAL" -lt $MIN ]; then - VAL=$MIN -elif [ "$VAL" -gt $MAX ]; then - VAL=$MAX -fi - -echo $VAL > $KEYS_DIR/brightness