ifplugd+waproamd で自動接続


note PC は通常有線 (eth0) でネットワークに接続しているが、 ミーティングの時等は無線 (ath0) にして持ち運びたい。 そこら辺の切り替えを自動で行なう様にしておく。 ifplugd は interface の link 状態を監視するもので、 状態が変化した時に好きな動作を行なわせる事が出来る。

LAN ケーブルが抜かれた時に ifdown eth0/etc/init.d/waproamd start を行なって無線に切り替え、 LAN ケーブルが挿された時には逆を行なって有線に切り替える、 という様に設定した。他にもっと正当な方法が有る気もするが。

ifplugd の install と基本設定

# apt-get install ifplugd
install 時の設定事項は /etc/default/ifplugd に書き込まれる。 ARGS を少し変更した。
/etc/default/ifplugd
INTERFACES="eth0"
HOTPLUG_INTERFACES=""
ARGS="-q -f -w -I -b"
SUSPEND_ACTION="stop"

waproamd の設定の変更

別のところで書いた通り waproamd の設定を済ませ、 自動で無線接続が有効になる様にしておく。

ifplugd の動作設定

interface の link の状態が変わった時、 ifplugd は /etc/ifplugd/action.d 内のファイルを実行する。 ここでは既存の ifupdown を変更するだけで充分で、 waproamd の起動と停止の処理を追加した。
/etc/ifplugd/action.d/ifupdown
#!/bin/sh
set -e

beep -f 880
case "$2" in
up)
        ps -C waproamd >/dev/null && /etc/init.d/waproamd stop
        sleep 1
        /sbin/ifup $1
        ;;
down)
        /sbin/ifdown $1
        /etc/init.d/waproamd start
        ;;
esac
beep -f 880
sleep 1 が無いと、 network routing の設定の一部が失われて接続できなくなる。 waproamd が完全に終了する前に ifup eth0 が実行される事が原因みたいだが、良く分からない。