趣味的なIT・ネットの話題

Raspberry PiでIoTなシステム開発:echoのリダイレクトはsudoで実行してもリダイレクト部分だけsudoを実行したユーザーとして実行される

Raspberry PiのオンボードLEDをコントロールする方法が無いかと検索していたら、こちらの記事を発見。

Can we control the on-board leds

[コラム] Raspberry Pi 2のオンボードLEDを自由に光らせよう

どのキーワードに括弧書きを付けているかをechoで変更するので何かおかしいなと思っていたら、nanoで手動で書き換えても元に戻ります。これは一種のデバイスファイルで、読み取りが状態表示、キーワードの書き込みがデバイスに対する操作を行っているのだと思います。

で、指示通りsuでrootになって作業をしたらちゃんとコントロールできたのですが、sudoで実行したらエラー。

pi@raspberrypi:~ $ sudo echo heartbeat > /sys/class/leds/led0/trigger 
-bash: /sys/class/leds/led0/trigger: Permission denied

suだとスクリプトから実行しにくいですし、rootになったまま他の作業を実施してしまいそうで怖いんです。で、調べてみるとリダイレクトするとリダイレクト部分だけがsudoの実行元のユーザーが実行されてしまうとのこと。なのでリダイレクトではなくパイプで渡して、渡された先でteeを使ってファイルに書き込むとエラーになりませんでした。

pi@raspberrypi:~ $ echo none | sudo tee /sys/class/leds/led0/trigger 
none
pi@raspberrypi:~ $ echo heartbeat | sudo tee /sys/class/leds/led0/trigger 
heartbeat

この通り実行してみるとチカッチカッと。

GPIOに連動させる設定にしてサーバーアプリの状態監視に使う予定です。


Facebooktwitterpinterestlinkedinmail
納得したらすぐにシェア!