108 lines
3.4 KiB
Plaintext
108 lines
3.4 KiB
Plaintext
|
#!/bin/sh
|
||
|
# By Giorgos Keramidas
|
||
|
# From: https://unix.stackexchange.com/questions/260409/set-bindings-in-i3-to-control-keyboard-backlight
|
||
|
|
||
|
# backlight_get
|
||
|
# Print current keyboard brightness from UPower to stdout.
|
||
|
backlight_get()
|
||
|
{
|
||
|
dbus-send --type=method_call --print-reply=literal --system \
|
||
|
--dest='org.freedesktop.UPower' \
|
||
|
'/org/freedesktop/UPower/KbdBacklight' \
|
||
|
'org.freedesktop.UPower.KbdBacklight.GetBrightness' \
|
||
|
| awk '{print $2}'
|
||
|
}
|
||
|
|
||
|
# backlight_get_max
|
||
|
# Print the maximum keyboard brightness from UPower to stdout.
|
||
|
backlight_get_max()
|
||
|
{
|
||
|
dbus-send --type=method_call --print-reply=literal --system \
|
||
|
--dest='org.freedesktop.UPower' \
|
||
|
'/org/freedesktop/UPower/KbdBacklight' \
|
||
|
'org.freedesktop.UPower.KbdBacklight.GetMaxBrightness' \
|
||
|
| awk '{print $2}'
|
||
|
}
|
||
|
|
||
|
# backlight_set NUMBER
|
||
|
# Set the current backlight brighness to NUMBER, through UPower
|
||
|
backlight_set()
|
||
|
{
|
||
|
value="$1"
|
||
|
if test -z "${value}" ; then
|
||
|
echo "Invalid backlight value ${value}"
|
||
|
fi
|
||
|
|
||
|
dbus-send --type=method_call --print-reply=literal --system \
|
||
|
--dest='org.freedesktop.UPower' \
|
||
|
'/org/freedesktop/UPower/KbdBacklight' \
|
||
|
'org.freedesktop.UPower.KbdBacklight.SetBrightness' \
|
||
|
"int32:${value}}"
|
||
|
}
|
||
|
|
||
|
# backlight_change [ UP | DOWN | NUMBER ]
|
||
|
# Change the current backlight value upwards or downwards, or
|
||
|
# set it to a specific numeric value.
|
||
|
backlight_change()
|
||
|
{
|
||
|
change="$1"
|
||
|
if test -z "${change}" ; then
|
||
|
echo "Invalid backlight change ${change}." \
|
||
|
"Should be 'up' or 'down'." >&2
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
case ${change} in
|
||
|
[1234567890]|[[1234567890][[1234567890])
|
||
|
current=$( backlight_get )
|
||
|
max=$( backlight_get_max )
|
||
|
value=$( expr ${change} + 0 )
|
||
|
if test ${value} -lt 0 || test ${value} -gt ${max} ; then
|
||
|
echo "Invalid backlight value ${value}." \
|
||
|
"Should be a number between 0 .. ${max}" >&2
|
||
|
return 1
|
||
|
else
|
||
|
backlight_set "${value}"
|
||
|
notify-send -t 800 "Keyboard brightness set to ${value}"
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
[uU][pP])
|
||
|
current=$( backlight_get )
|
||
|
max=$( backlight_get_max )
|
||
|
if test "${current}" -lt "${max}" ; then
|
||
|
value=$(( ${current} + 1 ))
|
||
|
backlight_set "${value}"
|
||
|
notify-send -t 800 "Keyboard brightness set to ${value}"
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
[dD][oO][wW][nN])
|
||
|
current=$( backlight_get )
|
||
|
if test "${current}" -gt 0 ; then
|
||
|
value=$(( ${current} - 1 ))
|
||
|
backlight_set "${value}"
|
||
|
notify-send -t 800 "Keyboard brightness set to ${value}"
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
*)
|
||
|
echo "Invalid backlight change ${change}." >&2
|
||
|
echo "Should be 'up' or 'down' or a number between" \
|
||
|
"1 .. $( backlight_get_max )" >&2
|
||
|
return 1
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
if test $# -eq 0 ; then
|
||
|
current_brightness=$( backlight_get )
|
||
|
notify-send -t 800 "Keyboard brightness is ${current_brightness}"
|
||
|
else
|
||
|
# Handle multiple backlight changes, e.g.:
|
||
|
# backlight.sh up up down down up
|
||
|
for change in "$@" ; do
|
||
|
backlight_change "${change}"
|
||
|
done
|
||
|
fi
|