Làm cách nào tôi có thể thay đổi quyền trong / sys để thay đổi trạng thái của đèn LED / ánh sáng bằng cách sử dụng `udev`?


11

Tôi đã có Thinkpad và muốn sử dụng ThinkLight (đèn flash trắng phía trên màn hình được thiết kế để làm sáng bàn phím) để thông báo về các tin nhắn Jabber đến.

Thật dễ dàng để nhận ra vì người ta chỉ cần thay đổi /sys/class/leds/tpacpi::thinklight/brightnessthành 255. Tôi sẽ làm điều đó với một tập lệnh Bash đơn giản, sẽ cho phép ánh sáng nhấp nháy trong ba lần.

Nhưng để có thể làm điều này, tôi cần thay đổi các quyền, rằng không chỉ root mới có thể thay đổi tệp này.
Và tôi không muốn sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightnesssau mỗi lần khởi động.

Tôi nghĩ rằng, giải pháp tốt nhất là sử dụng udevcho việc này. Tuy nhiên, tôi chưa bao giờ sử dụng udevtrước đây và tôi khá bối rối bởi các hướng dẫn tôi tìm thấy trên mạng.

Tôi đã thử udevquy tắc này :

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

cũng như

KERNEL="thinklight", MODE="0666"

Nhưng nó không hoạt động. Mặc dù tôi không gặp lỗi trong khi chạyudevadm test /class/leds

Cảm ơn cho bất kỳ sự giúp đỡ và hit. Hoặc có thể các giải pháp khác.


ý tưởng tốt với thông báo, cũng phải làm điều đó :) cảm ơn
K1773R

Câu trả lời:


7

Tôi đang sử dụng hai quy tắc udev như sau, để cung cấp cho các thành viên của nhóm ledsquyền truy cập vào tất cả các đèn 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"

Lưu ý ACTION=="change"quy tắc là cần thiết để xử lý các thuộc tính được tạo động. Ví dụ: nếu trình kích hoạt của đèn LED được đặt thành "bộ đếm thời gian" ( echo timer > trigger), thì các thuộc tính bổ sung delay_ondelay_offđược tạo. Các changehành động được quy định để các thuộc tính mới có nhóm và cho phép họ thiết lập.

Tôi đã nhận thấy rằng một changesự kiện được tạo ra mỗi khi đèn LED tắt bằng cách viết 0để /sys/class/leds/.../brightness. Điều này có vẻ là do trình kích hoạt xóa mã trình điều khiển Linux LED mỗi khi độ sáng được đặt thành 0. Đó là lý do tại sao quy tắc thứ hai có ENV{TRIGGER}!="none"điều kiện, để ngăn chặn quy tắc kích hoạt mỗi khi tắt đèn LED.


1

Tôi nghĩ rằng bạn có cài đặt 'KernEL' sai. Từ tài liệu tuyệt vời này để viết và gỡ lỗi các quy tắc udev:

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

Tôi nghĩ rằng bạn cần KernEL = độ sáng và có lẽ là một SUBSYSTEM = led

Sau đó, trong trường hợp distro của bạn thiếu hỗ trợ inotify. Hãy chắc chắn rằng những thay đổi của bạn đang được udevd nhìn thấy:

# udevcontrol reload_rules
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.