"Udev" kullanarak bir LED / ışığın durumunu değiştirmek için / sys içindeki izinleri nasıl değiştirebilirim?


11

Bir Thinkpad'im var ve gelen Jabber mesajlarıyla ilgili bildirimler için ThinkLight'ı (klavyeyi aydınlatmak için tasarlanmış ekranın üstündeki beyaz flaş ışığı) kullanmak istiyorum.

Birinin /sys/class/leds/tpacpi::thinklight/brightness255'e değişmesi gerektiği için bunu gerçekleştirmek kolaydır. Işığın üç kez yanıp sönmesine izin verecek basit bir Bash komut dosyası ile yapacağım.

Ancak bunu yapabilmek için, izinleri değiştirmem gerekiyor, sadece kök bu dosyayı değiştirebiliyor.
Ve sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightnessher önyüklemeden sonra istemiyorum .

Bunun için en iyi çözüm bence udev. Ancak, daha önce hiç kullanmadım udevve çevrimiçi bulduğum öğreticilerle oldukça kafam karıştı.

Bu udevkuralı denedim :

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

Hem de

KERNEL="thinklight", MODE="0666"

Ama bu çalışmıyor. Çalışırken hata almama rağmenudevadm test /class/leds

Herhangi bir yardım ve isabet için teşekkürler. Ya da belki başka çözümler.


bildirim ile iyi fikir, bunu da yapmalıyım :) teşekkürler
K1773R

Yanıtlar:


7

Grup üyelerine ledstüm LED'lere erişim vermek için aşağıdaki gibi iki udev kuralı kullanıyorum :

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"Kuralın dinamik olarak oluşturulan nitelikleri işlemek için gerekli olduğunu unutmayın . Örneğin, LED'in tetikleyicisi "zamanlayıcı" ( echo timer > trigger) olarak ayarlanmışsa , ekstra özellikler delay_onve delay_offoluşturulur. changeBu yeni özellikler kendi grup ve izinleri ayarlamak olması için eylem belirtilir.

Bir fark ettik changeolay LED'i yazarak kapatıldığında her oluşturulur 0için /sys/class/leds/.../brightness. Bu, parlaklık olarak ayarlandığında Linux LED sürücü kodu temizleme tetikleyicilerinden kaynaklanıyor gibi görünüyor 0. Bu nedenle, ENV{TRIGGER}!="none"bir LED her kapatıldığında kuralın tetiklenmesini önlemek için ikinci kuralın koşulu vardır .


1

Sanırım yanlış 'KERNEL' ayarınız var. Udev kurallarını yazmak ve hata ayıklamak için bu müthiş doktordan:

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

Sanırım KERNEL = parlaklık ve belki bir SUBSYSTEM = led'e ihtiyacınız var

Sonra, dağıtımınız eksikse desteksiz kalır. Değişikliklerinizin udevd tarafından görüldüğünden emin olun:

# udevcontrol reload_rules
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.