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