web-dev-qa-db-ja.com

/ sysの権限を変更して、「udev」を使用してLED /ライトの状態を変更するにはどうすればよいですか?

Thinkpadを持っていて、着信Jabberメッセージの通知にThinkLight(キーボードを照らすように設計された画面上の白いフラッシュライト)を使用したいと思います。

/sys/class/leds/tpacpi::thinklight/brightnessを255に変更するだけでよいので、簡単に理解できます。簡単なBashスクリプトを使用して、ライトを3回点滅させます。

ただし、これを実行できるようにするには、アクセス許可を変更する必要があります。rootだけでなくこのファイルも変更できます。
そして、起動するたびに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の実行中にエラーは発生しませんが

助けとヒットをありがとう。または多分他の解決策。

11
Torbjörn

グループledsのメンバーにすべてのLEDへのアクセスを許可するために、次の2つのudevルールを使用しています。

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のトリガーが「タイマー」(echo timer > trigger)に設定されている場合、追加の属性delay_onおよびdelay_offが作成されます。 changeアクションは、これらの新しい属性にグループと権限が設定されるように指定されています。

0/sys/class/leds/.../brightnessに書き込むことにより、LEDがオフになるたびにchangeイベントが生成されることに気づきました。これは、明るさが0に設定されている場合は常にLinuxLEDドライバーコードのクリアトリガーが原因のようです。そのため、2番目のルールにはENV{TRIGGER}!="none"条件があり、LEDがオフになるたびにルールがトリガーされるのを防ぎます。

7
Craig McQueen

'KERNEL'の設定が間違っていると思います。 udevルールを作成およびデバッグするためのこの素晴らしいドキュメントから:

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

カーネル=明るさ、そしておそらくサブシステム= LEDが必要だと思います

次に、ディストリビューションにinotifyのサポートがない場合に備えて。変更がudevdに表示されていることを確認してください。

# udevcontrol reload_rules
1
polynomial