endeavouros-team / endeavouros-i3wm-setup

The beloved EndeavourOS default i3 (has gaps) theme and setup dotfile repo
GNU General Public License v3.0
447 stars 120 forks source link

Backlight keyboard #43

Closed andreapazzo closed 2 years ago

andreapazzo commented 2 years ago

Hello. Keyboard backlight is not working out of the box. I modified Giorgos Keramidas's script (https://keramida.wordpress.com/2013/03/28/controlling-the-keyboard-backlight-from-cli/) to handle a stepwise increase/decrease of the backlight.

Here the code:

#!/bin/sh

# 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
    # AMST - manage increase and decrease
    [+-][1234567890]|[[+-][[1234567890][[1234567890]|[[+-][[1234567890][[1234567890][[1234567890])
        current=$( backlight_get )
        max=$( backlight_get_max )
        value=$( expr $((change)) + 0 )
        current_and_value=$( expr ${current} + ${value})
        if test ${current_and_value} -lt 0 ; then
            current_and_value=0
        elif test ${current_and_value} -gt ${max} ; then
            current_and_value=${max}
        fi
        backlight_set "${current_and_value}"
        notify-send -t 800 "Keyboard brightness set to ${current_and_value}"
        ;;

    # AMST - manage max 3 digits input instead of only 2
    # [1234567890]|[[1234567890][[1234567890])
    [1234567890]|[[1234567890][[1234567890]|[[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

and here the config edited

# increase/decrease keyboard brightness
bindsym XF86KbdBrightnessUp exec backlight +25
bindsym XF86KbdBrightnessDown exec backlight down -25
killajoe commented 2 years ago

this is not a pull request and misses some info about how to use.. what it replaces e.t.c

killajoe commented 2 years ago

closing, reason: not activ