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/부여하기 위해 아래와 같이 두 개의 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 드라이버 코드 지우기가 실행되기 때문인 것으로 보입니다. 그래서 두 번째 규칙에는 LED가 꺼질 때마다 규칙이 실행되지 않도록 하는 조건이 있습니다.0/sys/class/leds/.../brightness0ENV{TRIGGER}!="none"

내 테스트에 따르면 커널 5.4에서는 밝기가 0으로 설정되면 변경 이벤트가 더 이상 발생하지 않습니다. Linux git 저장소를 살펴보면 이 문제가 커널 4.9에서 수정된 것 같습니다. 따라서 4.9 이상의 커널에서는 ENV{TRIGGER}!="none"규칙의 두 번째 부분이 필요하지 않습니다.

답변2

"커널" 설정이 잘못된 것 같습니다. udev 규칙 작성 및 디버깅에 대한 훌륭한 문서에서:

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

KERNEL=밝기 및 SUBSYSTEM=LED가 필요할 것 같습니다.

그런 다음 배포판에 inotify 지원이 부족한 경우. udevd가 변경 사항을 볼 수 있는지 확인하세요:

# udevcontrol reload_rules

관련 정보