web-dev-qa-db-ja.com

キャップロックインジケータランプはありませんか?

Surface Pro 3でUbuntu 16.04を初めてブートして以来、キーボードのCaps LockインジケーターLEDが機能しませんでした。私は最近、それについて何かしようとすることにしました。コマンドを入力するとき

echo 1 | Sudo tee /sys/class/leds/input45\:\:capslock/brightness

ライトが点灯するため、少なくともアクセス可能です。しかし、Caps Lockの状態に応じてライトをオンまたはオフにするために何をすべきかわかりません。どんな助けも大歓迎です。

2
Leandro

どうやら、どういうわけかledは自動的に設定されません。以下の背景パッチがそれを処理します。

#!/usr/bin/env python3
import subprocess
import time

led = "/sys/class/leds/input45::capslock/brightness"

while True:
    time.sleep(1)
    ledstate = open(led).read().strip() == "1"
    capstate = "Caps Lock:   on" in \
            subprocess.check_output(["xset", "-q"]).decode("utf-8")
    if ledstate != capstate:
        newled = "0" if capstate == False else "1"
        open(led, "wt").write(newled)

使い方:

  • スクリプトを空のファイルにコピーし、fix_led/usr/local/bin(拡張子なし)として保存し、実行可能にします
  • ファイル/sys/class/leds/input45::capslock/brightnessを編集する必要があるため、説明したように、スクリプトをsudoersファイルに追加する必要があります。 ここ
  • テスト-実行してスクリプトを実行します

    Sudo /usr/local/bin/fix_led
    

    ターミナルで、テストします Caps Lock キー。

  • ここで、スクリプトをスタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加。コマンドを追加します。

    /bin/bash -c "sleep 10 && Sudo /usr/local/bin/fix_led"
    

それでおしまい。次回の再起動(ログイン)で、動作するはずです。

ノート

  • もちろん、パッチはledが機能していないすべての状況で機能するはずです。ただし、ファイルcapslock/brightnessの正確な場所は異なる場合があります。必要に応じて、行の場所を設定します。

    led = "/sys/class/leds/input45::capslock/brightness"
    

    スクリプトの先頭(python:をエスケープしないでください)。間違った方法でledを設定することでスクリプトをテストしました:)( Caps Lock オン、オフのときにオン)。

  • スクリプトの余分な負荷はありません。

説明

現在の情報 Caps Lock 状態はコマンドで取得できます:

xset -q

1秒に1回、スクリプトはCaps Lock: onが出力にあるかどうかを確認します。スクリプトは、capslock/brightnessファイルから読み取られた現在の状態がled状態(1または0)に一致するかどうかもチェックします。

これら2つが一致しない場合、スクリプトはrealに従ってled状態を設定します Caps Lock 状態。

2
Jacob Vlijm