保持 NumLock 始终开启

保持 NumLock 始终开启

我已经物理地移除了 Num Lock 键帽,所以我不会意外按下它(我使用非常紧凑的键盘)。但我知道有xorg 中的一个错误off当我切换键盘布局时,它会切换 Num Lock 。

因此,我需要一些东西来完全防止 Num Lock“关闭”,或者(也许更简单?)监视 Num Lock 状态并在注意到它“关闭”时立即将其“打开”。

这里是一个 Unix 答案,似乎可以解决这个问题,但对于 LXDE 来说。我需要做什么才能使这个想法在 Ubuntu 15.04 和 Unity 中发挥作用?

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

答案1

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

#!/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 个后台脚本。其中大部分用于无需重启。在我的旧系统上从未发现任何影响。请记住,您的系统无论如何都在运行许多循环。

相关内容