为了我的i3 窗口管理器设置,我正在寻找一个命令行工具,类似于xbacklight
,但控制键盘中 LED 的亮度。
基本上,我可以通过命令行设置 LED,但它需要 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
我知道这是可能的,因为 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 - 大多数桌面发行版都已启动并运行。
我建议使用它而不是写入的脚本,/sys/class/...
因为它们需要以 root 身份运行 - 通过 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-bin
在 Debian 和 Ubuntu 上)或从脚本中注释/删除这些行。
答案2
使用light
:
bindsym XF86KbdBrightnessUp exec light -k -A 10
bindsym XF86KbdBrightnessDown exec light -k -U 10
目前它有 Arch 和 Fedora 的打包版本。但您始终可以轻松地从源代码构建 if 。在这里找到 git 存储库:https://github.com/haikarainen/light。
答案3
你可以很容易地编写自己的。
创建两个 shell 脚本,其中包含上面路径中某处的 echo 行(/usr/local 是正常位置)。设置root拥有的权限755。然后编辑您的 sudoers 文件以允许它们以 root 身份运行,或者用于chmod +s
将它们设置为 SUID。
顺便说一句,此类事情被认为是安全风险,因此请绝对确保权限设置正确。您不希望任何没有 root 权限的人能够编辑脚本,并且您不希望脚本使用任何输入。
添加对亮度级别标志的支持是微不足道的,但除非您是一位熟练的 shell 脚本编写者,否则我建议您不要使用它,因为代码中的错误将成为安全漏洞。