2017年7月19日水曜日

Raspberry Piの本体LEDを消灯する方法

Raspberry Piは、電源LED(PWR LED / 赤色)とMicroSDカードへのアクセス時に点灯するLED(ACT LED / 緑色)の2種類が付いているが、特に電源LEDは常時点灯であるため、夜になって部屋を暗くすると目障りとなることがある。


Raspberry Piの本体LEDは、OS(Raspbian)から動作を制御することができるので、その方法を記載する。

LED消灯手順

LEDを制御するためのファイルは以下に存在する。

/sys/class/leds/led0   ←ACT LED / 緑色
/sys/class/leds/led1   ←PWR LED / 赤色

上記パスにあるtriggerというファイルに、LED点灯のトリガーが記載されているので確認してみよう。

$ cat /sys/class/leds/led0/trigger
------------------------------
none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on input panic [mmc0] mmc1 rfkill0 rfkill1 
------------------------------

$ cat /sys/class/leds/led1/trigger
------------------------------
none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on [input] panic mmc0 mmc1 rfkill0 rfkill1 
------------------------------

[]で囲まれた箇所が現在の設定となっており、led0はmmc0、led1はinputとなっていることがわかる。他にも多数の項目があるようだが、とりあえず消灯するだけであれば、"none"を選択すればよい。

なお、"none"の設定にした場合は、同一パスにあるbrightnessというファイルの設定も修正が必要となる。brightnessは0が消灯で0以外の数値(例えば1や255)が点灯となる。ACT LEDについては、デフォルトでbrightnessが0となっているので消灯する場合は設定は不要となるが、PWR LEDの場合は255で設定されているので、0に設定する。

以上をまとめると、以下3行のコマンドで両方のLEDの消灯が実現できる。

<ACT LEDを消灯>
$ echo none | sudo tee /sys/class/leds/led0/trigger

<PWR LEDを消灯>
$ echo none | sudo tee /sys/class/leds/led1/trigger
$ echo 0 | sudo tee /sys/class/leds/led1/brightness

再起動後も消灯する方法

上記の消灯設定は、本体再起動をするとリセットされてしまう。再起動時にも消灯したい場合は、"rc.local"ファイルにコマンドを追記する。

$ cat /etc/rc.local
------------------------------
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# Turn off LED
echo none | sudo tee /sys/class/leds/led0/trigger   ←★追記
echo none | sudo tee /sys/class/leds/led1/trigger   ←★追記
echo 0 | sudo tee /sys/class/leds/led1/brightness   ←★追記

exit 0
------------------------------

参考

・Controlling Raspberry Pi 2 LEDs
https://gist.github.com/taktran/1b691c08216dd30b70bf