問題
Raspberry PiにUSB接続タイプのWi-Fi子機を接続して利用している場合、普通に使用していると、何らかの理由によりWi-Fi切断後、再接続してくれない
(Wi-Fi子機が本体から外された、とかではなく、AP側が死んじゃってSSIDをつかめなくなっちゃうような状態を想定)
解決策 : 再接続スクリプトを仕込んでおく
1.スクリプトを用意する
reconnect.sh
#!/bin/sh
ping -c 1 [gw_address]
test $? -eq 1 && sudo /etc/ifplugd/ifplugd.action wlan0 up
一行目 : おまじない
二行目 : ゲートウェイアドレスに向けて1発pingを打つ。うちの場合は192.168.0.254がゲートウェイなんだけど、ここは環境によって違うので、適宜修正する必要あり
三行目 : $?は直前のコマンドのexit値、pingは失敗すると、1が返ってくる。つまりゲートウェイへのpingが失敗した場合(Wi-Fi切れてるよねっていう判断)、/etc/ifplugd/ifplugd.action wlan0 up
という別のスクリプトを叩く ※補足
2.cronさんに頑張ってもらう
crontab
* * * * * sh ~pi/scripts/reconnect.sh
上記の一行をcronに追加 (crontab -eで編集)
スクリプト配置パスは適宜修正。
上記の設定で毎分スクリプトが叩かれる。
つまり、Wi-Fiが切れたとしても、1分毎に再接続を試みる。
動作確認
- Raspberry Piに対して、別のPCからpingを打ち続けておく。
- おもむろにAPを落とす。(ここでpingは失敗し出すはず)
- 適当にトイレにでも行って用を足した後、APを起動させる。
- 多分、1-2分もあれば、pingが成功し始める 。
補足
- OSはraspbian、本体はRaspberry Pi 2を使用して動作を確認
- 細かいversionは後ほど追記、多分w
-
/etc/ifplugd/ifplugd.action
は元々標準で組み込まれているスクリプトなので、別途用意したりする必要はない- tail -f /var/log/syslogをしながら、Wi-Fi子機を抜き差ししてもらえばわかるが、OS自体が抜き差し時に叩いてる恐らく由緒正しいスクリプト
- 中身はとても簡単なシェルスクリプトなので興味がある場合は見てみると良いと思う。簡単に言うと、引数でもらったインターフェースのup/downやwpa関連の面倒くさいことを自動的にやってくれている。べんり!