3.8. Linux と WinCE を接続する

Linuxcare 社の Arthur Tyde、Bryan Abshier 両名の投稿です。

これは WinCE 機の IrDA ポートを使ってマスカレードされた PPP 接続を Linux ベースのノート PC との間で行う方法について書いたものです。 一旦 IP 接続ができてしまえば、あとはどうとでもなるでしょう。 私たちはこれを Sony のノートブックと Casio の E-100/105 PDA を使うユーザのためのガイドとしてまとめましたが、この手順はノートブックとの間で赤外線通信可能な WinCE 2.11 デバイスならどれでも有効なはずです。Linux 側のテストはすべて root 権限で行ってください。また標準の警告、つまり無保証が適用されます。

WinCE 機の設定

WinCE デバイスでネットワーク接続の設定を行ってください。"Connection" のメニューに行って "Direct Connection" を作り、何か意味のある名前を付けます。 デバイスには "Infrared Port" を選びます。 設定のメニューに行ってボーレートを 115200 に設定します。これは WinCE での最大値です。TCP/IP 設定に行って、"サーバから与えられた IP アドレスを使う"、"ソフトウェア圧縮を使う" および "IP ヘッダ圧縮を使う" にチェックを入れてください。 "SLIP を使う" にチェックが入っていないことを確認してください。 Name サーバの設定では、"サーバから与えられた IP アドレスを使う" にチェックを入れてください。 Start、Setting、Communications、Identification でデバイス名として名前を入力します (私は "cetoy" と入れました)。 Activesynch を使って Win9x デスクトップとの間でファイル同期を行っていたなら、ここは既に設定されていると思います。

Linux/IrDA を設定する

ノートブック PC 側の IrDA サポートを設定し (この文書の他の項を見てください) ノートブックが IrDA 互換なデバイスを見つけられるところまで持ってきます。 ifconfig を実行した際に irda0 デバイスが表示されれば、上手くいっています。 IP アドレスはありませんが、それで OK です。

接続の設定

IR ポートの通信可能範囲内に IrDA デバイスを置いてディスカバリ機能をテストします。五秒待ち、

cat /proc/net/irda/discovery とします。

例えば、Ericsson I888 World Phone で IR ポートが有効としている場合、直ぐに以下のようなメッセージが現れるはずです。

"name:I 888 WORLD   ,hint:0x9104,saddr:0x838470e5,daddr:0x152dceaa"

あなたの WinCE マシンは、WinCE マシンの側から積極的に接続を確立しようとしない限り、発見されません。 というわけで、WinCE の状態をあなたのデバイスでテストしたい場合、手順 2 で作成したネットワークアイコンをダブルタップしてください。 以下のようなものが表示されるはずです。

"name:mytoy,hint:0x8204,saddr:0x838470e5,daddr:0x00000b72"

表示される名前は Start、Setting、Communications、Identification でデバイス名として入力したものです。 この時点で基本的な IrDA 機能は動作しており、次に WinCE 機との間の PPP 接続を動かす件に進みます。 以降のスクリプトはシリアルケーブル接続でも使えます。 以下記載のファイルを作成して、所定のディレクトリにコピーしてください。

/usr/sbin/cebox.sh - これ (以下のスクリプト) を実行可能にしておきます。

#!/bin/sh
pppd call cebox

マイクロソフトは規格を破るのが大好きなので、次のスクリプトが必要になります。 これは WinCE に PPP 接続を許す前に WinCE 機が要求する適切な ASCII キーワードを与えるためのものです。

/etc/ppp/cebox.chat

TIMEOUT 3600
"CLIENT"    "CLIENT\c"
""      "SERVER\c"

次のファイルは IP アドレスの指定、IR デバイス (またはケーブル使用の場合シリアルポート) の指定、DNS 等々の設定のためのものです。 以下で使っている 192.IP アドレスを変更することはお勧めしません。 WinCE は実際のところ 192.168.55.100 が好きで、これはどの MS 社製のファイル同期ツールも WinCE 機はこのアドレスであると決め打っているためです。 DNS については、普段あなたが使っている設定どおりとしてかまいません。

/etc/ppp/peers/cebox

/dev/ircomm0 115200 crtscts
connect '/usr/sbin/chat -v -f /etc/ppp/cebox.chat'
noauth
local
192.168.55.101:192.168.55.100
ms-dns 10.2.0.1

接続をテストする

さて、この時点で全部正しく動いているか接続テストできるようになりました。 マシンをリブートして、"irattach /dev/ttyS2 -s" (ここで /dev/ttyS2 はあなたのマシンの BIOS が赤外線ポートだと認識しているシリアルポートです。 もし、この時点で irattach が走っていなければ、ここで開始します) を実行します。赤外線ポートが対向になるよう位置を調整し、Linux 側でコマンドプロンプトから /usr/sbin/cebox.sh と打ち、同時に CE マシンをスタートして WinCE のコネクションアイコンをダブルタップします。 WinCE マシン上で幸福のメッセージが、ホストと接続された→ デバイスが接続された→ユーザの認証が行われている→ ユーザが認証された→接続された、の順に現れるはずです。 また、接続がうまくいっているなら、Linux 側では以下のようなメッセージが見られるはずです。

irda0     Link encap:IrLAP  HWaddr 06:89:d0:58
      UP RUNNING NOARP  MTU:2048  Metric:1
      RX packets:246 errors:0 dropped:0 overruns:0 frame:0
      TX packets:251 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:8

ppp0      Link encap:Point-to-Point Protocol
      inet addr:192.168.55.101 P-t-P:192.168.55.100 Mask:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
      RX packets:10 errors:0 dropped:0 overruns:0 frame:0
      TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:10

次のスクリプトは IrDA を設定し、WinCE 機との間で PPP 接続を確立し、IP マスカレーディングを設定します。 これは、上記の設定をまとめて扱う例として収録したものです。 但し、これは多かれ少なかれ全手動、のやり方です。 もう少し生産的なやり方として、ブート時に irattach を立ち上げて、 inittab でラインを見て常時 IR ポートで WinCE の接続を見張るようにもできますが、これはノートブックのバッテリをよけいに消費し、ほかの IR 機器との接続の妨げになります。 このトレードオフを判断して、私は単に以下のスクリプトを使っています。 デバイスを所定の位置に置いて、WinCE を走らせ、スクリプトの指示に従い PDA 側から通信を開始します。

/usr/local/bin/wince - これ (以下のスクリプト) を実行可能にしておきます。

#!/usr/bin/perl
use strict;
#
# Enable IrDA, start ppp0 and set up WinCE masquerading
# A. Tyde - Linuxcare Inc.
#
print "\n-> Setting up IR infrastructure...\n";
system("killall irattach 2>/dev/null");
sleep 1;
system("/usr/sbin/cebox.sh");
print "   Start WinCE Serial or IR networking now!\n";
open(ECHO,">/proc/sys/net/ipv4/ip_forward") or die "Can not open /proc/sys/net/
ipv4/ip_forward";
print ECHO "1";
close (ECHO);
print "   Serving 192.168.55.100 to WinCE device...\n\n";
system("ipchains -F");
sleep 5;
system("ipchains -P forward DENY");
system("ipchains -A forward -s 192.168.55.100/32 -j MASQ");
exit 0;