Why?
I once had struggle trying to get my backlight work in my Arch system with i3wm. So I thought I would share.
Keyboard backlight
- Basic usage is as simple as
kbdbacklight upkbdbacklight downkbdbacklight [ 0 | 1 | 2 | 3 ]- i3 config:
# increase/decrease keyboard brightnessbindsym XF86KbdBrightnessUp exec kbdbacklight upbindsym XF86KbdBrightnessDown exec kbdbacklight downThe scripts is available in the end of this post. Just save somewhere in your PATH and enjoy. I went with the name kbdbacklight and used it in the examples and i3 config above, please be mindful to update those if you name it differently.
Most Linux distributions encourage a practice in which each user has a specific directory for the programs he/she personally uses. This directory is called bin and is a subdirectory of your home directory. If you do not already have one, create it with the following command:
[me@linuxbox me]$ mkdir binMove your script into your new bin directory:
~/bin/kbdbacklightAdd directories to your path with the following command, where directory is the name of the directory you want to add:
[me@linuxbox me]$ export PATH=$PATH:directoryIn this case, it is:
[me@linuxbox me]$ export PATH=$PATH:~/binNow, you are all set.
And here is the backlight script (click to expand):
#!/bin/sh# By Giorgos Keramidas
# 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 UPowerbacklight_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}" donefi