続・Windows経由でネットワーク接続

昨日悩んでいた「SL-A300を社内LANや自宅のルータにLANで繋がっているWindowsマシン経由でネットワーク接続する方法」は、結局WindowsXPのネットワークブリッジ機能を使うことで上手く出来た。

ネットワークブリッジの作成

[スタート]メニューから「設定」の「コントロール パネル」の「ネットワーク接続」に「ローカル エリア接続」があるから、これとSL-A300を繋いだときに現れる「ローカル エリア接続 2」を選択して、右クリックし、「ブリッジ接続」をクリックすると、「ネットワーク ブリッジ (ネットワーク ブリッジ)」のアイコンが新たに出来上がる。

PCに固定でIPアドレスを割り振っている場合(DHCPサーバが無い場合)

ネットワークブリッジを作成するとローカルエリア接続もローカルエリア接続2も同じIPアドレスを使うことになるし、初期状態ではIPアドレスを自動的に取得するになっているので、固定でIPアドレスを割り振っているウチの社内LANなんかの場合はネットワークブリッジを開いてIPアドレスの設定をやり直す必要がある。

SL-A300IPアドレス設定(DHCPサーバが無い場合)

Windowsマシンに固定でIPアドレスを割り振っちゃうと、SL-A300とネットワークが違う場合は接続できなくなるので、SL-A300側のIPアドレスを既にあるネットワークに合わせてやる。これは設定のホーム画面にあるPCリンク設定から変更できる。ただ、変更後は一度WindowsマシンからUSBケーブルを抜いて、再度繋いでやらないと設定が反映されないので注意。ウチの場合はPCが192.168.0.2だったので、SL-A300用に192.168.0.78を設定した。

SL-A300デフォルトゲートウェイDNSサーバを設定(DHCPサーバが無い場合)

残念ながら、PCリンク設定にはそんな項目ないのでtelnetSL-A300にログインして設定する。[スタート]メニューから「ファイル名を指定して実行」で「telnet sla300」と入力して、「root」でログインする。
デフォルトゲートウェイはrouteコマンドで設定する。これは再起動しちゃうと設定が消えてしまうので、必要に応じて毎回やる。

route add -net default gw 192.168.0.1

DNSサーバの設定は/etc/resolv.confに追記することで設定する。DNSサーバが219.99.78.2の場合は下記のように入力する。DNSサーバが2つある場合は下記のコマンドをIPアドレスを変えて2回入力する。

echo nameserver 219.99.78.2>>/etc/resolv.conf

DHCPサーバがある場合

で、これらの設定を毎回行うのは面倒だし、そもそも最近は普通ブロードバンドルータとかDHCPサーバがあるのが当たり前だから、そっちに合わせた設定にしてみようと思う。
(うちはDHCPサーバが無いんだけど、DHCP95(http://www.t3.rim.or.jp/~temple/software.html)をWindowsマシンにインストールして個人的なDHCPサーバを立ててやってみた。)
そうなるとSL-A300DHCPサーバとして動かれると元々あるDHCPサーバと競合しかねないし、SL-A300DHCPクライアントにする方が設定も楽なので、SL-A300の設定を変更する。

SL-A300DHCPクライアントにする

この手の設定はPCリンク設定で行った設定が保存されている/etc/hotplug/usbdnet.confに保存されているので、これを下記の手順で書き換える。

# cat > /etc/hotplug/usbdnet.conf
DHCPS=no
DHCPC=yes
(ここで Ctrl を押しながら D を押す。)
# exit

これで一度WindowsマシンからUSBケーブルを抜いて、再度繋いでやればSL-A300DHCPサーバからIPアドレスとかが割り振られる。何が割り振られたかは「telnet sla300」としてrootでログインし、「ifconfig -a」でIPアドレスサブネットマスクが、「route」でデフォルトゲートウェイが、「cat /etc/resolv.conf」でDNSサーバが確認できる。

メールソフトやWebブラウザを使う

これでSL-A300Windowsマシン経由でインターネットに接続できる状態になってるので、早速、アプリケーションのホーム画面からメールを起動。あら、ホストが見つからないって怒られる(汗)
続いて、WebブラウザとしてKonqueror-ja(http://zaurus-ja.sourceforge.jp/konqueror-ja.html)をダウンロードしてインストール。そしてアプリケーションのホーム画面に出来たWeb Browserを起動。こっちもホストが見つからないって怒られた。
どうやらUSBネットワーク接続時にNetFrontからアクセスできるようにするのと同じように、ダミーで赤外線ダイヤルアップ接続を作っておき、ターミナルから「qcop QPE/Network "up()"」として、タスクバーの地球アイコンの×を消してやると、メールもWeb Browserも使えるようになった。
Konqueror-jaはデフォルトでは日本語表示が出来ないので、左上の[File]アイコンから「Preferences...」を選択して、「Appearance」のタブを選択し、Default Fontをhelveticaから「lcfont」に変更すると、ちゃんと日本語が表示されるようになる。

qcopコマンドを自動的に実行する

USB接続した際に/etc/hotplug/usbd.funcってシェルスクリプトのusbd_net_if_upって関数が呼び出されるらしいので、ここにqcopコマンドを記述することでUSB接続されたらネットワークが自動的に有効になるようにしてみた。
viエディタで/etc/hotplug/usbd.funcを開き、usbd_net_if_down()って行の少し前にqcopコマンドを追加する。この時、QTDIRを設定しておかないと正常に動かないので直前で設定する行を追加する。以下、その近辺の抜粋。

        fi
        export QTDIR=/home/QtPalmtop ←【追加】
        /home/QtPalmtop/bin/qcop QPE/Network 'up()' ←【追加】
}

usbd_net_if_down()

あと、usbd_net_if_downはUSB接続が切り離された時に実行されると思うんだけど、こいつはちゃんと動いてないらしい。まあ、ネットワーク切断はアイコンから出来るからいいや。以下は参考にしたサイト。

atd下ではqcopが実行できない?
http://tacchang.cocolog-nifty.com/kougaku/2004/01/atdqcop.html
usbdnetの設定
http://home.opaopa.org/zaurus/index.html#usbdnet

USB経由でネットワーク接続するためのパッケージ

やはり偉大な先人達がおりました(苦笑)
humorum さんの ZaurusUsbnet(http://paipai.org/~humorum/pukiwiki/pukiwiki.php?ZaurusUsbnet)のページから、WindowsDHCPサーバ、ZaurusDHCPクライアントにする方法のパッケージとして usbdnetconf-for-dhcp-client_2.4.18-1_noarch.ipk が、塚本さんの Linuxザウルス/ダウンロード(http://digit.que.ne.jp/visit/index.cgi?Linux%A5%B6%A5%A6%A5%EB%A5%B9%2F%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9#i5)のページから、地球アイコンをQtメニューに追加のパッケージとして netupicon_0.1.0_arm.ipk が公開されてるので、それぞれダウンロードしてインストール。
これでUSBで繋いだ際にWindows側のネットワークを通してDHCPサーバからザウルスがIPアドレスなどを割り振られるようになり、Qtメニューから「インターネットに接続(擬似)」を選択することでネットワークに繋がった状態になった。
もちろん、Windowsマシン側では既存のネットワーク(ローカルエリア接続など)とザウルスのネットワーク(ローカルエリア接続2など)をブリッジ接続しておき、DHCPサーバがネットワーク内になければ、DHCP95などのフリーソフトウェアWindowsマシンにインストールしておく必要がある。