ฉันจะเปลี่ยนการอนุญาตใน / sys เพื่อเปลี่ยนสถานะของไฟ LED / แสงโดยใช้ 'udev' ได้อย่างไร


11

ฉันมี Thinkpad และต้องการใช้ ThinkLight (แสงแฟลชสีขาวด้านบนหน้าจอที่ออกแบบมาเพื่อเพิ่มความสว่างของแป้นพิมพ์) สำหรับการแจ้งเตือนข้อความ Jabber ที่เข้ามา

เป็นเรื่องง่ายที่จะเข้าใจเพราะหนึ่งต้องการเปลี่ยน/sys/class/leds/tpacpi::thinklight/brightnessเป็น 255 เท่านั้นฉันจะใช้ Bash script ง่ายๆซึ่งจะทำให้ไฟกะพริบสามครั้ง

แต่เพื่อให้สามารถทำสิ่งนี้ได้ฉันต้องเปลี่ยนการอนุญาตไม่ใช่แค่รูทเท่านั้นที่สามารถเปลี่ยนไฟล์นี้ได้
และฉันไม่ต้องการ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

ขอบคุณสำหรับความช่วยเหลือและความนิยม หรืออาจแก้ปัญหาอื่น ๆ


ความคิดที่ดีกับการแจ้งเตือนก็ต้องทำเช่นกัน :) ขอบคุณ
K1773R

คำตอบ:


7

ฉันใช้สองกฎ udev ดังต่อไปนี้เพื่อให้สมาชิกของกลุ่มledsเข้าถึง LED ทั้งหมด:

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การระบุการดำเนินการเพื่อให้แอตทริบิวต์ใหม่เหล่านี้มีกลุ่มและสิทธิ์ตั้งค่า

ฉันได้สังเกตเห็นว่าchangeเหตุการณ์จะเกิดขึ้นทุกครั้งไฟ LED ถูกปิดโดยการเขียนเพื่อ0 /sys/class/leds/.../brightnessนี้น่าจะเกิดจากการขับรถรหัสลินุกซ์ LED 0ทริกเกอร์หักบัญชีเมื่อใดก็ตามที่ความสว่างมีการตั้งค่า นั่นคือเหตุผลที่กฎข้อที่สองมีENV{TRIGGER}!="none"เงื่อนไขเพื่อป้องกันกฎที่เรียกใช้ทุกครั้งที่ LED ถูกปิด


1

ฉันคิดว่าคุณมีการตั้งค่า 'KERNEL' ผิด จากเอกสารที่ยอดเยี่ยมนี้สำหรับการเขียนและการดีบักกฎ udev:

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

ฉันคิดว่าคุณต้องการ KERNEL = ความสว่างและอาจเป็นระบบย่อย = นำ

จากนั้นในกรณีที่ distro ของคุณขาดการสนับสนุน ตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงของคุณถูกมองเห็นโดย udevd:

# udevcontrol reload_rules
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.