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 Lock
Status 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.
gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
immer noch zurück'on'
.