Самым чистым было бы, конечно, исправить ошибку, но в качестве обходного пути, фоновый скрипт ниже сделает эту работу:
#!/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
Если все работает нормально, добавьте его в Startup Applications: Dash> Startup Applications> Add, добавьте команду:
/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 фоновых скриптов. Большинство из них неделями без перезапуска. Никогда не замечал никакого влияния на мою пожилую систему (ы). Имейте в виду, что ваша система в любом случае выполняет множество циклов.