Lassen Sie NumLock immer eingeschaltet

8

Ich habe die Num Lock-Tastenkappe bereits physisch entfernt, damit ich sie nicht versehentlich drücke (ich verwende eine sehr kompakte Tastatur). Aber ich verstehe, dass es in xorg einen Fehler gibt , der Num Lock offumschaltet , wenn ich das Tastaturlayout wechsle .

Ich brauche also etwas, das entweder verhindert, dass Num Lock überhaupt ausgeschaltet wird, oder alternativ (vielleicht einfacher?) Den Num Lock-Status überwacht und ihn einschaltet, sobald es feststellt, dass es ausgeschaltet ist.

Hier ist eine Unix-Antwort, die dies zu beheben scheint, jedoch für LXDE. Was muss ich tun, damit diese Idee in Ubuntu 15.04 und Unity funktioniert?

Ich weiß nicht, wie man den Num Lock-Status überwacht oder abfragt oder wie man den Num Lock-Status programmgesteuert ändert, aber hier ist eine Lösung, die ein einfaches Skript verwendet, das ständig ausgeführt wird. Es hört sich so an, als würde es funktionieren, aber ich bin mir nicht sicher, ob es klug ist, das die ganze Zeit laufen zu lassen?

Torben Gundtofte-Bruun
quelle

Antworten:

9

Am saubersten wäre es natürlich, den Fehler zu beheben, aber als Problemumgehung erledigt das folgende Hintergrundskript die Aufgabe:

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

Wie benutzt man

  • Kopieren Sie das obige Skript in eine leere Datei und speichern Sie es unter NM_on.py
  • Testen Sie es im Hintergrund mit dem folgenden Befehl:

    python3 /path/to/NM_on.py
    
  • Wenn alles einwandfrei funktioniert, fügen Sie es zu Startanwendungen hinzu: Dash> Startanwendungen> Hinzufügen, fügen Sie den folgenden Befehl hinzu:

    /bin/bash -c "sleep 10 && python3 /path/to/NM_on.py"
    

Erläuterung

Wir können den aktuellen Num LockStatus auf mehrere Arten ermitteln:

  • Ausführen des Befehls:

    xset q
    

    Das ergibt eine Ausgabe wie:

    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
    .....
    

    oder mit dem Befehl:

    gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
    

    was einfach zurückkehrt 'on', 'off'oder 'unknown'.

    Da letzteres extrem leicht ist, können wir es sehr gut in einem Hintergrundskript verwenden, um es einmal pro Sekunde zu überprüfen und den Wert 'on'bei Bedarf mit dem folgenden Befehl festzulegen:

    gsettings set org.gnome.settings-daemon.peripherals.keyboard numlock-state 'on'
    

und so tut es ...


Bearbeiten

Aus irgendeinem Grund habe ich Ihren letzten Absatz verpasst, in dem Sie auf eine andere Antwort mit einer ähnlichen Lösung verwiesen haben.

Rein theoretisch habe ich immer ein Problem mit Skripten, die Einstellungen blind (erneut) anwenden, ohne den aktuellen Status zu überprüfen. Es könnte ein Argument dafür geben, wenn der Befehl

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

bekommen Sie den aktuellen Wert, wäre mehr fordern , dass einfach laufen

numlockx on

auf (zurück) setzen numlockx on .
Wenn man die Zeit betrachtet, zu der beide Befehle beendet werden müssen (was zumindest ein Hinweis ist), ist es jedoch umgekehrt. der Befehl

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

scheint "leichter" zu sein.

Ein Hintergrundskript ausführen eine schlechte Idee?

Wenn Sie keinen Grund haben, ein Hintergrundskript auszuführen, tun Sie dies natürlich nicht. Zur gleichen Zeit, wenn ein Hintergrundskript ist gut geschrieben, gründlich getestet, Verfahren intelligent optimiert werden, und wenn es nicht hinzufügen , nicht einen merklichen Effekt auf dem Prozessor Beruf, wäre es dumm nicht zu verwenden , wie dieses Problem zu umgehen, wenn es wichtig , fügt Funktionalität oder spart Ihnen Zeit.

Ich habe ständig mindestens 4-8 Hintergrundskripte ausgeführt. Die meisten wochenlang ohne Neustart. Ich habe keine Auswirkungen auf meine älteren Systeme bemerkt. Denken Sie daran, dass auf Ihrem System ohnehin zahlreiche Schleifen ausgeführt werden.

Jacob Vlijm
quelle
Das ist genial - und wunderbar erklärt. Vielen Dank!
Torben Gundtofte-Bruun
@ TorbenGundtofte-Bruun Gern geschehen! Wenn die Antwort das ist, wonach Sie suchen, würden Sie in Betracht ziehen, sie zu akzeptieren?
Jacob Vlijm
2
Klar, ich wollte es nur erst implementieren und testen :-) und jetzt ist es Teil meines Kochbuchs für zukünftige Installationen.
Torben Gundtofte-Bruun
Kehrt mit ausgeschaltetem Num Lock gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-stateimmer noch zurück 'on'.
Rodrigo