Shino's Bar

走れパピーPuppy Linux core logo

14 May 2009 (初出) Go to走れパピー 目次

無線LAN接続先をチェックする

ThinkPad X21 に Puppy Linuxをインストールし、AirStationに無線LAN接続しました。 接続設定を保存しておけばパピーは立ち上がり時に自動的に接続してくれます。 しかし、ひとつ問題があります。

保存された設定で接続を試みるが失敗した場合、パピーは他を探して可能なところがあればそこに接続します。 親切仕様みたいですが、困ることもあります。 代替の接続先は必ずしもインターネットに接続されているとは限りません。 また我が家ではホームLANみたいなものを構成しているので、他のネットに繋げられると、ホームLAN内の他のパソコンにアクセスできなくなります。

手動でチェックする

そこで接続先が正しいかどうかをチェックすることにしました。 我が家の場合、正しいIPは 192.168.11.??? のはずです。 192.168.1.??? や 169.254.なんとか(これは繋がらないときのデフォルトか?) などになったら 不正常。 IPは次の コマンド で チェック できます。 インターフェースはBUFFALO WLI-CB-AG54Lでは ath0ですが、機器によって wlan0 など異なった名前になります。 分からなければインターフェース指定なしで、ただ ifconfig と入力すれば見つかります。

ifconfig ath0

パピーの自動接続はスクリプト /etc/rc.d/rc.network をバックグラウンドで動かすことで行っています。 このスクリプトの終了を待って IPをチェック、 正しくなければ rc.networkをいったん停止してやり直します。

/etc/rc.d/rc.network stop
/etc/rc.d/rc.network start

自動チェックのスクリプト

以上を毎回手動でやるのはたいへんなので、これを自動化するスクリプトを作りました。 バックグラウンドで動かすと不具合があったので、Xが立ち上がってから仮想端末上で実行することとしました。

使ったスクリプト checknet, aircheck, refreshairの3つはこちらに用意しています。 環境に合わせ変更し実行属性を付けて /root/my_applications/bin などパスの通った場所に置いてください。

aircheck へのリンクを作り /root/Startup に置きます。 このディレクトリに置かれたプログラムは Xが起動したときに自動的に実行されます。 aircheckは仮想端末を立ち上げて checknetを実行します。 正しく接続されるまで何度も繰り返します。 中止したいときは仮想端末のウィンドウを閉じてください。

refreshairは現在の接続を強制的に閉じてやり直したいときに使います。 デスクトップにアイコンを作るなどして、必要なときにクリックしてください。

各スクリプトの内容と変更すべきところ

  1. checknetは以下のような内容です。冒頭の ADEV, EDEVを自分の環境に合わせて変更してください。 それぞれの インターフェース名は ifconfig コマンドで分かります。
  2. #!/bin/bash
    # 14 May 2009 Masaki Shinomiya 
    ADEV=ath0
    EDEV=eth0
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
    ADDRESS="inet.addr:$1"
    RCNETWORK=/etc/rc.d/rc.network
    OKSOUND=/usr/share/audio/2barks.au
    MYNAME=$(basename $0)
    RUN=yes
    while ps x | grep -v grep| grep -q $RCNETWORK
    do
    	echo 'Waiting...	ネットワークの処理が終わるのを待っています'
    	sleep 10
    done
    sleep 2
    until
    	[ "$REFRESH" = "" ] && ( ifconfig $ADEV | grep $ADDRESS || ifconfig $EDEV | grep $ADDRESS )
    do
    	if [ "$REFRESH" = "" ] 
        then ifconfig $ADEV | grep 'inet.addr:' || ifconfig $EDEV | grep 'inet.addr:' && echo "Ilegal connection.	接続先が正しくありません。"
        fi
        REFRESH=
    	echo 'Disconnecting.	ネットワークを切断します'
        $RCNETWORK stop
        sleep 5
    	echo 'Connecting... 	ネットワークへの接続を試しています'
        #ps x | grep -v grep| grep $RCNETWORK || $RCNETWORK restart
        $RCNETWORK restart
        sleep 5
    done
    echo 'Connected.	ネットワークに接続しました'
    [ -f $OKSOUND ] && aplay -q $OKSOUND
    sleep 5
    
  3. aircheckは次のような内容です。 checknetを呼び出すときの引数 192.168.11 を自分の環境に合わせて変更してください。
  4. #!/bin/bash
    TERMINAL=/usr/bin/urxvt
    [ -e "$TERMINAL" ]  || TERMINAL=/usr/bin/rxvt
    $TERMINAL -bg  3 -fg 4 -e checknet 192.168.11
    
  5. refreshairは次のような内容です。 環境変数 REFRESHをセットして aircheckを 呼び出すだけです。 変更する必要はありません。
  6. #!/bin/bash
    REFRESH=yes aircheck