保持NumLock始终打开


8

我已经物理上卸下了Num Lock键帽,所以不会意外按下它(我使用的是非常紧凑的键盘)。但是我知道xorg中存在一个Bug,off当我切换键盘布局时,该错误会将 Num Lock切换到。

因此,我需要某种措施来完全阻止Num Lock处于“关闭”状态,或者(可能更容易吗?)监视Num Lock状态,并在注意到它处于“关闭”状态时立即将其打开。

是一个似乎可以解决此问题的Unix答案,但对于LXDE。为了使此想法在Ubuntu 15.04和Unity中起作用,我需要做什么?

我不知道如何来监控或查询的Num Lock状态,或者如何以编程方式更改的Num Lock状态,但这里是一个解决方案,使用运行所有的时间一个简单的脚本。听起来好像可行,但我不确定一直运行该命令是否明智?

Answers:


9

最干净的方法当然是修复该错误,但是作为一种解决方法,下面的后台脚本可以完成此工作:

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

key = "org.gnome.settings-daemon.peripherals.keyboard numlock-state"
while True:
    time.sleep(1)
    state = subprocess.check_output([
        "/bin/bash", "-c", "gsettings get "+key]).decode("utf-8").strip()
    if state != "'on'":
        subprocess.Popen([
            "/bin/bash", "-c", "gsettings set "+key+" 'on'"])

如何使用

  • 将上面的脚本复制到一个空文件中,另存为 NM_on.py
  • 使用以下命令在后台进行测试:

    python3 /path/to/NM_on.py
    
  • 如果一切正常,请将其添加到“启动应用程序”:Dash>“启动应用程序”>“添加”,添加命令:

    /bin/bash -c "sleep 10 && python3 /path/to/NM_on.py"
    

说明

我们可以通过Num Lock多种方式获取当前状态:

  • 运行命令:

    xset q
    

    这将给出如下输出:

    Keyboard Control:
      auto repeat:  on    key click percent:  0    LED mask:  00000000
      XKB indicators:
        00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
        03: Compose:     off    04: Kana:        off    05: Sleep:       off
        06: Suspend:     off    07: Mute:        off    08: Misc:        off
        09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
        12: Group 2:     off    13: Mouse Keys:  off
      auto repeat delay:  500    repeat rate:  33
    .....
    

    或使用命令:

    gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
    

    它简单地返回'on''off''unknown'

    由于后者重量极轻,我们可以很好地在后台脚本中使用它每秒检查一次,并在'on'必要时使用以下命令将该值设置为:

    gsettings set org.gnome.settings-daemon.peripherals.keyboard numlock-state 'on'
    

确实如此...


编辑

由于某种原因,我错过了您的最后一段,其中您提到了具有类似解决方案的另一个答案。

纯粹从理论上讲,我总是盲目地(重新)应用设置而不检查当前状态的脚本存在问题。有可能是,如果命令这样做,一种说法

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

获得当前值,只需运行即可

numlockx on

(重新)设置 numlockx on
从两个命令都需要完成的时间来看(至少是一个指示),但是相反。命令

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

似乎更“轻巧”。

运行后台脚本是个坏主意?

当然,如果您没有理由运行后台脚本,那就不要。同时,如果对后台脚本进行了良好的编写,全面的测试,对程序进行了巧妙的优化,并且如果它不会对处理器的使用造成任何明显的影响,那么,如果不增加解决方案的重要性,就不希望将其用作解决方法功能或节省您的时间。

我经常至少运行4-8个后台脚本。他们中的大多数人连续数周没有重启。从未注意到对我的老年人系统有任何影响。请记住,您的系统无论如何都在运行许多循环。


这是出色的-并得到了很好的解释。非常感谢你!
2015年

@ TorbenGundtofte-Bruun不客气!如果答案是您要寻找的,您是否会考虑接受?
Jacob Vlijm

2
当然,我只是想先实施和测试它:-),现在它已成为我将来使用安装指南的一部分。
2015年

关闭我的数字锁定后,gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state仍然会返回'on'
罗德里戈
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.