Caps Lockを押すとシェルスクリプトを実行する(Wayland)

Caps Lockを押すとシェルスクリプトを実行する(Wayland)

私は2年以上修正されていない小さなWayland / Mutterのバグを修正するためにシェルスクリプトを試しています。私はシェルスクリプトに初めて触れましたが、これが可能だと思います。

問題は、WaylandからLEDでキーボードレイアウトを表示するxkbオプションが正しく機能しないことです。最初のレイアウトスイッチで動作し、LEDをオンにして動作を停止し、LEDは常に点灯したままになります。

だから私のアイデアは、特定のキー(私の場合はCapsLock)を押したときにシステムLEDファイルの内容を確認し、それを反対の値に変更するスクリプトを持つことです。ロジックは次のとおりです。

listen to CapsLock and upon keypress
  do cat /sys/class/leds/input7::capslock/brightness
if cat returns 0
  then echo 1 > /sys/class/leds/input7::capslock/brightness
if cat returns 1
  then echo 0 > /sys/class/leds/input7::capslock/brightness
wait for next CapsLock keypress

私は例を通して学ぶのが上手ですが、オンラインでこれに関する情報を見つけることができません。関連する結果を得るために正しく表現する方法がわからないようです。したがって、正しい方向についてのアドバイスとアドバイスをいただきありがとうございます!

修正する:
現在の状態に応じて、LEDをオン/オフするシェルスクリプトを作成しました。 CapsLockを押すたびに実行するにはどうすればよいですか?

#!/bin/bash

led=`cat /sys/class/leds/input7::capslock/brightness`

if [[ $led = "1" ]]
then
    echo 0 > /sys/class/leds/input7::capslock/brightness
else
    echo 1 > /sys/class/leds/input7::capslock/brightness
fi

アップデート2:
明らかに、シェルスクリプトを実行可能にしてから移動し、パスワードなしで実行できるように/usr/local/bin/ファイルに追加しました。/etc/sudoers.d/

UPD3
ìnput再起動するたびにディレクトリ構造の数が変更される可能性があることを知り、これを考慮してスクリプトを修正しました。

#!/bin/bash

led=`cat /sys/class/leds/input?::capslock/brightness`
file=`ls /sys/class/leds/input?::capslock/brightness`

if [[ $led = "1" ]]
then
    echo 0 > $file
else
    echo 1 > $file
fi

これで、Caps Lockを押すたびにこれを行う必要があります。

UPD4:
CapsLockを押すのではなく、実際のキーボードレイアウト変更イベントをキャプチャする必要がありますか?このアプローチはより多様であり、レイアウトの切り替えに使用されるショートカットに関係なく、LEDインジケータが代替レイアウトを表示できるようにします。そのようなイベントを監視する方法はありますか?

関連情報