LoginSignup
1
3

More than 3 years have passed since last update.

Raspberry Piの起動時にローカルIPをディスプレイに表示する

Posted at

自分へのメモ書き。

背景

  • Raspberry Piに一体化して使える3.5インチのタッチスクリーンを使用している
  • RaspbianをインストールしてGUIアプリを表示させたりして遊んでいるが、画面が小さすぎてコンソールとか表示して作業するのはつらいので、各種作業はSSH越しにCUIで行っている
  • モバイルバッテリとWi-Fiで運用
  • DHCPサーバの設定で固定IPを配ればいいのだが、諸事情で今のところローカルIPが固定できていない
  • SSHログインするときにたまにローカルIPが変わっていてくやしい
  • IP調べるのに細かい画面を見ながら作業するのが億劫

目的

起動時に自分のIPをディスプレイに表示してほしい

(以前似たようなのをTwitterAPIで作った気がするが、今回はローカルIP)
TwitterのDM botをpollingベースで作ってみる(TwythonやめてRequestsでAPI直叩きにしてみた)

手段

面倒なことをしたくなかったので、Zenityで単純なダイアログを画面に表示するだけにする。
(そのうちSlackに投稿したりするのを作ってみたい)

こんな感じ

  1. cronでraspbian再起動時に自動実行
  2. ipコマンドを使ってIPを取得
  3. 適宜整形してZenityでダイアログ表示

IP取得

ipコマンドで取得した情報には色々くっついてくるので、IPアドレス以外は削る
(有線LAN側のIPを取りたければwlan0をeth0に変更)

$ ip -4 addr show wlan0 | grep -o "inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"

起動直後はxが上がっていなかったりするので、アドホックだが60秒待ってから実行することにする(ついでなので無線+有線両方取得する)

get_local_ip.sh
sleep 60
echo -n "eth0: "
ip -4 addr show eth0 | grep -o "inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"
echo -n " "
echo -n "wlan0: "
ip -4 addr show wlan0 | grep -o "inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"

ダイアログ表示

zenityを使用する。zenityはGNOMEのユーティリティで


$ zenity --info --text="hoge"

のように指定すると簡単なダイアログを表示してくれるので、
上記スクリプトの標準出力をxargsに食わせて--text=の後に与えてあげればいい。
xargsの-Iオプションで引数置換ができるので、


$ get_local_ip.sh | xargs -I{} zenity --display=:0 --info --text={}

こんな感じでOK。SSH越しに叩くことも考えてディスプレイも明示的に指定しておく。

cronで起動時に自動実行

cronを編集する。初回は編集に使用するエディタを聞かれるので適当にnanoあたりを選ぶ


$ crontab -e

@rebootと指定するとraspbianの起動時に実行してくれる。
(crondだけの再起動時にどうなるかはディストリによって異なるらしい。raspbanではcrondだけ再起動しても実行されない。)

crontabに以下を記述


@reboot /home/pi/get_local_ip.sh | xargs -I{} zenity --display=:0 --info --text={} > /home/pi/zenity.log 2>&1
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3