Как я могу изменить разрешения в / sys для изменения состояния светодиода / подсветки с помощью `udev`?

11

У меня есть Thinkpad и я хотел бы использовать ThinkLight (белая вспышка над экраном, предназначенная для подсветки клавиатуры) для уведомлений о входящих сообщениях Jabber.

Это легко реализовать, так как нужно всего лишь перейти /sys/class/leds/tpacpi::thinklight/brightnessна 255. Я сделаю это с помощью простого сценария Bash, который позволит свету мигать три раза.

Но чтобы сделать это, мне нужно изменить права, чтобы не только 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

Спасибо за любую помощь и хиты. Или, может быть, другие решения.

Torbjörn
источник
хорошая идея с уведомлением, должен сделать это тоже :) спасибо
K1773R

Ответы:

7

Я использую два правила 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"правило необходимо для обработки динамически создаваемых атрибутов. Например, если триггер светодиода установлен на «таймер» ( echo timer > trigger), то дополнительные атрибуты delay_onи delay_offсоздаются. changeДействие задается так , что эти новые атрибуты их группы и права доступа установлены.

Я заметил , что changeсобытие генерируется каждый раз , когда светодиод выключен путем записи 0в /sys/class/leds/.../brightness. По-видимому, это происходит из-за того, что очистка кода драйвера светодиода Linux запускается при установке яркости 0. Вот почему второе правило имеет ENV{TRIGGER}!="none"условие, чтобы предотвратить запуск правила каждый раз, когда светодиод выключен.

Крейг МакКуин
источник
1

Я думаю, что у вас неправильная настройка «KERNEL». Из этого замечательного документа по написанию и отладке правил udev:

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

Я думаю, что вам нужен KERNEL = яркость, и, возможно, SUBSYSTEM = светодиоды

Затем, если вашему дистрибутиву не хватает поддержки inotify. Убедитесь, что ваши изменения видят udevd:

# udevcontrol reload_rules
многочлен
источник