Держите NumLock всегда включенным

8

Я уже физически снял колпачок клавиши Num Lock, поэтому случайно не нажимаю ее (я использую очень компактную клавиатуру). Но я понимаю, что в xorg есть ошибка, которая переключает Num Lock, offкогда я переключаю раскладку клавиатуры.

Поэтому мне нужно что-то, что либо вообще предотвращает «отключение» Num Lock, либо, альтернативно (возможно, проще?), Отслеживает состояние Num Lock и включает его «вкл», как только он замечает, что он «выключен».

Вот ответ Unix, который, кажется, решает эту проблему, но для LXDE. Что мне нужно сделать, чтобы эта идея работала в Ubuntu 15.04 и Unity?

Я не знаю, как отслеживать или запрашивать состояние Num Lock или как программно изменять состояние Num Lock, но вот решение, которое использует простой скрипт, который выполняется все время. Звучит так, будто это сработает, но я не уверен, что это умно - постоянно работать?

Торбен Гундтофте-Бруун
источник

Ответы:

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'"])

Как пользоваться

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

Якоб Влейм
источник
Это блестяще - и прекрасно объяснено. Огромное спасибо!
Торбен Гундтофте-Брюн
@ TorbenGundtofte-Bruun Добро пожаловать! Если ответ - то, что вы ищете, вы бы хотели принять его?
Джейкоб Влейм
2
Конечно, я просто хотел сначала реализовать и протестировать его :-), и теперь это часть моей кулинарной книги для будущих установок.
Торбен Гундтофте-Брюн
С выключенным Num Lock gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-stateвсе равно возвращается 'on'.
Родриго