保持 NumLock 始终开启

Tor*_*uun 8 unity numlock

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

所以我需要一些东西,要么完全阻止 Num Lock “关闭”,要么(也许更容易?)监视 Num Lock 状态并在它注意到它“关闭”时立即将其“打开”。

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

我不知道如何监视或查询 Num Lock 状态,也不知道如何以编程方式更改 Num Lock 状态,但这里有一个使用始终运行的简单脚本的解决方案。听起来它会起作用,但我不确定让它一直运行是否明智?

Jac*_*ijm 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'"])
Run Code Online (Sandbox Code Playgroud)

如何使用

解释

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

  • 运行命令:

    xset q
    
    Run Code Online (Sandbox Code Playgroud)

    这将给出如下输出:

    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
    .....
    
    Run Code Online (Sandbox Code Playgroud)

    或使用以下命令:

    gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
    
    Run Code Online (Sandbox Code Playgroud)

    它只是返回'on','off''unknown'

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

    gsettings set org.gnome.settings-daemon.peripherals.keyboard numlock-state 'on'
    
    Run Code Online (Sandbox Code Playgroud)

所以它确实......


编辑

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

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

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
Run Code Online (Sandbox Code Playgroud)

获得当前值,只需运行就会要求更高

numlockx on
Run Code Online (Sandbox Code Playgroud)

到(重新)设置 numlockx on
查看两个命令需要完成的时间(这至少是一个指示),但情况正好相反;命令

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
Run Code Online (Sandbox Code Playgroud)

似乎更“轻量级”。

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

当然,如果你没有理由运行后台脚本,那就不要。同时,如果后台脚本编写得很好,经过彻底测试,程序经过巧妙优化,如果它不会对处理器占用产生任何显着影响,如果它增加了重要功能或节省您的时间。

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

  • 当然,我只是想先实现和测试它 :-) 现在它是我未来安装的食谱的一部分。 (2认同)