NetWalkerでDUNをボタンひとつで接続/切断

ごきげんよう


11月2日のblogで試していたNotify-OSDを有効活用できるようにしまひた。
DUN成功したとき。
http://www.misao.gr.jp/~subaru/PhotoStrage/091105_1.png
DUN失敗したとき。
http://www.misao.gr.jp/~subaru/PhotoStrage/091105_2.png
DUN切断したとき。
http://www.misao.gr.jp/~subaru/PhotoStrage/091105_3.png
こんなかんじでポップアップしてくれまふ。zenity でも良いのだけど、notifyのほうがかわいらしいのでふ。
ポイントは、ponするときにユーザがdipにいないといけないようでふので

subaru@subaru:~$ sudo adduser subaru dip
ユーザ `subaru' をグループ `dip' に追加しています...
ユーザ subaru をグループ dip に追加
終了。
subaru@subaru:~$ 

を、先にしてあげておきまひょう。あとはgawkがデフォルトで入ってないので入れる。んで、以下のよーなすくりぷとを作っておいて、クイックスタートボタンのどれかに指定しておくと、ボタンひとつでDUNのON/OFFができるようになりまひた。
ほんとうはクイックスタートボタンではなくて、Fn + 2 に割り当てたいのだけど、Fnのキーマップがどうやってとっていいのかわからず、あきらめちう。もうちょっとWEBさーひんして調べよう・・・。Fn + 2に割り当てれればもっと操作性があがるんだけどなぁ。くいっくすたーとぼたんは押しにくい。押してないね。さわってるだけだね。
あとはー、hciconfig hci0 up/down するときにroot権限が必要なんだけど、回避する方法がわからなくって、expectで逃げようと思ったのだけど、sudo の問いかけをひっかけられなくて、断念。しかたがないのでgksudoにしまひた。
まぁ、以下のスクリプトで動いているのでいーんでふ。すばはぷろぐらまーじゃないので、エクセルしか使えないSEなので、もっときれいに書き直したら教えてくださひ。

#!/bin/sh

#----------------------------------------
LANG=C
MYPPP=ppp0
MYDEV=★★★★★★★★★★★★
MYHCIDEV=hci0
MYPROV=em
TIMER=20
IMGOK=/home/subaru/myconf/OK.jpg
IMGNG=/home/subaru/myconf/NG.jpg
#----------------------------------------


#----------------------------------------
sub_notify() {
 echo "TRACE notifyよびだし"
 notify-send -u critical -i $1 $2 $3
}

sub_myip() {
 echo "TRACE IPチェック"
 MYIP=`/sbin/ifconfig $MYPPP 2>/dev/null | grep 'inet addr' | gawk '{print $2;}' | gawk -F : '{print $2;}'`
 echo "TRACE IP -> $MYIP"
}


#----------------------------------------
#DUN中は切断
sub_myip
if [ $MYIP ];then
 echo "TRACE IPがある。poff実行。"
 poff
 sub_myip
 if [ $MYIP ];then
  echo "TRACE IPがある。poff失敗。"
  sub_notify $IMGNG "失敗" "DUNの切断に失敗したじぇ。。。"
  exit
 else
  echo "TRACE IPがない。poff成功。"
  gksudo /usr/sbin/hciconfig $MYHCIDEV down
  sub_notify $IMGOK "成功" "DUNを切断したじぇ!"
  exit
 fi  
else
 echo "TRACE IPがない"
fi


#----------------------------------------
#Deviceのチェック
devstatus=`hcitool dev | grep $MYHCIDEV | gawk '{print $2;}' | sed -e 's/\://g'`
echo "TRACE DeviceID -> $devstatus"

if [ "$MYDEV" != "$devstatus" ]; then
 #hcitool devでドングルが認識されていない時
 echo "TRACE ドングルがオフライン。UP実施。"
 #ドングルの起動を実施
 gksudo /usr/sbin/hciconfig $MYHCIDEV up
 if [ $? -ne 0 ]; then
  #UPできない時はあきらめるしかない
  echo "TRACE ドングルがささってないか認識されてない"
  sub_notify $IMGNG "えらー" "ドングルがささってないか認識されてないじぇ。再起動しかないじぇ。。。"
  exit
 else
  echo "TRACE ドングルのオンライン化に成功。"
 fi
else
 echo "TRACE ドングルはオンライン"
fi


#----------------------------------------
#pon実行
pon $MYPROV
while [ $TIMER -gt 0 ];do
 sleep 1
 sub_myip
 if [ $MYIP ];then
  echo "TRACE IPがある。"
   sub_notify $IMGOK "成功" "DUNしたじぇ!現在のIPは$MYIPだじぇ!"
   exit
  else
   echo "TRACE IPがない。"
 fi  
 echo "TRACE 残り待ち時間 $TIMER 秒。"
 TIMER=`expr $TIMER - 1`
done

sub_notify $IMGNG "失敗" "DUN失敗だじぇ。。。"
exit