最干净的方法当然是修复该错误,但是作为一种解决方法,下面的后台脚本可以完成此工作:
#!/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个后台脚本。他们中的大多数人连续数周没有重启。从未注意到对我的老年人系统有任何影响。请记住,您的系统无论如何都在运行许多循环。