Alguns dos LEDs são apenas de hardware e não há como alterar seu status programaticamente.
Os que podem ser controlados podem ser acessados através do sysfs
sistema de arquivos virtual em /sys/class/leds/
.
Se um LED específico pode ser controlado programaticamente ou não depende do hardware específico. Por exemplo, minha máquina de mesa possui alguns LEDs, mas nenhum deles parece ser controlável. Também experimentei alguns laptops e, embora houvesse algumas entradas /sys/class/leds/
, não consegui controlar o status dos LEDs, o que significa, penso eu, que o driver do kernel em particular não permite controlar manualmente o LEDs, fornecendo uma interface somente leitura. Aqui está o que eu tentei, sem efeito:
# cd /sys/class/leds/
# ls
ath9k-phy0
# cd ./ath9k-phy0
# ls
brightness device max_brightness power subsystem trigger uevent
# cat ./trigger
[none] AC-online BAT0-charging-or-full BAT0-charging BAT0-full BAT0-charging-blink-full-solid usb-gadget usb-host cpu0 cpu1 rfkill1 phy0rx phy0tx phy0assoc phy0radio phy0tpt rfkill4
# echo 'AC-online' > ./trigger
# cat ./trigger
none [AC-online] BAT0-charging-or-full BAT0-charging BAT0-full BAT0-charging-blink-full-solid usb-gadget usb-host cpu0 cpu1 rfkill1 phy0rx phy0tx phy0assoc phy0radio phy0tpt rfkill4
# echo 'none' > ./trigger
# echo 'phy0rx' > ./trigger
# echo 'none' > ./trigger
# cat ./trigger
[none] AC-online BAT0-charging-or-full BAT0-charging BAT0-full BAT0-charging-blink-full-solid usb-gadget usb-host cpu0 cpu1 rfkill1 phy0rx phy0tx phy0assoc phy0radio phy0tpt rfkill4
# cat ./brightness
0
# cat ./max_brightness
255
# echo 255 > ./brightness
Algo parecido com o acima deve, em teoria, permitir que você controle os LEDs suportados pelos drivers do kernel para o hardware específico. Se não houver suporte para controlar um LED específico no kernel, então, antes de escrever um módulo do kernel, não há muito o que fazer.
Aqui está mais informações sobre o assunto em superusuário.
Aqui está a fonte definitiva: documentação do kernel