如何确保键盘背光在启动时始终打开(最大)?

如何确保键盘背光在启动时始终打开(最大)?

问题

如何确保戴尔笔记本电脑上的键盘背光在启动时打开(最大)?

基本原理

有时我会在白天不经意间按组合键关闭键盘背光,然后当我醒来时,通常是在半夜,我不想通过开灯吵醒我的妻子。因此,我寻求一种解决方案,无论我启动计算机时如何读取背光的最大可能值并进行设置。我总是在晚上将其关闭,因此该解决方案不必考虑睡眠或休眠模式。

研究

键盘背光的最大值存储在:

/sys/class/leds/dell\:\:kbd_backlight/max_brightness

当前设置值的实际值存储在:

/sys/class/leds/dell\:\:kbd_backlight/brightness

答案1

不管最大值很可能是恒定的,我不知道为什么或如何,但在上次启动时我的最大值为 3。现在我有 2。我同时感到困惑和困惑。

我不想寻找原因,例如BIOS设置,让我们在启动时读取最大值并设置它。不管白天我是否不小心关闭了背光。

我想出了一种直接的方法:

sudo crontab -e

并通过一个命令读取和设置最大值:

@reboot /bin/cat /sys/class/leds/dell\:\:kbd_backlight/max_brightness > /sys/class/leds/dell\:\:kbd_backlight/brightness

答案2

我做了一些更具延展性(即可配置)的事情:我创建了一个在启动时自动启动的初始化脚本,除非运行级别为0(系统正在进入暂停/断电模式)或6(系统正在进入重新启动/重新启动模式) 。

当它启动时,该脚本检查本地时间是否在17:00:00和之间07:59:59:如果是,则打开键盘背光;如果是,则打开键盘背光。如果不是,则会关闭背光。

以下是创建此类脚本所需的步骤。


第 1 步 - 创建初始化脚本

打开 shell 终端模拟窗口(例如按CtrlAltT),然后使用图形文本编辑器(例如 Gedit 或 Mousepad)创建 init 脚本。我使用的是 Gedit,所以我在终端执行的命令是这样的:

sudo gedit /etc/init.d/keyboard-backlight-brightness

复制下面的源代码并将其粘贴到文本编辑器的窗口中:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          keyboard-backlight-brightness
# Required-Start:
# Required-Stop:
# Default-Start:     1 2 3 4 5
# Default-Stop:      0 6
# Short-Description: Sets keyboard backlight brightness at boot time
# Description:       Script that sets the keyboard's LED (backlight) brightness at boot time
### END INIT INFO

case "$1" in
    start)
       # If the current runlevel is one of those in 'Default-Start', then
       # sets keyboard backlight to 24 (from a set of 0, 12, 24, 36,..., 255) if local time
       # is between 17:00:00 and 07:59:59, otherwise set it to 0 (e.g. 'off').
       if [[ `date +%-H` > 16 || `date +%-H` < 8 ]]
       then
            echo -n "Setting keyboard backlight brightness to 24..."
            echo 24 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness
       else
            echo -n "Setting keyboard backlight brightness to 0..."
            echo 0 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness
       fi
    ;;

    stop)
       # If the current runlevel is one of those in 'Default-Stop', then
       # sets keyboard backlight to 0 (i.e. 'off').
       echo -n "Setting keyboard backlight brightness to 0..."
       echo 0 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness
    ;;

    reload|restart)
       $0 stop
       $0 start
    ;;

    *)
       echo "Usage: keyboard-backlight-brightness start|stop|restart|reload"
       exit 1
esac

exit 0

就我的电脑(2009 年中的 13 英寸 Apple Macbook Pro)而言,其键盘brightness文件位于/sys/class/leds/smc\:\:kbd_backlight/brightness,但我更改了此答案中的代码,以便它们全部显示您的/sys/class/leds/dell\:\:kbd_backlight/brightness文件。

您可以将其24(亮度强度级别)更改为1和之间您想要的任何值255,并且您还可以设置不同的本地时间范围。例如,要在 18:00:00 到 05:59:59 之间打开背光,请使用以下代码:

if [[ `date +%-H` > 17 || `date +%-H` < 6 ]]

如果您确实希望键盘背光保持打开并处于全功率状态,无论白天(或晚上)的时间如何,您都可以使用以下代码:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          keyboard-backlight-brightness
# Required-Start:
# Required-Stop:
# Default-Start:     1 2 3 4 5
# Default-Stop:      0 6
# Short-Description: Sets keyboard backlight brightness at boot time
# Description:       Script that sets the keyboard's LED (backlight) brightness at boot time
### END INIT INFO

case "$1" in
    start)
       # If the current runlevel is one of those in 'Default-Start', then
       # sets keyboard backlight to 255 (from a set of 0, 12, 24, 36,..., 255).
       echo -n "Setting keyboard backlight brightness to 255..."
       echo 255 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness
    ;;

    stop)
       # If the current runlevel is one of those in 'Default-Stop', then
       # sets keyboard backlight to 0 (i.e. 'off').
       echo -n "Setting keyboard backlight brightness to 0..."
       echo 0 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness
    ;;

    reload|restart)
       $0 stop
       $0 start
    ;;

    *)
       echo "Usage: keyboard-backlight-brightness start|stop|restart|reload"
       exit 1
