Держите NumLock всегда включенным
Я уже физически снял колпачок клавиши Num Lock, поэтому случайно не нажимаю ее (я использую очень компактную клавиатуру). Но я понимаю, что в xorg есть ошибка, которая переключает Num Lock на off
когда я переключаю раскладку клавиатуры.
Поэтому мне нужно что-то, что либо вообще предотвращает "отключение" 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
Если все работает нормально, добавьте его в 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 фоновых скриптов. Большинство из них неделями без перезапуска. Никогда не замечал никакого влияния на мою пожилую систему (ы). Имейте в виду, что ваша система в любом случае выполняет множество циклов.