« [Palm]WristPDA用SDK | Main | [iPod touch]曲再生の一時停止、再開、状態取得等ができるiPod touch用コマンドラインアプリケーションmmpctl »

2007.11.30

[iPod touch]WiFiをON/OFFするiPod touch用コマンドラインアプリケーションwifictlとWiFiSwitch.app

iPod touchが返ってきたので、iPod touch用いじりを再開。

Services.appのソースを発見したので、前から欲しいと思っていたWiFiのON/OFFをコントロールするコマンドラインアプリケーションを作ってみました。

名前は「wifictl」ということにしました。

SummerBoardからWiFiのON/OFFを一発で切り替えるフロントエンド、「WiFiSwitch.app」というものもついでに作りました。こっちはシェルスクリプトアプリケーションです。

インストール

いつもの野良リポジトリからどうぞ。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

「Utilities > wifictl」
「Utilities > WiFiSwitch」

をインストールしてください。

BSD Subsystemもインストールしていないと困るでしょう。

無保証です。

ソースコードは開示請求があれば公開します。Services.appにならい、GPL v3 or laterです。

wifictlの使い方

使い方: wifictl [オプション]

例)# wifictl -t

-o WiFiをonにします。
-f WiFiをoffにします。
-t WiFiをonとoffの間でトグルします。WiFiSwitch.appはこのオプションを使ってます。
-g WiFiの状態を数値で返します。on時は1、off時は0が返ってきます。
-h ヘルプを表示します。

WiFiSwitch.appの使い方

あらかじめwifictlをインストールしておく必要があります。
SummerBoardに表示されたWiFiSwitch.appをタップして起動です。
WiFiがoffのときに起動するとWiFiをonにします。
WiFiがonのときに起動するとWiFiをoffにします。
ワンタップでWiFiのon/offを切り替えられるわけです。

高度な使い方

本来、これはcron(もしくはlaunchd)を使った自動巡回のために作りました。

例えば以下のようなシェルスクリプトを書きます。

#!/bin/sh

off_flag=1

ifconfig en0 | grep "inet" >/dev/null

if [ $? -eq 1 ]; then
    if [ `wifictl -g` -eq 0 ]; then
    wifictl -o
    count=15
    while [ ${count} -ge 0 ]; do
        ifconfig en0 | grep "inet" >/dev/null
        if [ $? -eq 0 ]; then
        break
        fi
        count=`expr ${count} - 1`
        sleep 1
    done
    fi
else
    off_flag=0
fi

if [ $? -eq 0 ]; then
    #do something
    echo "do something"
    if [ ${off_flag} -eq 1 ]; then
    wifictl -f
    fi
fi

WiFiがoffの場合、onにして、オンラインになるまでの待ち時間を作っています。
「do something」のところにネットワークに接続する内容の処理を書きます。
これを「wificron.sh」という名前で「/var/root/bin」に実行権を付けて保存したとします。

iPod touch上のターミナル、もしくはssh越しのシェルから、「crontab -e」を実行し、起動したviで以下のように入力します。viの操作は……ググってください。

*/30     *       *       *       *       /var/root/bin/wificron.sh

「:wq」で保存して終了すると、以後30分おきにスクリプトが自動実行されます。
WiFiがつながる場所ならば、これでふだんはWiFiをoffにしておいても、スクリプト内でWiFiをonにし、処理が終わったら再度offにするということができます。
元々onだった場合は、WiFiはonのままです。

ちなみに、launchdでもplistの書き方次第でcronのような定期実行ができるはずです。

標準状態ではcronが動いていないかもしれません。
Community Sourceをインストールし、Installer.appからUlctlをダウンロードしてきて、「com.apple.cron」をloadしてみてください。

惜しむらくは、音楽を再生していない状態でロック状態に移行すると、「cronが止まる」ことです。
まあ、所詮はWiFiですし、ままごとですね。でも、こう……なんかwktkしませんか。

この気持ち、共有したい。

ちなみに、野良リポジトリにあるfliteとErica's Utilities収録のplayaudioで音声合成が、また、後でエントリをしますが、拙作のコマンドラインアプリケーションmmpctlでplayaudio後のpause状態から再生状態への復帰が可能です。

これによって、音楽を聴いている最中でも、処理結果を音声合成で、ヘッドフォン経由にてNotificationすることができます。
こういう音声インターフェイスが「来る」んじゃないかと思ってますが、なかなかこれというモバイルデバイスが出ませんね。iPhoneにはそれを期待してたんですけどね。

話題はちょっと変わって以前fliteでローマ字読み上げをしようと思って一生懸命テーブルを作っていたことがあるんですが、濁音辺りで挫折。僕が心の師匠と勝手に仰いでいる「カビパン男と私」さんが、最近「日本語テキスト読み上げ(ガイジン風)」という記事でやってくれてました! これで、ひらがなとかなら読み上げさせることができますね。

ちなみに、fliteで漢字仮名まじり文を読み上げさせようと思ってkakasiをiPod touch向けにビルドしてみたんですが、メモリ不足でターミナルが吹っ飛び、ターミナルが吹っ飛んだ後もkakasiがメモリを食らい続け、最後には強制的に再起動がかかりました。iPhoneDiskでマウント中だったので、そのあおりを食らって母艦までカーネルパニックを起こす始末。くわばらくわばら。

|

« [Palm]WristPDA用SDK | Main | [iPod touch]曲再生の一時停止、再開、状態取得等ができるiPod touch用コマンドラインアプリケーションmmpctl »

Comments

はじめまして。トラックバックありがとうございます。iPod もいろいろ楽しそうですね。うちにある Linux をインストールできそうなものといえば、ニンテンドー DS かなあ。

Posted by: カビパン男と私 | 2007.11.30 at 04:12 PM

これは師匠! Zaurus向けのメモ書き時代から拝見させていただいてます。fliteのテーブル(力作!)は後で引用させてもらおうと思っています。
iPod touch面白いですよ。
本当に実用するならZaurusしかありませんが、このサイズの機器でUnix、しかも感性に訴えるUIを完備、というところが何ともたまらんです。

Posted by: moyashi | 2007.11.30 at 09:17 PM

こんにちは、いつもtouchの数々のソフト便利に使わせて貰ってます。このWiFiSwitch(wifictl)もバッテリーの節約に大変重宝しているのですが、一つお願いが有ります。
メールやカレンダーの様にアイコンの上にバッジとして、その時のWiFiの状態を表示するように変更して貰えないでしょうか?ただON/OFFの表示があるだけで、良いのですが。
それだけで、更に便利になりますのでご検討をお願い致します。

Posted by: touchの助 | 2008.03.20 at 10:15 AM

コメントありがとうございます。
自分でもそうできるといいだろなあと思うので、要望としてはよく分かります。
そういうことをするためには常駐しないといけないんですが、wifictlはその場で起動してすぐ終了する作りなので、抜本的な作り直しをしないとバッヂの表示はできないのです。
ON専用アイコン、OFF専用アイコンを用意するという次善の策はありますが、それはどうでしょう。
これなら、現状がどっちなのか意識する必要がありません。
アイコンが二つ必要なので、場所を食いますが。

Posted by: moyashi | 2008.03.22 at 05:19 AM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/13760/17218216

Listed below are links to weblogs that reference [iPod touch]WiFiをON/OFFするiPod touch用コマンドラインアプリケーションwifictlとWiFiSwitch.app:

« [Palm]WristPDA用SDK | Main | [iPod touch]曲再生の一時停止、再開、状態取得等ができるiPod touch用コマンドラインアプリケーションmmpctl »