esac

exit 0

在代码中进行所需的调整后,保存文件并退出文本编辑器。

第 2 步 - 配置初始化脚本的权限

你只需要执行:

sudo chmod 755 /etc/init.d/keyboard-backlight-brightness

...并且 init 脚本将允许rwxroot 用户进行(读、写和执行)访问,并rx允许其他人进行(读和执行)访问。

第 3 步 - 创建初始化脚本到相应系统 V 运行级别的链接

你只需要执行:

sudo update-rc.d keyboard-backlight-brightness defaults

...并且初始化脚本将链接到相应的运行级别,它必须在启动时执行。

第 4 步 - 启动初始化脚本

赶紧跑:

sudo service keyboard-backlight-brightness start

...服务将启动。


如果您决定在代码中保留本地时间范围选项,那么当您启动脚本时,如果您的本地时间恰好在脚本中指定的范围内,键盘背光就会亮起,否则背光将会亮起。关掉。

您可能需要重新启动系统,只是为了确保脚本确实在启动时启动(并工作):

sudo telinit 6

或者

sudo shutdown -r now

或者

sudo reboot

或者

sudo init 6

如果初始化脚本无法正常工作或根本无法工作

在我升级 Linux 发行版后,我就遇到了这种情况:它替换initsystemd.在这种情况下,您需要:

  1. 停止初始化脚本:

    sudo service keyboard-backlight-brightness stop
    
  2. 然后从 init 系统中删除该脚本:

    sudo update-rc.d -f keyboard-backlight-brightness remove
    
  3. 然后删除init脚本文件:

    sudo rm -f /etc/init.d/keyboard-backlight-brightness
    

完成上述 3 个步骤后,让我们创建一个 systemd 脚本和服务。


第 1 步 - 创建自定义嵌套 SH 脚本

在终端,运行以下命令:

sudo gedit /usr/bin/keyboard-backlight-brightness.sh

...然后将下面的代码粘贴到新文件中(请注意,这是不是A巴什脚本,但相反,它必须一个脚本):

#!/bin/sh
# Sets keyboard backlight brightness to 24 (from a set of
# 0, 12, 24, 36,..., 255) if local time is between
# 17:00:00 and 07:59:59, otherwise sets it to 0 (e.g. 'off').

if [ $(date +%-H) -gt 16 -o $(date +%-H) -lt 8 ]
then
    echo -n "Setting keyboard backlight brightness to 24..."
    echo 24 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness
else
    echo -n "Setting keyboard backlight brightness to 0..."
    echo 0 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness
fi

exit 0

或者,如果您确实想要连续的全功率键盘背光,请改用以下代码:

#!/bin/sh
# Sets keyboard backlight brightness to 255 (i.e. 100%).

echo -n "Setting keyboard backlight brightness to 255..."
echo 255 | tee /sys/class/leds/dell\:\:kbd_backlight/brightness

exit 0

粘贴完代码后,保存文件并退出文本编辑器,然后更改该文件的权限:

sudo chmod 755 /usr/bin/keyboard-backlight-brightness.sh

现在您创建了一个脚本keyboard-backlight-brightness.sh/usr/bin,是时候将其嵌套在必须首先创建的 systemd 服务脚本中了。

第 2 步 - 创建系统脚本,然后将 SH 脚本嵌套在其中

在终端,运行以下命令:

sudo gedit /etc/systemd/system/keyboard-backlight-brightness.service

...然后将此代码粘贴到新文件中:

[Unit]
Description=Sets keyboard backlight brightness at boot time

[Service]
ExecStart=/usr/bin/keyboard-backlight-brightness.sh

[Install]
WantedBy=multi-user.target graphical.target rescue.target

(请注意,该keyboard-backlight-brightness.sh脚本是通过参数嵌套的ExecStart。此外,选项 atWantedBy会导致 systemd 脚本始终执行 - 除非系统重新启动或关闭计算机时)

粘贴完代码后,保存文件并退出文本编辑器,然后更改该文件的权限:

sudo chmod 755 /etc/systemd/system/keyboard-backlight-brightness.service

第 3 步 - 重新加载系统配置,然后启用新的系统服务脚本

在终端上运行以下命令,以便将新的 systemd 服务脚本合并到 systemd 环境中:

sudo systemctl daemon-reload

...然后运行以下命令,以便keyboard-backlight-brightness.service在启动时加载此类新服务:

sudo systemctl enable keyboard-backlight-brightness.service

第 4 步 - 启动系统服务脚本

赶紧跑:

sudo systemctl start keyboard-backlight-brightness.service

...服务将启动。


如果你决定在代码中保留本地时间范围选项,那么当你启动systemd服务脚本时,如果你的本地时间恰好在脚本中指定的范围内,键盘背光就会亮起,否则这样的背光将被关闭。

您可能需要重新启动系统,只是为了确保脚本确实在启动时启动(并工作):

sudo telinit 6

或者

sudo shutdown -r now

或者

sudo reboot

或者

sudo init 6

相关内容