LED /照明の状態を変更するために "udev"を使用して/ sysの権限をどのように変更しますか?

LED /照明の状態を変更するために "udev"を使用して/ sysの権限をどのように変更しますか?

私はThinkpadを持っており、ThinkLight(キーボードを照らすように設計された画面上の白い点滅ライト)を使用して着信Jabberメッセージに関する通知を受け取りたいと思います。

実装が簡単です。/sys/class/leds/tpacpi::thinklight/brightness255に変更してください。ライトを3回点滅させる単純なBashスクリプトを使用して実行します。

ただし、これを行うには、ルートのみがこのファイルを変更できないように権限を変更する必要があります。起動するたびにこれを実行し
たくありません。sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightness

私の考えに最適な解決策はudevこれを使用することです。しかし、私は以前にそれを使ったことがなく、udevオンラインで見つけたチュートリアルに混乱していました。

私はこのudevルールを試してみました。

KERNEL=="tpacpi::thinklight", MODE="0666"

また

KERNEL="thinklight", MODE="0666"

しかし、これはうまくいきません。実行時にエラーは発生しませんが、udevadm test /class/leds

あなたの助けとクリックに感謝します。あるいは、他の解決策があるかもしれません。

答え1

グループメンバーにすべてのLEDへのアクセスを/etc/udev/rules.d/許可するには、次の2つのudevルール(以下のファイル)を使用します。leds

SUBSYSTEM=="leds", ACTION=="add", RUN+="/bin/chgrp -R leds /sys%p", RUN+="/bin/chmod -R g=u /sys%p"
SUBSYSTEM=="leds", ACTION=="change", ENV{TRIGGER}!="none", RUN+="/bin/chgrp -R leds /sys%p", RUN+="/bin/chmod -R g=u /sys%p"

ACTION=="change"この規則は、動的に生成された属性を処理するために必要です。たとえば、LEDのトリガが「Timer」()に設定されている場合、追加のプロパティがecho timer > trigger作成されますdelay_on。グループと権限を設定するには、これらの新しいプロパティのdelay_offアクションを指定します。change

書き込みをしてLEDを消すたびにイベントが発生することを確認しましたchange。これは、明るさがに設定されるたびにLinux LEDドライバコードの消去が実行されるためです。したがって、2番目のルールには、LEDが消灯するたびにルールが実行されないようにする条件があります。0/sys/class/leds/.../brightness0ENV{TRIGGER}!="none"

私のテストでは、カーネル5.4では、明るさが0に設定されていると、変更イベントはもはや発生しません。 Linux gitリポジトリを見ると、この問題はカーネル4.9で修正されたようです。したがって、4.9以上のカーネルでは、ENV{TRIGGER}!="none"ルールの2番目の部分は必要ありません。

答え2

「カーネル」設定が間違っているようです。 udevルールの作成とデバッグに関する優れたドキュメントから:

http://www.reactivated.net/writing_udev_rules.html#basic

KERNEL=明るさとSUBSYSTEM=LEDが必要なようです。

その後、ディストリビューションにinotifyサポートがない場合。 udevdが変更を確認できることを確認してください。

# udevcontrol reload_rules

関連情報