i3에서 바인딩을 설정하여 키보드 백라이트 제어

i3에서 바인딩을 설정하여 키보드 백라이트 제어

나를 위해i3 창 관리자xbacklight설정, 이와 유사 하지만 키보드 LED의 밝기를 제어하는 ​​명령줄 도구를 찾고 있습니다 .

기본적으로 명령줄을 통해 LED를 설정할 수 있지만 루트가 필요합니다.

# 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

Gnome3이 이를 지원하기 때문에 이것이 가능하다는 것을 알고 있지만 정확히 어떻게 진행되는지는 모르겠습니다...

이제 내 ~/.config/i3/config모습은 다음과 같습니다.

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

# keyboard backlight controls
#TODO
# XF86KbdBrightnessUp
# XF86KbdBrightnessDown

xbacklight그렇다면 키보드 백라이트를 사용하여 화면 밝기와 동일한 작업을 수행하는 것과 유사한 도구가 있습니까 ? 도구가 두 가지(화면과 키보드)를 동시에 제어할 수 있다면 더 좋을 것입니다.

답변1

조지 크라미다스대본을 썼다이는 dbus 및 UPower에 의존합니다. 대부분의 데스크탑 배포판에는 dbus 및 UPower가 설치되어 실행됩니다.

/sys/class/...sudo를 통해 루트로 실행하거나 SUID를 설정하여 스크립트를 작성하는 대신 이를 사용하는 것이 좋습니다 . 이는 나쁜 보안 관행입니다.

기본적인 사용법은 매우 간단합니다

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

i3 구성에 이것을 추가하십시오

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

스크립트 자체는 매우 간단합니다.

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

그냥 어딘가에 저장 PATH하고 즐기세요. 나는 이 이름을 사용했고 kbdbacklight위의 예와 i3 구성에서 사용했습니다. 귀하의 이름이 다른 경우 주의해서 업데이트하시기 바랍니다.

Giorgio의 스크립트도 사용되므로 notify-send올바른 패키지가 설치되어 있는지( libnotify-binDebian 및 Ubuntu에) 확인하거나 스크립트에서 이 줄을 주석/제거하십시오.

답변2

사용 light:

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

현재 Arch 및 Fedora용 패키지 버전이 있습니다. 그러나 소스 코드를 사용하면 언제든지 쉽게 빌드할 수 있습니다. 여기서 git 저장소를 찾으세요:https://github.com/haikarainen/light.

답변3

당신은 쉽게 자신을 작성할 수 있습니다.

위 경로 어딘가(/usr/local이 일반 위치)에 에코 라인을 포함하는 두 개의 쉘 스크립트를 작성하십시오. 루트가 소유한 권한을 755로 설정합니다. 그런 다음 sudoers 파일을 편집하여 루트로 실행되도록 허용하거나 chmod +sSUID로 설정합니다.

그런데 이런 종류의 일은 보안 위험으로 간주되므로 권한이 올바르게 설정되었는지 반드시 확인하세요. 루트 권한이 없는 사람은 스크립트를 편집할 수 없고 스크립트에서 입력을 사용하는 것을 원하지 않습니다.

밝기 수준 플래그에 대한 지원을 추가하는 것은 쉽지 않지만 숙련된 쉘 스크립터가 아닌 이상 코드의 버그가 보안 허점이 될 수 있으므로 사용하지 않는 것이 좋습니다.

관련 정보