Alguns dos LEDs são somente de hardware e não há como alterar seu status programaticamente.
Aqueles que podem ser controlados podem ser acessados através do sistema de arquivos sysfs
virtual em /sys/class/leds/
.
Se um determinado LED pode ser controlado programaticamente ou não, depende do hardware específico. Por exemplo, minha máquina de mesa tem alguns LEDs, mas nenhum deles parece ser controlável. Também experimentei alguns laptops e, embora houvesse algumas entradas em /sys/class/leds/
, não consegui controlar o status dos LEDs, o que significa, acredito, que o driver do kernel em particular não permite controlando manualmente os 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 que são suportados pelos drivers do kernel para o hardware em particular. Se não há suporte para controlar um determinado LED no kernel, então, além de escrever um módulo do kernel, não há muito o que fazer.
Veja mais informações sobre o assunto no superusuário.
Esta é a melhor fonte: documentação do kernel