もちろん、最もクリーンなのはバグを修正することですが、回避策として、以下のバックグラウンドスクリプトで問題を解決できます。
#!/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'
。
後者は非常に軽量であるため、バックグラウンドスクリプトで非常によく使用して1秒に1回チェックし'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個のバックグラウンドスクリプトを実行しています。それらのほとんどは、再起動せずに数週間です。私の高齢者のシステムへの影響に気づかなかった。とにかく、システムが多数のループを実行していることに注意してください。