[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でマウント中だったので、そのあおりを食らって母艦までカーネルパニックを起こす始末。くわばらくわばら。


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