自分へのメモ書き。
背景
- 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に投稿したりするのを作ってみたい)
こんな感じ
- cronでraspbian再起動時に自動実行
- ipコマンドを使ってIPを取得
- 適宜整形して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秒待ってから実行することにする(ついでなので無線+有線両方取得する)
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