Defina ligações no i3 para controlar a luz de fundo do teclado

3

Para minhas configurações de gerenciador de janelas do i3 , estou procurando uma ferramenta de linha de comando, semelhante a xbacklight , mas para controlar o brilho dos leds que estão no teclado.

Basicamente, eu posso configurar os leds através de uma linha de comando, mas é necessário que seja root:

# Light off the leds
echo 0 > /sys/class/leds/smc::kbd_backlight/brightness
# Light on the leds (full power)
echo 100 > /sys/class/leds/smc::kbd_backlight/brightness

Eu sei que isso é possível porque o Gnome3 tem suporte para isso, mas eu não sei exatamente como eles continuam ...

Por enquanto, meu ~/.config/i3/config é assim:

# screen brightness controls
bindsym XF86MonBrightnessUp exec xbacklight -inc 10
bindsym XF86MonBrightnessDown exec xbacklight -dec 10

# keyboard backlight controls
#TODO
# XF86KbdBrightnessUp
# XF86KbdBrightnessDown

Existe uma ferramenta semelhante a xbacklight para fazer o mesmo que o brilho da tela com a luz de fundo do teclado? Seria ainda melhor se essa ferramenta tivesse o controle em ambos (tela e teclado).

    
por perror 06.02.2016 / 20:15

3 respostas

1

Você pode escrever seus próprios com facilidade.

Crie dois scripts de shell contendo as linhas de eco acima em algum lugar do caminho (/ usr / local é o local normal). Defina as permissões 755 pertencentes ao root. Em seguida, edite o arquivo sudoers para permitir que eles sejam executados como root ou use chmod +s para defini-los como SUID.

Esse tipo de coisa é considerado um risco de segurança, por isso, certifique-se de que as permissões estejam definidas adequadamente. Você não quer que ninguém sem permissões de root seja capaz de editar os scripts, e você não quer que os scripts usem nenhuma entrada.

Seria trivial adicionar suporte a um sinalizador de nível de brilho, mas, a menos que você seja um gerenciador de scripts completo, eu recomendaria contra ele como um bug em seu código, seria uma falha de segurança.

    
por 06.02.2016 / 21:18
4

Giorgos Keramidas escreveu um script que se baseia em dbus e UPower - que a maioria das distros de desktop tem instalado e funcionando.

Eu recomendaria usar isso em vez de scripts que gravam em /sys/class/... , já que precisam ser executados como raiz - seja por sudo ou por ter um conjunto de SUID - e isso é uma prática de segurança ruim.

O uso básico é tão simples quanto

kbdbacklight up
kbdbacklight down
kbdbacklight [ 0 | 1 | 2 | 3 ]

Adicione isto à configuração do i3

# increase/decrease keyboard brightness
bindsym XF86KbdBrightnessUp exec kbdbacklight up
bindsym XF86KbdBrightnessDown exec kbdbacklight down 

O script em si é muito simples

#!/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 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

Basta salvar em algum lugar no seu PATH e aproveite. Eu fui com o nome kbdbacklight e usei nos exemplos e na configuração do i3 acima, por favor, esteja atento para atualizá-los se você nomear de forma diferente.

Por favor, note que o script do Giorgio também faz uso do notify-send , então tenha certeza de ter o pacote correto instalado ( libnotify-bin no Debian e no Ubuntu) ou comente / remova as linhas do script.

    
por 27.05.2017 / 02:13
0

Use light :

bindsym XF86KbdBrightnessUp     exec light -k -A 10
bindsym XF86KbdBrightnessDown   exec light -k -U 10

Está disponível em uma versão empacotada para Arch e Fedora no momento. Mas você sempre pode construir facilmente a partir da fonte. Encontre o repositório git aqui: link .

    
por 02.09.2018 / 20:32