Тримайте 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
    
  • Якщо все працює добре, додайте його до програм запуску: тире> програми запуску> Додати, додайте команду:

    /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 фонових сценаріїв. Більшість з них тижнями без перезавантаження. Ніколи не помічав жодного впливу на моїх літніх системах. Майте на увазі, що ваша система все одно працює з численними циклами.


Це геніально - і чудово пояснив. Дуже дякую!
Torben Gundtofte-Bruun

@ TorbenGundtofte-Bruun Ласкаво просимо! Якщо відповідь - це те, що ви шукаєте, чи можете ви прийняти її?
Яків Влійм

2
Звичайно, я просто хотів спершу впровадити та протестувати :-), і тепер це частина моєї кулінарної книги для майбутніх установок.
Torben Gundtofte-Bruun

З моїм Num Lock вимкнено, gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-stateвсе ще повертається 'on'.
Родріго
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.