没有大写锁定指示灯?

没有大写锁定指示灯?

自从我第一次在 Surface Pro 3 上双启动 Ubuntu 16.04 以来,键盘上的大写锁定指示灯就一直不亮。我决定最近尝试解决这个问题。当我输入命令

echo 1 | sudo tee /sys/class/leds/input45\:\:capslock/brightness

灯亮了,所以至少可以访问。不过我不确定如何根据大写锁定的状态让灯亮或灭。任何帮助都将不胜感激。

答案1

显然,不知何故,LED 没有自动设置。下面的背景补丁将处理这个问题:

#!/usr/bin/env python3
import subprocess
import time

led = "/sys/class/leds/input45::capslock/brightness"

while True:
    time.sleep(1)
    ledstate = open(led).read().strip() == "1"
    capstate = "Caps Lock:   on" in \
            subprocess.check_output(["xset", "-q"]).decode("utf-8")
    if ledstate != capstate:
        newled = "0" if capstate == False else "1"
        open(led, "wt").write(newled)

如何使用:

  • 将脚本复制到一个空文件中,将其另存为fix_led(无扩展名)/usr/local/bin,然后使其可执行
  • 由于您需要编辑文件,因此/sys/class/leds/input45::capslock/brightness您需要将脚本添加到 sudoers 文件中,如下所述这里
  • 通过运行测试运行脚本

    sudo /usr/local/bin/fix_led
    

    在终端中测试您的Caps Lock密钥。

  • 现在将脚本添加到您的启动应用程序中:Dash > 启动应用程序 > 添加。添加命令:

    /bin/bash -c "sleep 10 && sudo /usr/local/bin/fix_led"
    

就是这样。下次重新启动(登录)时,它应该可以正常工作。

笔记

  • 当然,补丁应该适用于所有 LED 无法正常工作的情况。不过,文件的具体位置capslock/brightness可能会有所不同。如有必要,请在以下行中设置位置:

    led = "/sys/class/leds/input45::capslock/brightness"
    

    在脚本的头部(不要转义 in :python。我通过以错误的方式设置 led 来测试脚本 :)(当 ledCaps Lock亮起时,led 熄灭;当 led 熄灭时,led 亮起)。

  • 脚本的额外负载为零。

解释

Caps Lock可以通过以下命令获取当前状态的信息:

xset -q

脚本每秒检查一次Caps Lock: on输出中是否有。脚本还会检查当前状态是否与从文件中读取的 led 状态(1 或 0)匹配capslock/brightness

如果这两者不匹配,脚本将根据真实的 Caps Lock状态。

相关内容