# Linux Infrared HOWTO

Werner
Heuser

<wehe_at_tuxmobil.org>

JF Project
日本語訳

    JF@linux.or.jp

Linux Mobile Edition
TuxMobil

    Berlin

Version 3.4b
v3.4b, 2002-09-04(2004-12-12-jp)

Copyright (c) 2000-2002 Werner Heuser.

For all chapters permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being "Preface" and "Credits", with the Front-Cover Texts being "Linux Infrared HOWTO", and with the Back-Cover Texts being the section "About the Document and the Author". A copy of the license is included in the section entitled "GNU Free Documentation License".

本文書のどの章も複製、配布および変更が GNU Free Documentation License バージョン 1.1 以降の規定に従う範囲で許諾されます。GNU GNU Free Documentation License は Free Software Foundation により発行されています。本文書の不変部は 「Preface」と 「Credits」であり、表紙テキストは “Linux Infrared HOWTO” で、裏表紙テキストは “About the Document and the Author” です。ライセンスの写しが “GNU Free Documentation License” に収録されています。

TRANSLATION Copyright (c) 2002, Seiji Kaneko

翻訳配布条件は、原著作物の配布条件と同じとします。

2000
2001
2002
Werner Heuser

この Infrared-HOWTO (旧 IR-HOWTO) では Linux での赤外線通信デバイスについて紹介し、あわせて Linux/IrDA プロジェクトで開発されているソフトウェアの使い方を説明します。 このプロジェクトのパッケージは IrDA(TM) 準拠の標準を用いています。 IrDA(TM) は赤外線を用いたワイアレス通信の工業標準であり、1996 年 1 月以降に出荷の殆どのラップトップ PC には IrDA(TM) 準拠のトランシーバが搭載されています。 この赤外線ポートを用いてプリンタ、モデム、ファックス、LAN や他のラップトップ PC と通信することができます。 IrDA(TM)が対応する通信速度は 2400bps から 4Mbps までです。

Linux/IrDA スタックは IrLAP、IrLMP、IrIAS、IrIAP、IrLPT、IrCOMM、IrOBEX および IrLAN をサポートしています。 幾つかのプロトコルは、クライアントとサーバ両方をサポートするよう実装されています。 また複数 IrDA(TM) デバイスを用いた同時に複数の IrLAP コネクションを張る機能もサポートされています。 Linux/IrDA プロジェクトは 1997 年末に開始され、現時点ではまだ試験的実装ですので、すべての機能があっさり動くとは期待しないでください。 私の知る限り Linux/IrDA は現時点で存在する唯一の IrDA のオープンソースな実装です。

赤外線によるリモートコントロールは、Linux Infrared Remote Control - LIRC プロジェクトで扱われていますが、それについてもこのHOWTOで解説しています。

laptop
notebook
pda
handheld
computer
mobile
linux
irda
remote

## Preface

### この文書と著者について

この節は Invariant なので、原文、訳の順に示します。

Unknown AuthorEss (作者不詳 (Karl Jasper?)) 訳注: Karl Jasper(1883-1969) ドイツの実存主義哲学者。 通信などの近代技術により世界の調和を追求する世界哲学論を唱える。 晩年の仕事には、暗号による言論の自由の実現に対する考察など。

Better red, than dead. 【訳注: 共産主義者であるよりは死んだ方がまし、の混ぜっ返し。red は赤外線 に通じるので、dead は外と全く通信不能、の洒落。】

This document is based on the How to use part of the Linux/IrDA project homepage and the Linux/IrDA Tutorial by Jean Tourillhes. I have also included material provided by the Linux/IrDA core team, the Linux/IrDA mailing lists and other sources.

The document is included in the LINUX DOCUMENTATION PROJECT - LDP .

The latest version of this document is available at TuxMobil-HOWTOs. You may find my Linux-Mobile-Guide (the former Laptop-HOWTO), the Linux-Ecology-HOWTO and the Linux-Medicine-HOWTO there also.

Mathieu Arnold provides an earlier version of the IR-HOWTO in French. A Japanese translation of issue v3.3 is provided by the Linux Japanese FAQ Project .

Please feel free to contact me for comments or questions about the HOWTO. I know this material is not finished or perfect, but I hope you find it useful anyway. For other questions and current information about Linux/IrDA please ask in the Linux/IrDA mailing list as explained below.

【訳】

この文書は How to use part of the Linux/IrDA project homepage および Jean Tourillhes さんの Linux/IrDA Tutorial を元にしています。これに加えて Linux/IrDA コアチーム、Linux/IrDA メーリングリスト他からの材料も取り入れています。

この文書は LINUX DOCUMENTATION PROJECT - LDP に収録されています。

この文書の最新版は TuxMobil-HOWTOs にあります。ここには同著者の Linux-Mobile-Guide (旧 Laptop-HOWTO)、 Linux-Ecology-HOWTO と the Linux-Medicine-HOWTO もあります。

Mathieu Arnold さん が以前の版の仏語訳を IR-HOWTO in French で公開しています。 v3.4 の日本語版が Linux Japanese FAQ Project で提供されています。

この HOWTO に関して意見や質問があれば、気軽に私に連絡してください。 この文書は完成したものでも完全なものでもないことは分かっていますが、それでもさらに役に立つ物にしていきたいと思っているからです。 Linux/IrDA についてその他の質問や、現時点での情報については以下で説明する Linux/IrDA メーリングリストにお願いします。

<Werner Heuser>

### この文書の現在の状態

ここで用いている最新のカーネルは 2.4.19 で、irda の最新版は 0.9.15 です。 すべての情報をチェックするよう努力していますが、必要なすべての赤外線ハードウェアを持っているわけではないので、動かないものを見つけたとしてもご寛恕下さい。

古いバージョンのカーネルと `irda-utils` の組み合わせでは全く別のセットアップが必要です。 以前のバージョンを使うことは推奨しませんし、そのようなセットアップに関する言及はこの文書から削除されています。 コード履歴の章に多少のヒントが見つけられるでしょう。

この文書には 2.4.x カーネルシリーズと、最新の Linux/IrDA 開発に同期した修正が足し込まれました。 このため多少のテストや、一部の査読はまだなされていません。 以下の記載のとおりにすればすんなり動く、とは期待しないでください。

## IrDA

### Linux/IrDA プロジェクトについて

#### プロジェクトの歴史

このプロジェクトは Linux/IrDA の名で 1997 年末に開始されました。IrDA という名称は Infrared Data Association (IrDA) の商標であるため問題となり、名称が Linux/IR に変更されました。 1998 年末にプロジェクトと Infrared Data Association の関係は改善され、再度名称が Linux/IrDA に変更されました。1999 年 2 月より、プロジェクトは IrDA の正式メンバになっています。

この開発への参加に興味がある会社または開発者は、Linux/IrDA プロジェクトか私 <wehe_at_tuxmobil.org> まで連絡してください。

#### コード履歴

Linux/IrDA ではプログラムコードに変更を加えていましたので、 古い文書を用いた場合の混乱を避けるため、以下のことを知っておく必要があります。 いずれにせよ古い文書は使うべきではないのですが。

2.0.x カーネルでは Linux/IrDA サポートは全く別の方式 (ユーザ側だけのプログラム) を採用していましたが、これはもう Linux/IrDA プロジェクトではサポートされていません。2.1.131 以降、及び 2.2.0 以降では Linux/IrDA サポートは標準カーネルの一部になっています。

本文書での警告の一部は、以下のパラメータに関連した変更が原因になっています。 現時点では正しく直せていると思ってはいますが、私もこれらに時々悩まされました。 この新形式のものは 2.2.15/2.4.0 以降で動作します。 いつも最新のカーネルと、irda-util とドキュメントを使うべきです。

- irda デバイスのメジャー番号が 61 から 161 に変更されています (記憶によると、60 付近も使われていたことがありました)。これ以外の、 既に使わなくなっているマイナーデバイス番号も存在していましたので、 以降の章で記載の現在のデバイス番号表を参照するようにしてください。

- `irmanager` は廃止になりました。この機能は `irattach` で実現するようになっています。

- モジュール名 `/dev/ircomm_tty` は `/dev/ircomm-tty` に変更になっています。 但し、他のモジュールでは名前に "-" と "_" が使われているものが混在していますので、これは混乱しやすい変更です。

- デバイス名 `/dev/irnine` と `/dev/ircomm_new` は廃止になりました。

- IrLPT は現在は IrCOMM で処理されます。このため、 `irlpt_server` を参照する処理は廃止になりました。

- irda-utils 0.9.15 以降では、`irattach` の `-s` の挙動が変更になりました。このオプションは、 パラメータ `1` と共には使えなくなりました。

### ここからはじめよう

#### ソフトウェア

irda-utils パッケージで提供されているコマンドは IrDA の接続を行うための基本となるツール群です。その他のツール (e-Squirt、IrNET など) はオプションです。 バージョン 0.9.15 からマニュアルページが収録されるようになっていますが、 TuxMobil - Software に置かれた私の man ページが最新版です。

##### IrDA ユーティリティ (irda-utils)

###### コンパイル

- Linux/IrDA プロジェクトの最新の irda-utils のソースを使ってください。 また、glibc ライブラリの使用をすすめます。現在のバージョンは `ldd &hyphen;&hyphen;version` で知ることができます。 古い libc5 の使用はコンパイルエラーを引き起こしがちです。

- `tar xvzf irda-utils<VERSION>` としてパッケージを展開してください。`/usr/src` ディレクトリ内でやることをすすめます。

- `make clean` を実行してください (最初のコンパイルの際には必要ありません)。

- `make all` を実行してバイナリを作成します。

- `make install` を行います。 これで全コマンドが所定の位置に置かれ、`/etc/irda` に設定ファイルがインストールされます。

- 時として IrDA スタックや各種 IrDA パッケージをコンパイルする際に、コンパイラが IRLMP_HINT_MASK_SET や IRDAPROTO_ULTRA が定義されていないと言うエラーを吐く場合があります。 これはディストリビューションでのカーネルヘッダの扱いの不整合によるもので、もし 2.4.x カーネルソースがあるならば修正は簡単です。単に以下のようにしてカーネルの irda.h を include ディレクトリにコピーしてください。

  `cp /usr/src/linux/include/linux/irda.h /usr/include/linux`

###### コンパイル済みパッケージ

野首 貴嗣さんにより irda-utils の Debian パッケージが提供されています。 これは Debian 2.2 (potato) リリースに収録されています。Mandrake では 6.1 以降、RedHat では 6.1 以降、SuSE では 6.1 以降に irda-utils の RPM パッケージが収録されています。 コンパイル済みパッケージは、カーネルバージョンと使っているパッケージバージョンとの間の非互換性のための問題を起こす危険性が多少あります。

###### Linux/IrDA-Utils の各プログラム

###### irattach

`irattach` はパラメータにモジュール群を指定します。 これは特定の FIR ドライバ (例えば `irattach toshoboe`) であることも、`ircomm` である (このあと "irda0" のエイリアスから `/etc/modules.conf` 中に記載されたモジュールをロードします) こともあります。

もしあなたがツイていて、使っている FIR チップセットがサポートされている場合、irattach を使う必要はなくなりました。単にドライバを modprobe するだけです。

###### irdadump

赤外線通信で送受された全フレームを表示するためのプログラムです。

IrDA デバイスドライバをネットワークデバイスドライバとして実装することの利点の一つには、デバイス (あるいはパケットタイプ) に対してプロトコル解析ツール (sniffer) を接続できることがあげられます。 このおかげで、 tcpdump 相当の irdadump のような実に手軽なユーティリティが使えるようになり、 デバッグが断然容易になります。 Linux-2.2 では BPF (Berkeley Packet Filter) が実装されているので、見たいフレームだけをフィルタすることができます。

注意: `irdadump` コマンドを使う際には、通常 root になっている必要があります。CONFIG_PACKET をカーネルで有効にしておく必要もあります。 モジュールとしてコンパイルしている場合、モジュールを手動でロードする必要があるかもしれません。 `irdadump` はライブラリ化もされており、 GUI アプリケーションから使うこともできます。

以下に Linux と Palm III との間の短いセッションの出力例を示します。 このログではローカルの irobex レイヤが応答しないため、Palm III が disc フレームを送っています。

    dagbnb /home/dagb/linux/irda-utils/irdadump/ # ./irdadump

    20:18:15.305711 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=0
    20:18:15.385597 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=1
    20:18:15.465568 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=2
    20:18:15.545953 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=3
    20:18:15.625574 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=4
    20:18:15.705575 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=5
    20:18:15.785601 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=255,info=Linux
    20:18:18.075526 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
    20:18:18.225498 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
    20:18:18.375495 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
    20:18:18.526355 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
    20:18:18.675614 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
    20:18:18.676364 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=4
    20:18:18.765506 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
    20:18:18.927221 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm III
    20:18:18.975796 snrm:cmd,ca=0xfe,pf=1
    20:18:18.976534 ua:rsp,ca=0x58,pf=1
    20:18:18.977145 ua:rsp,ca=0x58,pf=1
    20:18:19.585627 rr:rsp,ca=0x58,nr=0,pf=1
    20:18:19.585810 rr:rsp,ca=0x58,nr=0,pf=1
    20:18:19.606413 i:cmd,ca=0x58,nr=0,ns=0,pf=1
    20:18:19.606582 rr:rsp,ca=0x58,nr=1,pf=1
    20:18:19.627708 rr:cmd,ca=0x58,nr=0,pf=1
    20:18:19.627871 i:rsp,ca=0x58,nr=1,ns=0,pf=1
    20:18:19.650571 disc:cmd,ca=0x58,pf=1
    20:18:19.650736 ua:rsp,ca=0x58,pf=1
    20:18:21.165524 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
    20:18:21.315608 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
    20:18:21.315793 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=1
    20:18:21.395499 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
    20:18:21.545516 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
    20:18:21.695500 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
    20:18:21.845840 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
    20:18:22.007222 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm
    III
    20:18:22.056143 snrm:cmd,ca=0xfe,pf=1
    20:18:22.056310 ua:rsp,ca=0xc8,pf=1
    20:18:22.056381 ua:rsp,ca=0xc8,pf=1

    37 pacckets received by filter

###### irdaping

IrDA テストフレームを用いてリモートデバイスに ping を試みることができます。 すべてのデバイスがテストフレームをサポートしているわけではありません。 これは ping (8) と同様のプログラムです。 このプログラムは、IrDA テストフレーム (およびフレーム番号とフレームを送った時間を含むユーザデータを加えています) を送ります。 -s オプションを用いてフレームのサイズを変更することもできます。 引数として IP アドレスではなく、IrDA デバイスアドレスを指定する必要があります。 このアドレスを得るには、irdadump を使う必要があります。

以下に出力例を示します (ACTiSYS IR-100M へ ping しています)。

    dagbnb /home/dagb/linux/irda-utils/irdaping/ # ./irdaping 0xf7be8388
    IrDA ping (0xf7be8388): 32 bytes
    32 bytes from 0xf7be8388: irda_seq=0 time=102.466003 ms.
    32 bytes from 0xf7be8388: irda_seq=1 time=102.202003 ms.
    32 bytes from 0xf7be8388: irda_seq=2 time=102.170998 ms.
    32 bytes from 0xf7be8388: irda_seq=3 time=101.633003 ms.

    4 packets received by filter

Christian Gennerat さんのメールから: 私は、パラメータを使っていない以下の alias を $HOME/.bashrc 中に定義して使っています。 `alias irping="irdaping \`grep daddr /proc/net/irda/discovery|sed s/.*daddr://\`"` これはクライアントが一つだけ見つかる場合には良好に動作します。

###### irkbd

Tekram IR-660 赤外線ドッキングステーションで使用されているマウスとキーボードプロトコルをサポートした実装です。

###### findchip

あなたのマシンで使っている FIR IrDA チップセットが何であるか調べます。 `findchip -v` として調べてください。 これ以外のチップセットを検出する方法については以下を参照下さい。

###### irsockets

IrDA ソケットを使うプログラムを集めたものです。

###### irpsion5

Psion PDA との間でファイルを遣り取りするファイル転送プログラムです。

###### /etc/irda

設定ファイルで、SIR ドライバのシリアルポート情報を含みます。 最初の試行の際に SIR IrDA ドライバを設定する必要があるでしょう。

##### openobex

OpenOBEX プロジェクトで最終的に実現しようとしているのは、Object Exchange (OBEX) プロトコルのオープンソースの実装です。OBEX はセッションプロトコルで、バイナリの HTTP プロトコルとでも言うべきものです。 典型的なアプリケーションとして、PalmOS の Beam 機能が挙げられます。

##### e-squirt

e-Squirt は IrDA メディア上で URL を送るための単純なプロトコルです。 これにより CoolTown が有効なデバイスとの間でやりとりができます。

##### Linux-IrDA 用 IrNET

IrNET は 2 つの IrDA ピア間での TCP/IP 通信を効率よく行なえるようにするプロトコルです。 これは IrTTP ソケットで PPP パケットを受け渡しする軽いレイヤです。 効率を上げるため PPP を同期モードで利用しており、柔軟性に富み様々な機能を提供しています。 IrNET の主部はカーネル 2.4.x に含まれており、これと組み合わせて通信を行うユーザスペースデーモンは web ページから提供されています。

##### Java - IrDA インターフェース

この Java Infrared Socket API は Java を使って Linux マシンと赤外線デバイスとの通信を行う手段を提供します。 これを用いることで Java のアプリケーション開発者は、赤外線通信を用いたアプリケーションをより容易に開発できます。 API は java.net.Socket API によく似たもので、Linux IrDA スタックを用いて実装されています。 コネクション指向ストリーム (IrSocket と IrServerSocket) と、 コネクションレスストリーム (UltraSocket と UltraPacket) の両方がサポートされています。

#### カーネル

##### はじめに

まず、Kernel-HOWTO を読んでコンパイル手順についての情報を得ておいてください。 また、Linux/IrDA Project、 および Linux/IrDA メーリングリストアーカイブを調べて最新のパッチを入手してください。

IrDA のカーネルコードは

/usr/src/linux/net/irda (protocol 関連)

/usr/src/linux/drivers/net/irda (デバイスドライバ)

/usr/src/linux/include/net/irda (ヘッダファイル)

の各場所にあります。

##### 一般的なパラメータ

カーネル 2.4.x ソースを使っているか確認してください。 カーネルのバージョンがはっきりしないなら `uname -r` コマンドを使ってください。

Linux/IrDA プロジェクトから最新のカーネルパッチを入手してください。 または Alan Cox 氏のカーネルシリーズを使ってください。これを `/usr/src` か、カーネルソースの普段の場所に置きます。 このとき、以下の patch-2_2.0-irdaXXX を実際のファイル名に読み替えてください。

    cd /usr/src
    tar xvzf patch-2_2.0-irdaXXX.tar.gz
    cd linux
    patch -p1 -l < ../patch-2_2.0-irdaXXX

最新のドライバでは、カーネルの実験的機能のサポート (CONFIG_EXPERIMENTAL) を有効にする必要があるでしょう 訳注: 2.4.17 あたりではほぼ統合が済んでいるそうです。 。

"General Setup" の項で、sysctl を CONFIG_SYSCTL で有効にします。

CONFIG_PROC_FS で proc ファイルシステムサポートを有効にしましょう。

CONFIG_SERIAL で SIR 機能のシリアルサポートを有効にします。

Linux/IrDA でプリンタを使う際に CONFIG_PRINTER を有効にする必要があるかどうかについては、私はよく知りません。多分不要ではないかと思います。

CONFIG_NET によるネットワークサポートは必須です。

モジュールサポートの CONFIG_MODULES をカーネルに含めるよう確認してください。 `lsmod`を用いるなどしてテストしておいてください。

CONFIG_KERNELD で kerneld のサポートを含めてください。但し、これについては kmod (CONFIG_KMOD) でも動作します。モジュールではなく全部組み込むようにしても動くようですが、モジュールを使うことを強く強くお勧めします。

irdadump を使うには、おそらく CONFIG_PACKET を有効にする必要があるでしょう。

Linux/IrDA パッチを当てただけの修正ですむなら、多分 make clean を行う必要はなく、多少時間の節約になります。以下のようにすることがお勧めです。

`make dep && make all && make modules && make install && make modules_install`

これで変なエラーが出るようなら、make clean を行って最初から作成し直してください。

##### IrDA 固有のパラメータ

以下は `../linux-2.4.3/Documentation/Configure.help` から少々手を加えて引いてきたものです。 現状と新しいドライバについては最新のカーネル文書に当たってください 訳注: 混乱を避けるため、2001/12/13 付けのカーネルの Configure.help 日本語訳の訳文を元に用いました。 ただし、他と口調をあわせるためかなり手を入れています。 。

###### IrDA subsystem support (IrDA サブシステムサポート)

###### IrDA subsystem support (IrDA サブシステムサポート)

CONFIG_IRDA

  IrDA (TM) プロトコルを有効にしたいなら、ここで Y と答えてください。 The Infrared Data Associations (tm) は無線赤外線通信の規格 を策定する団体で、その規格はほとんどのラップトップと PDA でサポートされています。

  IrDA (tm) プロトコルを有効とした Linux を使用するには、irmanager と、 それに加えて恐らく irattach のようないくつかのユーザ側のユーティリティ も必要になるでしょう。詳しくは Documentation/networking/irda.txt をご覧ください。InfraRed-HOWTO も参照したい場合は、 TuxMobil から入手できます。

  この機能はモジュールとしても利用できます。モジュール名は irda.o です。モジュールとしてコンパイルしたいなら、ここで M と答え、 Documentation/modules.txt をお読みください。

###### IrDA Cache last LSAP (IrDA で最終 LSAP をキャッシュする)

CONFIG_IRDA_CACHE_LAST_LSAP

  IrLMP で最後に使った LSAP をキャッシュしておきたいなら、 ここで Y と答えてください。これは、ほとんどのフレーム が同じ接続で送信/受信されるようになるので、意味があります。 このオプションを有効にすると一フレーム当り一回の ハッシュ検索の実行を節約できます。

  よくわからなければ Y と答えてください。

###### IrDA Fast RR's (IrDA 高速 RR)

CONFIG_IRDA_FAST_RR

  第一ステーションとして稼働させるとき、IrLAP に高速 RR (受信準備) フレームを送るようにさせたいならここで Y と答えてください。 このオプションを有効にすると、フレームの受信後送信キューが空なら ただちに IrLAP が RR フレームを送信するようになります。 こうすることで第二ステーションは、大量のデータを受信するとき、 次回の送信を許可する前に、最大の turn around time まで待つ必要がなくなり、 速度が大きく向上します。 第二ステーションの送信キューも空なら、第一ステーションは、タイムアウトが 通常値に達するまで RR フレームを送信するために長時間待つ 処理をやめます。このオプションを有効にすると、IR ダイオードの電力消費が増え、その結果バッテリの寿命が縮まります。

  よくわからなければ N と答えてください。

###### IrDA デバッグ

CONFIG_IRDA_DEBUG

  IrDA サブシステムが syslog にデバッグ情報を書き込むようにしたいなら、 ここで Y と答えてください。デバッグ・レベルは `/proc/sys/net/irda/debug` で変更できます。

  よくわからなければ (バグをみつけるのが容易になるので) Y と答えてください。

###### IrLAP 圧縮サポート

CONFIG_IRDA_COMPRESSION

  圧縮は IrDA (tm) プロトコルの仕様の一部では＊ありません＊ が、でもすばらしくうまく動いています。 Linux が初めて IrLAP 層での圧縮のサポートを試みました。したがって Linux <-> Linux 間で通信する場合に限り、圧縮による利益を受ける ことができます。

  ここで Y とした場合は、以下の圧縮プロトコルのところでも Y または M とする必要があります。

###### IrLAP Deflate 圧縮プロトコル (試験的)

CONFIG_IRDA_DEFLATE

  Deflate 圧縮プロトコルを有効にしたければ、ここで Y と答え てください。 deflate 圧縮 (GZIP) は PPP プロトコルで使われ ている方法と全く同じものです。

  モジュールとしてコンパイルしたければ、ここでは M と答え、 Documentation/modules.txt を読んでください。モジュールの 名前は irda_deflate.o になります。

###### IrLAN プロトコル

CONFIG_IRLAN

  現在、Linux/IrDA コアチームは IrLAN プロトコルサポートのメンテナンスをもう行っていません。

  IrLAN プロトコルを有効にしたいなら、ここで Y と答えてください。 モジュール (irlan.o) としてコンパイルしたいなら、ここで M と答え、Documentation/modules.txt をお読みください。 IrLAN は Ethernet をエミュレートし、赤外線を用いた無線 LAN を提供できるようになります。

  IrLAN プロトコルは HP 製 NetbeamIR や ESI 製 JetEye NET の 赤外線アクセスポイントと通信できます。LrLAN を使用した他の Linux マシンと接続してお手軽なネットワーキングもできます。

###### IrCOMM プロトコル

CONFIG_IRCOMM

  IrCOMM プロトコルを有効にしたいなら、ここで Y と答えてください。 モジュールとしてコンパイルしたいなら、ここで M と答え、 Documentation/modules.txt をお読みください (ircomm.o と ircomm-tty.o がモジュールです)。IrCOMM はシリアルポート ・エミュレーションを実装しており、TTY を認識する既存の 全アプリケーションを赤外線リンク経由で使用可能になります。従って PPP、minicom などの TTY を用いるアプリケーションを利用できるようになります。 このオプションを有効にするとircomm と ircomm_tty と呼ばれるふたつのモジュールが生成されます。

###### デバイスドライバ

###### IrTTY IrDA デバイス・ドライバ

CONFIG_IRTTY_SIR

  IrTTY ライン・ディシプリンを有効にしたいなら、ここで Y と答えてください。モジュール (irtty.o) としてコンパイルしたいなら、 ここで M と答え、Documentation/modules.txt をお読みください。 IrTTY により Linux のシリアル・ドライバーを 16550 互換な IrDA の全ポートで使用できるようになります。ほとんどの IrDA チップは 16550 互換なので、このオプションには恐らく Y と答えることになるでしょう。しかしながら IrTTY を用いた場合には このドライバでは接続速度が 115200 bps (IrDA SIR モード) に制限されます。

  よくわからなければ Y と答えてください。

###### IrPORT IrDA デバイスドライバ

CONFIG_IRPORT_SIR

  IrPORT IrDA のデバイスドライバを有効にするには、ここで Y と答えてください。モジュール (irport.o) としてコンパイルしたいなら M と答え、Documentation/modules.txt を読んでください。 IrPORT は IrTTY の代わりに使用することができますが、 場合によっては IrPORT の方が都合がいいこともあります。一例を あげると、あなたのコンピュータの IrDA ポートにエコー・キャンセルの機能がない場合で、この種のポートでは IrPORT を使うとうまく動きます。というのは、このドライバは半二重 モードでのみ動作するからです。IrPORT では irattach を使わなくても、"insmod irport io=0x3e8 irq=11" のように FIR ドライバと同じ方法で組み込むことができます。

  よくわからなければ、Y と答えてください。

###### Winbond W83977AF IrDA デバイス・ドライバ

CONFIG_WINBOND_FIR

  Winbond W83977AF super-io チップセット用に IrDA を有効にしたいなら、ここで Y と答えてください。Corel NetWinder の IrDA チップセット用にはこのドライバを使うべきです。ドライバが サポートしている速度は SIR、MIR、FIR (4Mbps) です。

  モジュールとしてコンパイルしたいなら、ここで M と答え、 Documentation/modules.txt をお読みください。モジュール名は w83977af_ir.o になります。

###### NS PC87108 IrDA デバイス・ドライバ

CONFIG_NSC_FIR

  NS 社 PC87108 と PC87338 IrDA チップセットのサポートを有効にしたいなら、 ここで Y と答えてください。このドライバは SIR、MIR、FIR (4Mbps) をサポートしています。

  モジュールとしてコンパイルしたいなら、ここで M と答え、 Documentation/modules.txt をお読みください。モジュール名は nsc-ircc.o になります。

###### Toshiba Type-O IR ポートのデバイスドライバ

CONFIG_TOSHIBA_FIR

  Toshiba Type-O IR チップセットを有効にするには、ここで Y と答えてください。このチップセットは、Toshiba Libretto 100CT や多くのラップトップ・コンピュータで使用されています。 モジュールとしてコンパイルしたいなら M と答え、 Documentation/modules.txt を読んでください。モジュール名は toshoboe.o になります。

###### SMC IrCC (試験的)

CONFIG_SMC_IRCC_FIR

  SMC 社の赤外線通信コントローラのサポートを有効にしたいならここで Y と答えてください。これは富士通 Lifebook 635t と Sony VAIO PCG-505TX で使われています。モジュールとしてコンパイルしたいなら M と答え、 Documentation/modules.txt を読んでください。モジュール名は smc-ircc.o になります。

###### ALi M5123 FIR コントローラ向けドライバ (試験的)

CONFIG_ALI_FIR

  ALi 社の M5123 赤外線通信コントローラのサポートを有効にしたいならここで Y と答えてください。この ALi M5123 FIR コントローラは ALi の M1543C、 M1535、M1535D、M1535+、M1535D の各サウスブリッジの内蔵コントローラでもあります。このドライバは SIR、 MIR、FIR (4Mbps) をサポートしています。

  モジュールとしてコンパイルしたいなら M と答え、 Documentation/modules.txt を読んでください。モジュール名は ali-ircc.o になります。

###### シリアルドングルサポート

CONFIG_DONGLE

  あなたのコンピュータのシリアルポートに接続する赤外線デバイスを使っている場合 Y と答えてください。これらのデバイスを総称してドングルと呼びます。 次に、使っているドングルの機種にあわせて以下で Y または M と答えてドライバを選択してください。

  この質問に対する答えは、直接にはカーネルには影響しません。 N と答えることによって以下のシリアルドングルについての質問がすべて スキップされるだけです。

###### ESI JetEye PC ドングル

CONFIG_ESI_DONGLE

  Extended Systems 社の JetEye PC dongle のサポートを有効にしたいなら、 ここで Y と答えてください。モジュールとしてコンパイルしたいなら、ここで M と答え、Documentation/modules.txt をお読みください。 ESI dongle は通常の 9 ピン・シリアル・ポート・コネクターに接続され、現在 IrTTY で使われるだけです。ESI ドングルを有効にするには、"irattach -d esi" として irattach をスタートさせる必要があります。

###### ACTiSYS 社 IR-220L 及び IR220L+ ドングル

CONFIG_ACTISYS_DONGLE

  ACTiSYS IR-220L, IR220L+ ドングルのサポートを有効にしたいなら、ここで Y と答えてください。モジュールとしてコンパイルしたいなら、ここで M と答え、Documentation/modules.txt をお読みください。 ACTiSYS dongle は通常の 9 ピン・シリアル・ポート・ コネクターに接続され、現在 IrTTY で使われるだけです。 ACTiSYS ドングルを有効にするには、"irattach -d actisys" または "irattach -d actisys+" として irattach をスタート する必要があります。

###### Tekram IrMate 210B ドングル

CONFIG_TEKRAM_DONGLE

  Tekram IrMate 210B ドングルのサポートを有効にしたいなら、ここで Y と答えてください。モジュールとしてコンパイルしたいなら、ここで M と答え、Documentation/modules.txt をお読みください。 Tekram ドングルは通常の 9 ピン・シリアル・ポート・コネクター に接続され、現在 IrTTY で使われるだけです。Tekram ドングル を有効にするには、"irattach -d tekram" として irattach を スタートする必要があります。

###### Greenwich 社の GIrBIL ドングル

CONFIG_GIRBIL_DONGLE

  Greenwich 社の GIrBIL ドングルのサポートを有効にするには、ここで Y と答えてください。モジュールとしてコンパイルしたいなら M と答え、Documentation/modules.txt を読んでください。 Greenwich ドングルは通常の 9 ピン シリアル・ポート・コネクタに接続し、 現時点では IrTTY のみで使用できます。 /etc/irda/drivers スクリプトに "irattach -d girbil" と記述することで、Greenwich ドングルを利用可能にするこ とができます。

###### Parallax Litelink ドングル

CONFIG_LITELINK_DONGLE

  Parallax Litelink ドングルのサポートを有効にするには、ここで Y と答えてください。モジュールとしてコンパイルしたいなら M と答え、Documentation/modules.txt を読んでください。 Parallax ドングルは通常の 9 ピン シリアル・ポート・コネクタに接続し、 現時点では IrTTY のみで使用できます。Parallax ドングルを使うためには、 "irattach -d litelink" として irattach をスタートさせる 必要があります。

###### 旧 Belkin ドングル

CONFIG_OLD_BELKIN_DONGLE

  Adaptec 社の Airport 1000 と 2000 ドングルのサポートを有効にしたいなら Y と答えてください。モジュールとしてコンパイルしたいなら M と答え、Documentation/modules.txt を読んでください。 このモジュールは old_belkin.o という名前になります。 多少の情報がドライバ drivers/net/irda/old_belkin.c の頭の部分のコメントに書かれています 訳注: Berkin ドングルには新旧有り、旧のみサポートと以前のカーネル Configure.help にはある。外見で見分けはつかず、ばらしてみる必要ある由。 。

##### 現在のカーネルパッチ

注記: `donauboe` は `toshoboe` の新版で、FIR サポートが改良され、Donauoboe チップ (lib-irda 参照) との互換性が向上しています。

USB ドングルパッチについては Linux/IrDA メーリングリストアーカイブを調べてください。

#### カーネルモジュールオプション

以下のモジュールオプションのサーベィは `modinfo` コマンドで作成したものです。

    actisys.o
    Dag Brattli <dagb_at_cs.uit.no> - Jean Tourrilhes <jt_at_hpl.hp.com>

    ACTiSYS IR-220L and IR-220L+ ドングルドライバ

    ali-ircc.o
    Benjamin Kong <benjamin_kong_at_ali.com.tw>

    ALi FIR コントローラドライバ
    io int array (min = 1, max = 4), "Base I/O addresses" を指定します
    irq int array (min = 1, max = 4), "IRQ 番号" を指定します
    dma int array (min = 1, max = 4), "DMA チャネル" を指定します

    esi.o
    Dag Brattli <dagb_at_cs.uit.no>

    Extended Systems 社の JetEye PC ドングルドライバ

    girbil.o
    Dag Brattli <dagb_at_cs.uit.no>

    Greenwich 社の GIrBIL ドングルドライバ

    irport.o
    Dag Brattli <dagb_at_cs.uit.no>

    IrDA SIR モードの半二重シリアルドライバ
    io int array (min = 1, max = 4), "Base I/O addresses" を指定します
    irq int array (min = 1, max = 4), "IRQ 番号" を指定します

    irtty.o
    Dag Brattli <dagb_at_cs.uit.no>

    IrDA TTY デバイスドライバ
    qos_mtt_bits int, "最小切り変え時間" を指定します。

    litelink.o
    Dag Brattli <dagb_at_cs.uit.no>

    Parallax 社 Litelink ドングルドライバ

    nsc-ircc.o
    Dag Brattli <dagb_at_cs.uit.no>

    NS 社の IrDA デバイスドライバ
    qos_mtt_bits int, "最小切り変え時間" を指定します。
    io int array (min = 1, max = 4), "Base I/O addresses" を指定します
    irq int array (min = 1, max = 4), "IRQ 番号" を指定します
    dma int array (min = 1, max = 4), "DMA チャネル" を指定します
    dongle_id int, "使っているドングルのデバイス番号" を指定します

    old_belkin.o
    Jean Tourrilhes <jt_at_hpl.hp.com>

    Belkin (旧) SmartBeam ドングルドライバ

    smc-ircc.o
    Thomas Davis <tadavis_at_jps.net>

    SMC IrCC コントローラのドライバ
    ircc_dma int, "DMA チャネル" を指定します
    ircc_irq int, "IRQ 番号" を指定します

    tekram.o
    Dag Brattli <dagb_at_cs.uit.no>

    Tekram IrMate IR-210B ドングルドライバ

    toshoboe.o
    James McKenzie <james_at_fishsoup.dhs.org>

    Toshiba OBOE IrDA デバイスドライバ
    max_baud int, 最大ボーレート

    w83977af_ir.o
    Dag Brattli <dagb_at_cs.uit.no>

    Winbond W83977AF IrDA デバイスドライバ
    qos_mtt_bits int, "最小切り変え時間" を指定します。
    io int array (min = 1, max = 4), "Base I/O addresses" を指定します
    irq int array (min = 1, max = 4), "IRQ 番号" を指定します

    irda.o
    Dag Brattli <dagb_at_cs.uit.no>

    The Linux IrDA プロトコルサブシステム
    irda_debug_R07c03e02 long

    irlan.o
    Dag Brattli <dagb_at_cs.uit.no>

    Linux IrDA LAN プロトコル
    eth int, "デバイス名 ethX (0) 及び irlanX (1)" を指定します
    access int, "アクセス種別 DIRECT=1, PEER=2, HOSTED=3" を指定します

    ircomm-tty.o
    Dag Brattli <dagb_at_cs.uit.no>

    IrCOMM シリアル TTY ドライバ

    ircomm.o
    Dag Brattli <dag_at_brattli.net>

    IrCOMM プロトコル

    irnet.o
    <none>
    <none>

#### 設定について

##### Device 番号

    mknod /dev/ircomm0 c 161 0
    mknod /dev/ircomm1 c 161 1
    mknod /dev/irlpt0 c 161 16
    mknod /dev/irlpt1 c 161 17
    mknod /dev/irnet c 10 187
    chmod 666 /dev/ir*

`irkbd` を使う場合、必要になるデバイス番号がこれ以外にもあるでしょう。最新のデバイス番号は `../src/linux/Documentation/devices.txt` にあります。

##### 赤外線デバイスの配置

まず、IrDA デバイスを通信可能な距離に置いてください。 運が良ければ Linux/IrDA サービスがすべての新しいデバイスを自動的に検出できることもあるかもしれませんが、 私の経験では、良好な結果が得られるのは設定時に所定の距離にある場合だけです。

赤外線デバイスは 1m 以内の距離に置き、角度の傾きは 30 度以内にしてください。 二つのデバイスが真っ直ぐ見通せる状態にある必要があります。 こうできない場合には鏡を使ってください (未使用の M$ の CD-ROM が良い鏡として使えます)。

##### /etc/modules.conf

`/etc/conf.modules` に以下の行を加えてください。

    # IrDA over a normal serial port, or a serial port compatible IrDA port
    alias tty-ldisc-11 irtty
    # IrCOMM (for printing, PPP, Minicom etc)
    alias char-major-161 ircomm-tty     # if you want IrCOMM support
    # IRLAN
    alias irlan0 irlan
    # To be able to attach some serial dongles
    # These values are hard-coded in irattach (not instance order)
    alias irda-dongle-0 tekram          # Tekram IrMate IR-210B
    alias irda-dongle-1 esi             # ESI JetEye
    alias irda-dongle-2 actisys         # Actisys IR-220L
    alias irda-dongle-3 actisys         # Actisys IR-220L+
    alias irda-dongle-4 girbil          # Greenwich GIrBIL
    alias irda-dongle-5 litelink        # Parallax LiteLink
    alias irda-dongle-6 airport         # Adaptec Airport 1000 and 2000
    alias irda-dongle-7  old_belkin         # Belkin (old) SmartBeam dongle
    alias irda-dongle-8  ep7211_ir          # Cirrus Logic EP7211 Processor (ARM)
    alias irda-dongle-9  mcp2120            # MCP2120 (Microchip) based
    alias irda-dongle-10 act200l            # ACTiSYS Ir-200L
    alias irda-dongle-11 ma600              # Mobile Action ma600
    # To use the FIR driver. This applies only to the specific device!!!
    #options nsc-ircc dongle_id=0x09	# NSC driver on a IBM Thinkpad laptop
    #options nsc-ircc dongle_id=0x08	# HP Omnibook 6000
    #alias irda0 nsc-ircc
    #alias irda0 smc-ircc
    # options toshoboe max_baud=
    # alias irda0 toshoboe
    # options w83977af_ir io= io2= irq= qos_mtt_bits=
    # alias irda0 w83977af_ir
    # IrNET module...
    alias char-major-10-187 irnet       # Official allocation of IrNET

このあと `depmod -a` を行って更新を反映してください。 これで全 IrDA デバイスが必要に応じて自動的にロードされるはずです。 テスト時にこれらのモジュールを手動でロードすることはできますが、二回ロードされることがないようによく注意してください。 `irkbd` や USB ドングルを使う場合には、これ以外にも必要なエントリがあるかもしれません。 設定の元となる例は irda-utils パッケージに含まれています。

##### /etc/irda

`/etc/irda` に目を通してください。 あなたの設定を反映するよう適宜編集してください。

##### BIOS 設定

BIOS で赤外線ポートが有効になっていることを確認し、その際に赤外線ポートが使用している割り込みとポートアドレスをチェックしてください。 一部のラップトップでは BIOS のパラメータを設定するのに Window$ をインストールしておく必要がある場合があるようです。

一部の機種では、ドッキングステーションに接続した場合に赤外線ポートが無効にされた、という報告を受けています。

##### シリアルポート (setserial)

まず IrDA を SIR モードと FIR モードのどちらでセットアップするか決めましょう。SIR モードがおすすめです。

###### SIR

あなたの SIR ポートにあわせて ttySx を選びます。 ヒント: `dmesg | grep tty` としてみます。 詳細は、以下の「IrDA スタックを使ってみる」の節を見てください。

SIR シリアルデバイスを決めるには、BIOS を調べてください。それがだめなら、 `dmesg | grep tty` を実行して、マシンでサポートされている tty デバイスの概略情報を得てください。そこから IrDA デバイスとおぼしき一デバイスを選び出します。

###### FIR

SIR では動作しない場合 (まれなようです)、FIR を試してください。まず BIOS を調べます。 シリアルデバイスとどこかで競合することを避けるため、 `setserial /dev/ttyS1 uart none` としておく必要があります。

注意：`setserial /dev/ttySx uart none` は、IrDA が SIR モードの場合に使ってはいけません。

Florian Lohoff さん から: 多分 "port 0x0 irq 0" もやっておく必要があります。こうしておかないと突然別の S1 がシステムで使えるようになったとき (例えばモデム PCMCIA カードを挿入したとき) 妙なことになります。その際にシリアルドライバは、自分の支配下にないのにも関わらず旧ポートをアクセスするため、IrDA 関係が死んだりハングしたりしてしまいます。まだ、シリアルドライバでどこが悪いのか見つけていませんが、はっきり存在するバグです (serial_out と serial_in 関係の前後で printk してみた限り)。

##### リソースコンフリクト: IRQ, IO

システムにサウンド機能、PCMCIA やホットプラグシステムがある場合は特に起きがちですが、IRQ がコンフリクトする場合があります。マシンの IRQ の利用状況を `cat /proc/interrupts` でチェックしてください。

##### IrDA を動かしてみる

まず、とにかく Disk を sync してください。 リブートする羽目になるかもしれません。最初の免責の項参照。

ローレベルドライバには、SIR、ドングルと FIR の三つのカテゴリがあります。 Linux/IrDA を始めるにはまず SIR から使ってみることを薦めます。

`modprobe irda irtty` でモジュールをロードします。 `irattach /dev/ttyS1 -s` で IrDA サービスに IrDA デバイスを接続します。`lsmod` の出力と `dmesg` をチェックしてください。

`irdadump` は届く範囲の全 IrDA デバイスを列挙します。 ヒント: 別の Linux マシンとの間で接続している場合、`hostname YOUR_HOSTNAME` として各コンピュータに固有の名前を与えることができます。

サーバ側になるマシンで、"pppd /dev/ircomm0 LOCAL_IP:REMOTE_IP" を クライアント側で "pppd /dev/ircomm0" を実行してください。

これで接続を `ping` でテストできるようになります。 また、各種のネットワーク接続 (ssh, NFS など) を、この時点で使ってみてください。

### IrDA 接続の詳細 - プロトコル

#### IrDA スタックを使ってみる

低レベルドライバには、SIR、ドングルと FIR の三つのカテゴリがあります。 正しいドライバが選択されているなら、以降の各節で記載されているメッセージが出力されます。

##### SIR

- どのシリアルポートを IR デバイスで使っているかを調べてください。これには `dmesg` の出力を見てみるのも一案です。 シリアルサポートがモジュール化されている場合、まず `modprobe serial` を実行してください。 そして以下のようなエントリを探します。

      Serial driver version 4.25 with no serial options enabled
      ttyS00 at 0x03f8 (irq = 4) is a 16550A     #first serial port /dev/ttyS0
      ttyS01 at 0x3000 (irq = 10) is a 16550A    #e.g. infrared port
      ttyS02 at 0x0300 (irq = 3) is a 16550A     #e.g. PCMCIA modem port

  こうならないようならば、BIOS で赤外線サポートが有効になっていないか、カーネルがあなたの赤外線デバイスの SIR モードを検出できていません。 現時点で二機種のラップトップでこの現象が起きるのが分かっています。 HP の OmniBook 800 と東芝の Libretto モデルです。 私は PnP サポートが IR ポートの検出に影響するかどうかは知りません。 上手くいかないのはこのあたりが怪しいという場合は、試してみて結果を私まで連絡お願いします。 また SIR が動かなくとも FIR が使えるかもしれません。

- 場合によっては、 `setserial /dev/ttyS<0-2> port 0xNNNN irq M` として赤外線シリアルポートの値を設定する必要があるかもしれません。 特に、赤外線ポートが独立したシリアルポートの場合、これが必要になるケースが多いようです。 通常この値を変更する必要はないでしょう。これ以上の情報は、以下の FAQ の項を参考にしてください。

- `kerneld` や `kmod` を使っていない場合、`modprobe irda` を使って irda モジュールを読み込んでください。

- `lsmod` を実行してください。irda と irtty モジュールが表示されるはずです。

- /var/log/messages にはこの時点で "Serial connection established" のメッセージが出力されているはずです。

- `irattach` を実行して、他の IR デバイスを検出するため少々 (例えば７秒ほど) 待ってください。 その後、/var/log/messages に書き出されたメッセージを見てみてください。 以下のような出力が得られているはずです (Linux/IrDA に無関係な行を多少削除しています)。

      Jan  2 12:57:26 japh kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A
      Jan  2 12:57:26 japh kernel: ttyS02 at 0x03e8 (irq = 4) is a 16550A
      Jan  2 12:57:26 japh kernel: Linux Support for the IrDA (tm) protocols (Dag Bra
      ttli)
      Jan  2 12:59:09 japh syslog: executing: 'echo 1 > /proc/sys/net/irda/discovery'
      Jan  2 12:59:09 japh syslog: Setting discovery to 1 exited with status 1
      Jan  2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
      Jan  2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
      Jan  2 12:59:09 japh syslog: Serial connection established.
      Jan  2 12:59:09 japh kernel: IrDA irda_device irda0 registered.
      Jan  2 13:01:22 japh syslog: executing: './drivers start '
      Jan  2 13:01:22 japh syslog: Serial connection established.
      Jan  2 13:01:42 japh syslogd: Printing partial message
      Jan  2 13:01:42 japh 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
      Jan  2 13:02:49 japh kernel: IrDA Discovered: japh
      Jan  2 13:02:49 japh kernel:     Services: Computer

- 更に詳しい情報は `cat /proc/net/irda/discovery` で得られます。

##### ドングル接続 - シリアルポート用の赤外線アダプタ

現在サポートされているドングルは、Extended Systems 社の ESI-9680 JetEye、Tekram 社の IRmate 210B、ACTiSYS 社の IR220L and 220L+、 Greenwich 社の GIrBIL ドングルです。

Dag Brattli さんによると (原注: 私が多少修正していますが)

「ドングルを使うには以下のようにしてください。

    modprobe tekram         # or esi or actisys
    irattach -d tekram      # or -d esi or -d actisys

`modprobe` は `/etc/modules.conf` が正しければ必要ありません。ご覧のとおり、`irattach` には `-d` オプションを付けなければいけません。 これは同時に２つのシリアルポートに別々のドングルがついている場合があり、そのような場合には tty でバインドしたいドングルがどちらなのかを知らせなければならないためです。 もし２つのシリアルポートで２つのドングルを使っているなら、以下のようにしてみて下さい。

    modprobe tekram
    modprobe esi
    irattach /dev/ttyS0 -d esi &
    irattach /dev/ttyS1 -d tekram &

追記: 以下の二つのドングルを切り変えて使おうとしたことがないので、 その場合スタックがどういう風に振る舞うか実のところは分かりません :-) …… また、現在のところ ACTiSYS 社の新ドングル 220L+ を持っていないので、テストもできないのです。 新ドングルは、通信速度として 38400bps を追加でサポートしていますので、 `irattach` を使ってカーネルに使っているドングルの違い (と使用できる QoS) を指定してやる必要があります。

    irattach /dev/ttyS0 -d actisys     # for the 220L dongle
    irattach /dev/ttyS0 -d actisys+    # for the 220L+ dongle

現在のドングルサポートの実装では、内部に個々のドングルに対応した状態を持ってはいないので、ACTiSYS のいずれのドングル (220L と 220L+) も二個を同時に (２つのシリアルポートに接続して) 使うことはできません。そうする必要がある方がおられるなら私 (Dag Brattli) まで連絡下さい。この件を再考してみますので」

注記: 赤外線モデム (Swissmod 56Ki。Telelink AG 製) をラップトップ (Window$ 95 でしか動作しないような、標準でない IrDA ハードウェア付きのもの) に接続して使う際には、動作させるために BIOS から赤外線サポートを削除する必要がありました。

Dag Brattli さんによると「現在 `irtty` に代えて `irport` が使えます。また、`irtty` コマンドからドングル関係の処理を全部 `irda_device` へ移しましたので、`irport` にドングルを接続できるようになっています。 但し、小さなユーザ空間ユーティリティ `dongle_attach` を使って特定のドライバのハードウェアとして指定する必要があります。 また、`irattach` は以前と同じように動作しますので、 `irtty` にドングルを接続する際に新旧の違いに気がつくことはないでしょう (ドングルへの ioctl は `irda_device` に転送するようにしました)。`irport` はソフトウェア割り込みレベルを一段省略できること、それと強制的に半二重動作になるため、エコーキャンセレーション機能のないドングル (HP-4000 の girbil ドングルなど) でエコーに煩わされることがないこと、の２つの利点があるため役に立つかもしれません。 `irport` を使うためには `modprobe` で `modprobe irport io=0x3f8 irq=4` (値はあなたの環境に合わせてください) 等としてパラメータを与えてやる必要があります。 このパラメータは `/etc/conf.modules` に `options irport io=0x3f8 irq=4` のように書くことで明示的に与えることもできますが、その場合 `depmod -a` を忘れずに実行して、単に `modprobe` ではなく `modprobe irport` を実行してください」

Alvin Loh さんによると「ESI 9680C のユーザは parallax と ESI の各信号処理方式のどちらも使うことができます。 つまり ESI 9680C を動かすのに Parallax のドライバを使うことができます」

##### ドングル接続 - 赤外線マザーボードアダプタ

ACTiSYS IR2000 ドングルのサポートは pc87108 サポート中に組み込まれていますので、カーネルに組み込むか `modprobe pc87108` としてモジュールを組み込むか、`/etc/irda/drivers` に `modprobe pc87108` を追加して組み込むかです (だと思います)。

James さんからハードウェア設定に関する説明を受け取りました。 「二種類のハードウェアがあります。5pin の一列のヘッダを使ったものと、18pin 二列ヘッダの端を使った 6pin 二列のヘッダで IrDA に接続するものです。 基本的にはどの IrDA 互換なトランシーバも動作します (製造中止になった古い IRM3001 を一山持っています) が、5V と 0V 間にコンデンサ (1uF 位のタンタルを使ってください 訳注: 2002 年現在ではむしろ 1uF 程度の積層セラミックのほうが、大きさ、入手、安全性のどれをとっても断然お勧めです。 ) を接続して、その他の信号 (RX->RX、TX->TX、5V->5V および 0V-0V) を接続してください。 ハンダ付けをしたくないということなら、ケースの穴にあう 5pin の コネクタつきの IR モジュールを売っているメーカはたくさんあります」

##### 高速赤外線通信 (FIR)

IrDA 標準では、三種類の転送速度が定義されています。

- SIR = 標準 IrDA, 115kbps までの速度の IrDA です

- MIR = 中速 IrDA,

- FIR = 高速 IrDA (4Mbps),

- VFIR = 超高速 IrDA(16Mbps) 次の標準になると思います

115,200bps (SIR) までは、多くの (多分すべての) 赤外線コントローラは、シリアルポートとして (カーネルからは) 動作し、RZI (Return to zero になるよう反転する) 変調を用いています。 すべての赤外線コントローラが 4Mbps(FIR) をサポートしているわけではありませんが、4Mbps までは 4PPM (4 パルス符号化) 変調方式を用いています。 現在二種類の FIR チップがサポートされています。ナショナルセミコンダクター社の NS PC87108 チップ (IBM Thinkpad 560X で使用) と、Winbond 社の W83977AF (IR) FIR チップ (Corel の Netwinder PC で使用) です。 対応するモジュールを読み込むことで FIR サービスをスタートすることができます。 Linux/IrDA はモジュール読み込みの時点でハードウェアを調べます。 他にもドライバの開発が行われています。

というわけで、どの速度で使いたいのかはっきりさせる必要があります。 SIR を使った場合、大体 10 kByte/s 程度の速度が得られます。FIR (4Mbps) なら、運が良ければ 300 Kbyte/s 以上まで出せます。

#### プリンタ接続

- 上記に従って Linux/IrDA を準備してください。特に、 `/dev/irlpt*` があるかを確認してください (これがない場合、root から `mknod /dev/irlpt0 c 161 16` を実行してください)。 そのあと、まず手始めの簡単なテストを行います。小さなファイルを `cat FILE >/dev/irlpt0` として `/dev/irlpt0` に書き込んでみてください。 フォーマットのことを気にする (手順に従った行構成など) 必要はありません。 これは最初のチェックに過ぎませんので。これが上手くいかない場合、 `/dev/irlpt0` のパーミッションを調べてください。 プリンタの通信状態を示すランプで、通信が行われているかを見ていてください。 例えば、HP の 6P/MP では赤外線ポート (左下の隅で、ペーパトレイの近く) の緑のランプが通信状態を示します。

- `cat` コマンドでは整形された出力は得られませんが、テストには便利です。 `cat` によるテストが動くなら、次はあなたのプリンティングシステムに従って IrDA をサポートしたプリンタを設定する番です。詳しい手順は説明文書、例えば LinuxPrinting.org の Printing-HOWTO などを参照下さい。

- 次は、HP LaserJet 2100 を例に取り Common Unix Printing System - CUPS を用いた例です。

      lpadmin -p IRDA_PRINTER_NAME -v parallel:/dev/irlpt0 -E -m de/hp2100_6.ppd.gz

  ppd ファイルのパスのリストを得るには、`lpinfo -m` としてください。

- もちろん他のプリンティングシステムも同様に使えます。この場合には、 `/etc/printcap` を編集して `irlpt0` をプリンタデバイスとして指定してください。

- もっと良い方法は、`/etc/printcap` を変更して `/dev/lp1` に加えて (あるいは `/dev/lp1` の代わりに) `/dev/irlpt0` を使うようにすることです。

- 簡単にプリンタを設定するには、印刷用のソフトウェア (例えば APSFILTER や MagicFilter の EZ-Magic 原注: RedHat でもこの目的の GUI を持つソフトウェアがあるはずです。 など をつかうのも手です。使う前にまず `/etc/printcap` のコピーを作っておきましょう。

- APSFILTER で HP LaserJet 6P (非 PostScript プリンタ。HP 6MP は PostScript プリンタです) を使う場合の例です。 当面問題となる質問は以下の二つです。

  "Do you have a (s)serial or a (p)arallel printer interface?" 「プリンタインターフェースはパラレル (p) シリアル (s) のどちら?」 この質問の答えは p です。

  "What's the device name for your parallel printer interface?" 「プリンタインターフェース名はなんですか」。答えは /dev/irlpt0 です。

- プリントデーモンを `kill -HUP <PID of lpd>` として再スタートします 訳注: Debian GNU/Linux だと、/etc/init.d/lpd restart とする。 。 これ以外のプリントデーモンを使っている場合には、所定のコマンドを実行してください。

#### LAN 接続 - IrLAN

- 現在、Linux/IrDA コアチームは IrLAN プロトコルサポートのメンテナンスをもう行っていません。

  IrLAN を使って、他のネットワーク機器に接続することができます。 機器の具体例としては、同じく IrLAN を使った Linux マシン、HP NetBeamer、赤外線サポートのある Window$ 95 マシンなどです。

- Dag Brattli さんによると「IrLAN を使う場合には、`ifup eth0` を行う前に `modprobe irlan_client` が必要です。 カーネル中にないプロセスコンテクストを要求するので、 request_module() も外さなければなりませんでした」 場合によると、アクセスモードの選択を行う必要もあるかもしれません。 ダイレクトモードにするには、`modprobe access=1` とすれば OK です。 IrLAN の規定では、送信側はダイレクトモードかピアモードのどちらかでなければならならず、現時点では IrLAN を開始するときに選択してやる必要があります。

- IP アドレスとそれに付随するパラメータを設定するには、

  `ifconfig eth0 up <ip_address> netmask <ip_netmask>`

  と実行してください。プロトコルが動作中なら、通信を始めることができます。 RedHat の netcfg を使ってこれを行うこともでき、そちらの方がずっと簡単です。 その後は、`/sbin/ifup eth0` とするだけで良いようになります。 `ifconfig` は IrLAP アドレスをどう扱うか知らないため、表示されるアドレスは実際には最初の４バイト (リトルエンディアンフォーマットで) だけです。

- ping を使ってネットワークデバイスをテストしてください。詳しい設定については NET3-HOWTO を参照下さい。

- 経路情報を与えるのを忘れないように。 `route add default gw <ip_gateway>` か `route add -host <target host> dev eth0` とします。

- ここで接続をテストするため他のマシンに ping してみましょう。

- テストのためには、同じ部屋に置いたラップトップと一つの赤外線 ethernet デバイスだけを使うことを薦めます。何か問題があるなら、IR ethernet デバイスで使用できる別モードがないかを見て、それを試してみてください。

#### HP NetBeamer との接続

- `/etc/irda/drivers` を編集して、 `irattach /dev/ttyS0` を含めるようにしてください。 ここで /dev/ttyS0 の部分は使っているシリアルインターフェースにあわせて修正してください。 また、`/etc/modules.conf` を編集して `alias tty-ldisc-11 irtty` を含めてください。

- `irattach` 実行の後、 `echo 3 > /proc/sys/net/irda/debug` として様子を見てください。

- 次に `modprobe irlan` としてください。

- さらに、私の場合 NetbeamIR を認識させるためには、 `echo 9 > /proc/sys/net/irda/slot_timeout` としてやる必要がありました。これを実行しなければ、"media busy" のメッセージだけどっさり出て、NetbeamIR を見つける方はうまくいきません。 この数字の 9 は私の環境で動作する最小の値でしたが、新しいカーネルの場合 90 としてください。

- `/etc/irda/network.orig` を `/etc/irda/network` にリネームし、使う IP 構成にあわせて `/etc/irda/network.opts` を編集します。また、 `/etc/pcmcia/shared` を `/etc/irda` にコピーしておきます。 このファイルはディストリビューションに含まれていないためです。

- さらに私の場合、`/etc/irda/shared` の 131 行目 `grep_stab $1 < /var/run/stab` をコメントで無効にする必要がありました。何かの理由でここがこけると "usage" メッセージが吐かれます。

- ラップトップを光の届く範囲に持ってくれば、NetbeamIR は検出され、irlan0 が作成され設定されます。

- 双方向で、7 kb/s の速度が得られ、ping/ftp/telnet できます。一丁あがり！

#### Palm III コネクション - IrCOMM

PPP

  Rui Oliveira さんによると「最新の樋口 隆英さんの IrCOMM パッチ (050998) を当てた後、HotSync を使って Palm III と Linux マシンとの PPP コネクションを張ることができたことをお知らせします。いま IRLink (IsComplete からの) を使っていて、これでシリアルポートを IR に変換しています。pilot-xfer (確か kpilot から) との通信も問題なしです。PPP 接続はうまくいってはいますが、 まだメール取得と Web ブラウジングには成功していません。 これは多分コネクションタイムアウトのせいだと睨んでまして、チェック中です。 PPP に関するより深い説明は PPP-HOWTO をご覧下さい。(中略) 現在はっきりと確実な接続が Linux マシンと Palm III との間で張れるようになりました。pppd の起動は、私の所では以下のようにしています。

         /usr/sbin/pppd /dev/ircomm0 57600 192.168.2.10:192.168.2.11
         proxyarp passive silent persist noauth local nodetach

  PPP コネクション上で ping、ssh と http が使えています。 但し、確か廃止になったはずの discovery を有効にしなければならないのは変ですが。 これを有効にしなければ IrCOMM コネクションは生きているのにも関わらず、IrLAP 層のリンクが切断されてしまうのです。 pilot-link ツール (Linux/Palm のファイル同期に用いる) は IrCOMM 上で `/dev/ircomm0` を使って問題なく動いています」 また、`kpilot` についての報告も受けています。こちらは `pilot-xfer` ほどすいすい動く、とはいかないようです。

IrCOMM

  Jon Howell さんによると、「私は IrCOMM を試してみようと思いました。というのは Palm III はシリアル情報を IR ポートへ転送可能にできるからです。これには PalmCentral から入手できる IS/Complete の IrLink を使います。 そこから IrCOMM を使って IrDA でターミナルプログラム (シリアルモードの PalmTelnet など) を動かすことができるはずです。そこで二台の Palm Pilot 間でこの構成を試してみましたが、当然 IR 上でどんなプロトコルが使われているかは分かりません」

  1. Palm で HotSync を開始します。これには Palm に IrCOMM サポートがあることが必要です。 このサポートを組み込むには、IrDA upgrade が必要になります。

  2. Palm をドングルの前に置きます。

  3. `pilot-xfer -p /dev/ircomm0 -s <sync-dir>` として IrCOMM を開始します。 運良くこれだけでうまくいっているなら、ファイルの同期がはじまるでしょう。 HotSync を Pilot 上で開始する前に `pilot-xfer` を実行していたなら、不幸になっていると思います :-) `PalmTerm` のようなターミナルプログラムも役に立つでしょう。

Wessel de Roode さんによると「Palmpilot は標準では 57k の速度に決めうちしています。但し自分で Pilot 用のソフトウェアを書けば 115k の速度の設定を行うことができます。以下 irlib.h から引いておきます」

    ---------- irlib.h from the SDK 3.0 from palmpilot -----
    // Options values for IrOpen
    #define irOpenOptBackground     0x80000000   // Unsupported background task use
    #define irOpenOptSpeed115200    0x0000003F   // sets max negotiated baud rate
    #define irOpenOptSpeed57600     0x0000001F   // default is 57600
    #define irOpenOptSpeed9600      0x00000003

Peter Pregler さんによると「Palm が irda デバイスと通信可能な位置に入ったとき、"Transmission: waiting for sender" というポップアップウィンドウが出ます」

これに対する Ron Choy さんの返信は 「煩わしいポップアップの問題に対処するという ShutupIR というプログラムが Vector にあります。 試していませんが、多分この件はこれで解決できるんじゃないですか」

#### Palm (Handspring Visor) 用 IR 経由 Linux ターミナル

IrDA メーリングリストの Chris Morris さんによると「IrDA を使って Handspring Visor との間で hotsync を行う以外に、IR 経由で Linux テキストターミナルとしても動かすことに昨夜成功しました。 私のコンピュータは Dell Inspiron 3800 です (ちなみに、このマシンと 2.4.0 カーネルで IR を動かすのに何週間も悩んでいました。問題は結局 Linux が ttyS3 に対して間違った IRQ を見ていたためでした。IR HOWTO にもこの件に関する言及をお願いします)。使っているのは Hacker Dude-san 作の Beam Sync for Visor V1.0b2 Hacker Dude-san's Page と Shigeyuki Seko さん (seko_at_pamupamu.com) 作の Mini Term です。 ラップトップ側では IR は SIR モードで、COM3 に BIOS で割り当てています。 `/dev/ttyS3` を IRQ3 に、 `setserial /dev/ttyS3 irq 3` で割り当ててやる必要があります。ブート後、以下のようにしています。

    /sbin/modprobe irda
    /sbin/modprobe irtty
    /sbin/modprobe ircomm
    /sbin/ircomm-tty
    /usr/sbin/irattach /dev/ttyS3 -s

`cat /proc/net/irda/discovery` で Visor が IrCOMM で見えるようになっています。 /etc/mgetty+fax/mgetty.conf は以降の３つのオプションが必要です。 "port ttyS3 direct y speed 9600": もっと高速でも良いのかもしれませんが、私の所ではここまでしか動きませんでした。次に toggle-dtr n を行い、 最後に /etc/inittab に "palm:235:respawn:/sbin/mgetty ircomm0" を。 これ全部を行った後 Mini Term を開始でき、'/sbin/init q' を入力して Visor から数回 <CR> を送ればテキストターミナルログインプロンプトが出ます。 このメールを書いている最中に、以前は気がつかなかったけどとても役に立ちそうなサイトに気がつきました。 palm-ppp-mini です。」

#### Psion 5 との接続

Andrew Chadwick さんによると「(Psion シリーズ 5 を持っているなら) SIR の転送レートが正しく設定されていることを確認するうまいやり方は、S5 を Linux マシンの赤外線ポートの窓に向けて、ファイルを光で送ってみることです。 光送信のダイアログが画面に出ている間、S5 は IrDA 接続を行おうとします (他の赤外線をつかったマシンが見つからないというメッセージが出ているときでも)。 この間、cat > /dev/ttyS3 として通信内容を見ることができ、シリアルパラメータが両方のマシンで正しいならゴミに混じって "Symbian EPOC" (マシンの識別子) の単語が見られるはずです」

Fons Botman さんによると「誰か Psion 5 を持っている人で、添付のプログラムを試してみてもらえるひとはいませんか。 これは、linux で Psion 5 IR がファイルを送受するプロトコルをエミュレートするものです。 これを使えば単純なコマンドでファイルの交換ができるようになります。 転送レートは 115kB SIR を使って 9.7kB/sec で、なかなか悪くないといったところです。 これはβ版ですので、まず Psion をバックアップしておいてください。 一度ソフトウェアリセットを食いました (データは失われませんでしたけど) ;-)」 ソースは付録に載せています。

#### 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;

#### Linux と WinCE 3.0 (PocketPC) をつなぐ

この章は Stanislav Sokolov さんの提供によります。

この章では、Linux マシンと PocketPC デバイスを接続する方法について扱います。 前の章「Linux と WinCE を接続する」(これは CEwindows にも置かれています) は、Microsoft が WinCE 3.0 から直接 IrDA と接続するためのサポートを削除する挙にでているため、使えません。 私はまず "Linux to Windows CE Connection" (これは The Gadgeteer にあります) を出発点にしましたが、さまざまな場所で変更と簡素化を行う必要がありました。 この説では、PocketPC と Linux 間で `ping` ができるところまでを扱います。 ネットワーク用アプリケーションは、以下のサイトでいろいろ見つかるはずです。 PDAcentral、 CAM、 WinCEcity

私が試したシステムは、

- Compaq iPAQ に PocketPC Version 3.0.9348 を搭載したもの (これが PocketPC 2002 で動作するかどうかはわかりません。なんと言っても、 Microsoft はバージョン間で標準を変更するのが大好きなので)。

- Linux 側は、Slackware Linux 7.1 を載せた Compaq LTE5250 ラップトップ。

- Kernel 2.4.19

- PPP 2.4.1 (PPP は kernel 2.4.x と組み合わせる場合、2.4.0 以前のものは不可です)

PocketPC 側では、 Start -> Settings -> Connection -> Modem (英語版は。日本語版は不詳ですが、これを参考にしてください) を開き、 新しい接続 (new connection) を作成し、適当な名前を付け (私は Linux-m としました)、汎用のモデム (Generic IrDA modem) を選択し、ボーレートを 115200 に設定します。ポート設定 (Port Settings) では、8-N-1-Hardware を選択し、手動でダイアルする (Enter dialing commands manually) にチェックを入れます。これは、必要もないのに PocketPC に電話のダイアルをさせないようにするためです。 ほかの二つのチェックボックスはチェックしないままとしてください。 TCP/IP 設定では、サーバからの IP アドレスを使用する (Use server-assigned IP address) を選択し、Slip を使用する (Use Slip) はチェックせず、ソフトウェア圧縮を行う (Use software compression) と、IP ヘッダ圧縮を行う (Use IP header compression) をチェックします。 ネームサーバ (name Servers) の項では、サーバの指定したアドレスを用いる (Use server-assigned addresses) を選択します。"OK"、"次へ" の順に叩きます。 ここで電話番号を聞かれることがないはずです (聞かれた場合には、最初に戻って 高度な設定 (Advanced) セクションの "手動でダイアル" コマンドが選択されているか再チェックしてください。 呼び出しをキャンセルする (Cancel call...) と、ダイアルトーンを待つ (Wait for dial tone...) がチェックされていてはいけません。 これで、PocketPC 側の設定は完了です。

Linux 側では、まず必要なモジュールがすべてロードされていることを確認してください。 以下が、通信が成功するためにロードされ、使われるモジュールの一覧です。

    Module                  Size  Used by    Not tainted
    ircomm-tty             31040   2
    ircomm                 13448   0  [ircomm-tty]
    irtty                   7616   2
    ppp_async               6688   1
    ppp_generic            15740   3  [ppp_async]
    slhc                    4592   1  [ppp_generic]

`ls -la /dev/ircomm*` の出力が以下のようになっていることを確認してください。

    crw-------   1 root     root     161,   0 Nov 25 15:09 /dev/ircomm0
    crw-r--r--   1 root     root     161,   1 Nov 22 19:30 /dev/ircomm1

`irattach /dev/ttyS2 -s`と入力して irattach を開始してください。

これで IrDA ポートがログインターミナル有効となったはずです。 私はログイン用に `agetty` を使っていますが、お好みの getty 相当プログラムが利用できます。`/etc/inittab` に以下の行を追加します。

    s3:2345:respawn:/sbin/agetty ircomm0 115200 vt100

ファイルをセーブして、`init` を再起動して有効にしましょう。

    init 2; sleep 3 ; init 3

接続の第二段階を行うため、以下のシェルスクリプトを用意しておきます。

    #!/bin/sh
    /usr/sbin/pppd -detach noauth local lock 192.168.55.1:192.168.55.2 ircomm0 115200 &

さて接続を行いましょう。まず赤外線ポートの位置あわせを行い、PocketPC 側で "開始 (Start)" -> "プログラム" -> "接続 (Connections)" から、作成した接続 (Linux-m) を叩きます。現れる "接続先 (Connect To)" ダイアログでは、何も入力せずただ "接続 (Connect)" を叩きます。 "手動ダイアルターミナル (Manual Dialing Terminal)" が現れて、Linux マシンのログインプロンプトがでるはずです (すぐにログインプロンプトがでない場合には、 仮想キーボードを立ち上げて "Enter" を押してください)。 ログインする必要はありません (これは お ま け です。 究極のリモートコントローラという訳です :)

Linux マシン側では、PocketPC ターミナルにゴミが出たらすぐに `pppd` コマンドを実行し、PocketPC 側で "ファイル(File)" -> "続行 (Continue)" を行います。 `pppd` では以下のメッセージがでるはずです。

    Using interface ppp0
    Connect: ppp0 <--> /dev/ircomm0
    Cannot determine ethernet address for proxy ARP
    local  IP address 192.168.55.1
    remote IP address 192.168.55.2

PocketPC 側で "ステータス：接続中 (Status: Connected)" のダイアログボックスが表示されるはずです。 `ifconfig` を実行して ppp0 インターフェースが揚がって動作していることの確認ができます。 `ping 192.168.55.2` では以下のような出力がされるはずです。

    PING 192.168.55.2 (192.168.55.2): 56 data bytes
    64 bytes from 192.168.55.2: icmp_seq=0 ttl=32 time=62.5 ms
    64 bytes from 192.168.55.2: icmp_seq=1 ttl=32 time=310.0 ms
    64 bytes from 192.168.55.2: icmp_seq=2 ttl=32 time=59.9 ms
    64 bytes from 192.168.55.2: icmp_seq=3 ttl=32 time=59.8 ms
    64 bytes from 192.168.55.2: icmp_seq=4 ttl=32 time=60.0 ms

    --- 192.168.55.2 ping statistics ---
    5 packets transmitted, 5 packets received, 0% packet loss
    round-trip min/avg/max = 59.8/110.4/310.0 ms

RTT は距離と光の状況で変わります。切断 (Disconnect) か、相当のボタンにより、以下が出力されます。

    LCP terminated by peer
    Modem hangup
    Connection terminated.
    Connect time 2.6 minutes.
    Sent 1336 bytes, received 1274 bytes.

ここまでの手順がうまくいかないなら、以下をチェックしてください。

- `getty` が開始している。`/dev/ircomm0` が設定されていない場合には、開始できません。これは getty 起動の前に `modprobe ircomm-tty` を行う必要があるということです。

- 手動でダイアルする (Enter dialing commands manually) がチェックされている。 PocketPC に電話番号をダイアルさせてはいけません!

- 非同期 PPP サポートがカーネルに組み込まれているかを確認します。 `modprobe ppp_async` が正しくロードされない場合、非同期 PPP サポートがカーネルに組み込まれていません。組み込まれていない場合、 "Couldn't set tty to PPP discipline: Invalid argument" というエラーメッセージが出力されます。

- `pppd` は setuid root でなければいけません。 `chmod u+s /usr/sbin/pppd`.

#### 携帯電話接続

私の知る限り、一部の携帯電話は IrCOMM 標準を採用しています。Ericsson SH888 と NOKIA 6110 がそうです (NOKIA 8110 については分かりません)。 恐らく、他の携帯電話は IrOBEX 標準 (これに対して接続を確立するやり方は Palm III の章を参照してください) か IrMC を採用していると思われます。 Linux と携帯電話の接続に関する全般的な情報が知りたければ、 TuxMobil をご覧下さい。IrCOMM を使って PPP モデム接続を立ち上げることも、OpenOBEX を用いてファイル (アドレス帳エントリ、絵文字、着信音など) の送受を行うこともできます。

##### 概説

この章では、IrDA を用いた Linux マシンと携帯電話間の接続の方法を説明します。 これは Matthias Schmidt さんからの報告が主体となっています。 また、以下の携帯電話でテストされています。

- Ericsson T39m

- Siemens S25

- Siemens S35i

- Siemens ME45

- Nokia 6110

- Nokia 6210

IrDA の基本部 (カーネル設定、/etc/modules.conf, irattach, PPP) を、これまでの節で記載したとおり設定します。PPP に関しての詳細は、 PPP-HOWTO も参照ください。 次に、携帯電話が認識されているかどうかをチェックします。

    # irdadump
    xid:rsp be1eb736 > 08666644 S=6 s=4 SIEMENS S35 hint=9024 [ Modem IrCOMM IrOBEX ] (28)
    # irdadump
    xid:rsp be1eb736 > 35450000 S=6 s=4 Nokia 6100 hint=8101 [ PnP Telephony ] (28)
    # irdadump
    xid:rsp be1eb736 > 04489982 S=6 s=5 SIEMENS ME45 hint=b124 [ PnP Modem Fax IrCOMM IrOBEX ] (29)

###### PPP ダイアルアップソフトウェア

###### minicom

ISP と接続する方法はいくつかあります。もっとも基本的な (そしてしばしば唯一の) 方法は、`minicom` のようなターミナルプログラムを使うことです。

###### wvdial

もう少し楽がしたい場合には、 wvdial. が使えます。これは設定が容易で、多数のローミングプロバイダとドイツの Tante T gh0st で動作します。私も昨日多少テストしましたが、wvdial では HRZ のダイアルインサーバに接続することはできませんでした。wvdial は毎回 "Bad password" と答えますが、これはサーバが携帯電話用のソフトモデムが login とパスワードの文字列を送るより早く反応するためです。 標準の ppp 設定は以下です。

`/etc/wvdial.conf:`

    [Dialer Defaults]
    Modem = /dev/ircomm0
    Baud = 9600
    Init1 = ATZ
    Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
    Password = internet
    Username = internet
    Phone = 00393492002800
    ISDN = 0
    Modem Type = Analog Modem

    [Dialer shh]
    Init3 = ATM0

###### PPP Tools

wvdial での問題 (上記参照？) のため、個人的には最良の方法は標準の PPP tools を使うことだと思います。これは `pppconfig` コマンドで設定し、`pon` で開始、`poff` で切断します。

以下は `irda` という接続名で PPP 接続を行う場合の例です。

`/etc/ppp/pap-secrets`

    # username	connection-name	password
    test	irda		test

`/etc/ppp/peers/irda`

    hide-password
    noauth
    connect "/usr/sbin/chat -v -f /etc/chatscripts/irda"
    debug
    /dev/ircomm0
    9600
    defaultroute
    noipdefault
    user test
    remotename irda
    ipparam irda
    usepeerdns

`/etc/chatscripts/irda`

    ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE'
    ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
    '' ATZ
    # dial-in number of the ISP
    OK-AT-OK ATDT<YOUR_ISP_PHONE_NUMBER>
    CONNECT \d\c

###### 絵文字や着信音や SMS などなど

携帯電話と IrDA 接続ができるようになったならば、それを使って楽しめます。 情報を取得したり、SMS にアドレス帳を格納したり、SMS を送信したり、 絵文字を追加 (BMP 形式です) したり、ハードディスクに古い絵文字を待避したり、 同様の処理を着信音 (MIDI 形式です) に対して行えます。 これらの楽しみをおこなうには、以下のものが必要です。

- OBEX 通信可能な携帯電話。たとえば Siemens 社のもの

- 動作する IrDA 接続

- scmxx ツール

- gscmxx (オプション)

まず、携帯電話を IrDA サービスにバインドします。

    # irattach /dev/ttyS1 -s
    IrDA: Registered device irda0

接続を確認します。

    # irdadump
    xid:cmd 9d5dcefa < ffffffff S=6 s=3 (14)
    xid:cmd 9d5dcefa < ffffffff S=6 s=4 (14)
    xid:rsp 9d5dcefa > 08666644 S=6 s=3 SIEMENS S35 hint=9024 [ Modem IrCOMM IrOBEX ] (28)

携帯電話の情報を表示します。

    # scmxx -i
    Accessing device /dev/ircomm0
    OK, a modem device is present.
    Vendor:         SIEMENS
    Model:          S35i
    Revision:       20
    Serial (Phone): xxxxxxxxxxxxxxx
    Serial (SIM):   xxxxxxxxxxxxxxx
    SIM-ID:         xxxxxxxxxxxxxxxxxxxxx
    Operator:       D2
    SMS Server:     +491722270333
    Charset:        GSM
    Battery:        40%
    Signal/BER:     -79 dBm/?
    Time:           02/10/07,11:48:49
    Readable Slots: bmp: 0-1, mid: 0, vcs: 1-30
    Phonebooks:     FD, SM, ON, ME, LD, MC, RC, OW, MS, CD, BL, RD, CS
    SMS storages:   SM

アドレス帳をディスクにセーブします。

    # scmxx -g -PSM -f phonebook
    Accessing device /dev/ircomm0
    OK, a modem device is present.
    Detected SIEMENS S35i
    phonebook created.
    Receiving: 1 2 3 4 5 6 7 8 9 [...]
    Received all gettable entries

SMS を表示します (ここではスロット 3 です)

    # scmxx -g -S3 -f -
    Accessing device /dev/ircomm0
    OK, a modem device is present.
    Detected SIEMENS S35i
    Looking for SMS of specified type...
    Receiving incoming, read SMS from slot 3.
    Slot: 3
    From: xxxxxxxxxxxxxx
    Date: 2002-10-03 23:11:47 (GMT+0)
    SMSC number: xxxxxxxxxxxxxxxx
    PDU type: SMS-DELIVER MMS
    Data Coding Scheme: 7bit-GSM
    Message length: 160
    Message:
    	xxxxxxxxxxxxxxxxxxxxxxxxxx

現在の絵文字をディスクにセーブします。

    # scmxx -g -B0 -f logo.bmp
    Accessing device /dev/ircomm0
    OK, a modem device is present.
    Detected SIEMENS S35i
    Slot 0...
    Receiving packet 1 of 5...
    logo.bmp created.
    Receiving packet 2 of 5...
    Receiving packet 3 of 5...
    Receiving packet 4 of 5...
    Receiving packet 5 of 5...
    File transfer complete.

現在の着信音をディスクにセーブします。

    # scmxx -g -M0 -f sound.mid
    Accessing device /dev/ircomm0
    OK, a modem device is present.
    Detected SIEMENS S35i
    Slot 0...
    Receiving packet 1 of 1...
    sound.mid created.
    File transfer complete.

##### OBEX 接続

以下の OpenOBEX の節を参照ください。携帯電話での OBEX 接続の詳しい情報も近く追加予定です。また、接続設定に関しては Palm III の節の情報を参考にしてください。

##### 特定の携帯電話関連の情報

###### Motorola

Michael McConnell さんから Motorola Timeport GSM と Linux-IrDA とが話せるようにするためのガイドを 彼のウェブサイト に掲示したとの投稿がありました。

###### Ericsson

T39 ユーザ (たぶん T300 も) への注記: Jean Tourrilhes さんのサイト をチェックしてください。カーネルパッチを行い、 `/proc/sys/net/irda/max_tx_window` をいじる必要があります。

1. 設定

  `/dev/ircomm0` を用いて通信セッションを開始するには、たとえば以下のようにします。

      dip -t
      > port ircomm0
      > term

  多分 `dip` の代わりに `cu` や `xc` を使うこともできるでしょう。そのときは `cu -l /dev/ircomm0` または `xc -l /dev/ircomm0` とします。 Ericsson GF768 と IR Modem DI 27 の組み合わせを試行中との報告もありました。

  Benny Amorsen さんによると「SH888 はシリアルケーブル接続の際に IrDA ポートをエミュレートします。 設計者がなぜこんな妙なことを考えたのかはちょっと想像もつきませんが、Windows との組み合わせで動かすにはこのやりかたを使います。 私は Windows で動かそうとしたことはありませんけど」

  Ales Dryak さんから以下のサーベィを貰いました (Debian/GNU Linux ディストリビューションのようなので、設定を適宜書き替えてください)。Mobile Ericsson SH888 は `ati1 = 980408 1035 PRGCXC125101` で、

      mknod /dev/ircomm0 c 161 0
      mknod /dev/ircomm1 c 161 1

  とします。

2. /etc/conf.modules

  /etc/conf.modules は次のとおり

      alias tty-ldisc-11 irtty
      alias char-major-161 ircomm-tty

3. /etc/irda/drivers は次のとおり

      irattach /dev/ttyS0 -s # (IrDA ポートは SIR モード)

4. /etc/chatscripts/sh888 は次のとおり

      <ABORT stuff>
      "" \d\d\d\d\d\dATZE0
      OK ATD<phone number to call)
      CONNECT \d\c

5. /etc/ppp/peers/sh888 は次のとおり

      noauth
      connect "/usr/sbin/chat -v -f /etc/chatscripts/sh888"
      /dev/ircomm
      115200
      defaultroute
      noipdefault
      user <your username> # don't forget to add your password to chap secrets or chat script

SH888 に対して pppd 呼び出し (`pppd call sh888`) を行い、少し待った (だいたい 30 秒) 後は、私たちのイントラネットとインターネットに対して自由にアクセス (telnet、ftp、www、icmp はテストしました) できるようになっています。 さらには `/dev/ircomm` で `minicom` を使って AT コマンドを打ち込めるようになります。ばっちりです。 また安定に動作するようです。

###### ツール

Gerhard Gonter さんの報告です「メーリングリストの数名のメンバが Ericsson 社の携帯電話 SH888 を Linux-IrDA ソフトウェアで使うことに成功しています。このソフトウェアは AT コマンドを使って電話の各部にアクセスでき、とても役に立ちます。 内蔵の電話帳は興味深い操作対象でしょう。

インターネットで少々検索した (FreshMeat、Deja、Yahoo など) 範囲では、Linux またはその他の Unix 向けの、電話帳のツールを見つけることはできませんでした。 というわけで、小さな Perl スクリプトと関連モジュールを書いてみました。 現在個人的には使える処まで来ましたので、整理して開発の初期段階としてのリリースを行います。tarball は 次のところ にあります。」

メーリングリストでは `gsmlib` の同時使用が推奨されていましたが、 これを赤外線ポートで使うことも、私の SH888 と接続することもできていません。 Florian Lohoff さんの報告では「S25 の種の携帯電話では動くようです。 ただ、S25 が CR LF に反応しないようなので ifdef を変更する必要はありました。 その変更後、/dev/mobilephone -> /dev/ircomm で張ったリンクで S25 経由での SMS 送信は問題なく行えています。 電話帳のバックアップはまったく動いていません。これは電話帳が空の場合に S25 がわけのわからない応答を返すためです」

SMS メッセージと電話帳の詳細仕様は、無料 (FSF の意味でのフリー、ではなく ;-) で ETSI からダウンロードできます。GSM 07.07 (それと、多分 GSM 07.05 も必要になるでしょう) を探してみてください。 ダウンロードする前に登録が必要です。この標準は Acrobat PDF 形式です。S25 がサポートするコマンドは無料で Siemens のウェブサイトに PDF 形式であります。

SH888 の AT コマンドをまとめて解説した文書が Ericsson のサイトの 888_R1D.pdf にあります。

###### NOKIA

Carlos Vidal さんによると 「私の勘違いなら教えてほしいんですが、どうやら Nokia の携帯電話には純粋なハードウェアモデムは搭載されておらず、PC の WinModem と同じ類のものが載っているようです。Nokia がモデム接続のことについて書いている個所には毎回 "Windows ソフトウェアモデム" とか、それに類する語が使われています。 これに加えて傍証として、この携帯電話には Nokia 専用のウィンドウズ向けソフトウェア (Nokia Cellular Data Suite という名称です) が必要ですし」

Joonas Lehtinen さんによると「61xx シリーズの機種では、確かにそうです。 8810、9000(i) と 9110 の各機種は問題なく動作します (つまり、本物のモデムを内蔵しています)。 私の Nokia 9000 は linux との組み合わせでは IrCOMM と答えます」

Carlos Vidal さんからの試行と修正案は「私の Nokia 6110 で Linux を使ってどこまでできるか試してみています。ちょうど gnokii-0.2.4 原注: gnokii は Nokia 社の携帯電話をシリアルケーブルで接続するための Linux および *BSD 向けのツールで、 gnokii で入手できます。 をコンパイルしたところですが、これは動きませんでした 原注: 最新の `gnokii` コマンドを試してみてください。 挙動が改善されているはずですし、携帯電話との IrDA 接続についての役に立つ文書も用意されています。 。手元に Nokia Data Suite ソフトウェアがあるので、これまでに以下の接続を試しています。

Nokia 6110 <-- Nokia Cable --> PC/Linux <-- Null-modem cable --> PC/W95

PC/Linux では program snooper (Itoh Jun-ichiro (いとじゅん) さん作) をシリアルポートを正しく設定できるよう小変更を加えて使っています。 これ以外の同様の動作を行えそうな sniffer ソフトウェア (たとえば sniffit) の URL は見つけられませんでした(原注: シリアルスニファについては付録参照)。

通常は snooper が正しいボーレートに設定されているなら、電話と PC/W95 は snooper が間にない場合と同じように通信できるはずです。 これはミノルタのディジタルカメラのプロトコルを解読した際にはうまく動いたのですが、Nokia の携帯電話の場合、電話のほうが応答しないか、しばらくだんまりになってしまいます。

どうやら、通信の最初の段階ではタイミングがきわめて重要なようです。 これまでで得られたログは次のものです。

    0>1: UUUUUUUUUUUUUUUUUUUUUUUU
    line 0: LE *DTR *RTS ST SR CTS CD RI *DSR
    line 1: LE *DTR *RTS ST SR CTS CD RI *DSR
    0>1: UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
    UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
    UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
    UUUUUUUUUUUUUUU\x1e\x00\x0c\x02\x00\x09\x00\x01\x00\x0d\x00\x00\x02\x01@\x00P\x
    06
    1>0: \x18\x00\x00\x00\xfc\x18\x00\x00\x00\x00\x00\x00\xc0\xf0
    0>1: \x1e\x00\x0c\x02\x00\x09\x00\x01\x00\x0d\x00\x00\x02\x01@\x00P\x06
    1>0: \x18\x00\x00\x00\x18\x00\x00\xc0\xf0\x18\x00\x00\x00\x00\x00\x00\xc0\xf0
    0>1: \x1e\x00\x0cd\x00\x06\x00\x01\x00\x10\x01`\x13\x13
    1>0: \x18\x00\x00\xf0\x00\x00\xfc
    0>1: \x1e\x00\x0cd\x00\x06\x00\x01\x00\x10\x01`\x13\x13

0 は PC/95 で、1 は電話です。通信は一連の 'U' (0x55) で、DSR/DTR が on の状態で始まります。電話は '0x18 0x00 ...' と答えます。 この一連の会話はしばらくの間、両方ともだんまりになるまで続き、 最後には電話がクラッシュしてリセットする唯一の方法は電池を抜くだけ、という状態になります。

私の推定では、電話が正しいボーレートを見つけようとし、それが snooper を入れたことに伴う遅れのため失敗している、という現象ではないかと思います。 恐らく赤外線接続で用いている IrDA プロトコルで何かしないといけないのではないかと思っています」

Wessel de Roode さんによると「私は (Palm Pilot では) Discovery IR hint ビットを使うようにしています。

    Discover:
    0:xxxxxxxx:81.01
        01  IR_HINT_PNP     01  IR_HINT_TELEPHONY (IrMC ?)
        80  IR_HINT_EXT

    Device info query:
    \006Device\012DeviceName
        4e 6f 6b 69 61 20 36 31 30 30       Nokia 6100

Nokia の PNP デバイスクエリができるようにもしました。Nokia は一台の PNP デバイスを持っています。このデバイスは具体的には 9600 ボーのモデムに相当する PNPC100 です。このクエリの設定を消してしまったので、回復するためのヒントを持っている人は教えてください。 確か IrDA:<dunno>:PNP:Comp#01 のようなものだったはずです。 同じ IrDA のクエリの IrDA:<dunno>:PNP:CompCnt は Nokia で使える PNP デバイス数を返します。ここではこれはひとつだけです。

ほかにも SMS メッセージを送受したり、アドレス帳を更新するのに gsmlib を使うことに関する報告を受けています。 これらの機能は、細かい文字集合の問題を除いて動作しています。

###### おすすめのツール

gnokii は Linux/Unix 向けツール群で、もうすぐ Nokia (GSM) 携帯電話用の modem/Fax ドライバとして使えるようになります。サポートされている端末は 3110、3810、8110、5110、6110 と、その後継機種です。

###### Siemens S25

設定

  これは Florian Lohoff さんによるものです。「一歩一歩すすめましょう。まず irttach /dev/ttySx 等で irda が動くようにしておいてください。次に /proc/net/irda/discovery を実行してみて次のようになっているか見てください。

      (flo@paradigm)~# cat /proc/net/irda/discovery
      IrLMP: Discovery log:
      nickname: SIEMENS S25, hint: 0x9024, saddr: 0x4286ce23, daddr: 0x04295741

  次に ircomm と ircomm-tty をロードします。普通は /dev/ircomm* の正しいものを使って minicom などでダイヤルや、電話帳のロードやバックアップが容易に行えるはずです」

Timo Felbinger さんが東芝のラップトップと Siemens S25 の接続について説明してくれています。

- 「kernel 2.2.12 と patch-2.2.12-irda3、カーネル組み込みの IrDA サポートと ircomm と ircomm-tty をモジュールで用意します。

- `mknod /dev/ircomm0 c 161 0` とします。

- `modprobe ircomm` と `modprobe ircomm-tty` をおこないます。

- /etc/irda/drivers の最初の部分に modprobe toshoboe を記載しておき、 irattach を開始します。ここで注意しておきたいのは、irattach の前に toshoboe モジュールをロードしないこと。 さもないとデバイスビジーやリソースビジーになります。

- `dip -t` の後、コマンドポート ircomm0 と S25 間で接続が成立しているはずです。 ここで、IR ポートと S25 のどちらも起動されている必要がもちろんあります。 この時の距離はあまり問題にはならないようです。

- ターミナルを立ち上げれば、S25 は普通の Hayes 互換モデムのように振る舞い、通常の AT コマンドで使用できます。

- pppd によるダイアルアウト接続は特に設定しなくとも使えます」

###### おすすめのツール

SCMxx は Siemens 社の携帯電話との間でファイルの送受と、格納されているファイルの消去ができます。 ファイルは指定された名前のファイルまたは標準入力から読み込むことができ、指定された名前のファイルまたは標準出力に書き出せます。 SMS は携帯電話に格納することなく直接送受できます。SCMxx は Siemens 社製のいくつかの携帯電話 (S25 とその後継機だけです) でテストされています。

##### ドイツ e-plus

以下はドイツの e-plus ユーザ向けの記述です。

e-plus 契約には Free&Easy を除いて WWW への PPP 接続が含まれており、別の登録は必要ありません。このサービスは電話番号 123100 でドイツ国内のどこでもつかえます。 また、これは買ってきて直ぐに使えます。

pppd 設定は

    /dev/ircomm0
    defaultroute
    netmask 255.255.255.0
    debug
    mtu 552
    crtscts
    noauth
    connect '/usr/sbin/chat -v -f /etc/ppp/eplus.chat'
    chat script /etc/ppp/eplus.chat:

    ABORT "BUSY"
    ABORT "ERROR"
    ABORT "NO CARRIER"
    ABORT "NO DIALTONE"
    ABORT "NO ANSWER"
    SAY "initializing modem..."
    "" "AT"
    "OK" "ATZ"
    SAY "dialing..."
    "OK" "ATDT123100"
    SAY "waiting for CONNECT..."
    "CONNECT" ""
    SAY "connected!"
    SAY ""

ネームサーバとしては 192.76.144.66 を使えます。 ユーザ名やパスワードは不要です。

#### デジタルカメラ接続

Markus Schill さんによると「SONY の DSC-F1 赤外線アダプタを linux で使うことに興味のある方がこんなにいるのに元気付けられます。 現在のところ、まだ linux-irda ソフトウェアとカメラ付属の PuMa Technologies 社の IR アダプタで遊んでいるだけです。 現在までの状況は、次のとおりです。現在のところ linux 2.0.33 と最新の linux-irda を使っています。その状況で次のコマンドを入力すると、

    modprobe irda
    modprobe irtty
    irattach /dev/ircomm0

アダプタはカメラとのやり取りをはじめます。/var/log/messages には SONY-DSC-F1 が見つかったというログが出ますが、サービスは何も開始されません (原注: これは linux 2.2.x カーネルと Linux/IrDA の組み合わせでは、多分違う状況になると思います)。

linux のケーブル接続環境で、カメラとの通信に使えるソフトウェアは２つあります。 (1) chotplay と (2) stillgrab です。 この両方とも tty をコマンド行オプションとして指定しますので、irtty プロトコルスタック層でも動くのではないかと思います。 ただし、今のところ linux-irda のソースにはあたっていません。 このためスタックを理解できているとはいえませんが、irtty を使うと 普通の tty のような感じになるのですよね? その際にどんなサービスを開始すべきなんでしょう？」

Dag Bratti さんによると「カメラの使っているアプリケーションレベルのプロトコルについてはよくわかりませんが、 IrDA(TM) の Infrared Transfer Picture Specification (IrTran-P) を実装している可能性はあります。 IrTran protocol をみれば、これは IrTTY ではなく IrCOMM 上に実装されたプロトコルであることがわかると思います。 IrTTY は Linux シリアルドライバと話すために使っているだけだと思います」

David Burley さんの Kodak-Digital-Camera-HOWTO には、IrDA を動かすやり方の記載と、Linux と IrDA を使って Digital OS カメラとの通信を実装する方法についての記載が含まれるようになりました。

#### Microsoft-Windows と Linux/IrDA

##### はじめに

この節の目的ですか? それは、つまるところ Linux ユーザには残念ながらすべての必要なハードウェア情報が与えられているわけではありません。 時にはこの情報が Window$95 を調べることによって窺えることがあります。 また、時にはこの二つが通信できるようにすると便利なこともあります。 また Linux を使って、友達が立ち寄った際に Windows 95 ラップトップのための一時的なアクセスポイントを提供することもできます。

どこから入手するかについてですが、 MicroSoft のディレクトリ `/Windows95/downloads/contents/WURecommended/S_WUCommunications/W95IrDA/` 以下に Infrared Transfer (赤外線通信サポート) 2.0 のサポートパックがあります。 これは自己展開型のアーカイブで、名称は W95IR.EXE、331KB あります。 ちなみに、マイクロソフトはこのファイル (その他のファイルについても同じですが) の置き場所を気まぐれに変えます。 以前の URL は Microsoft Windows95 IrDA - Old でした。

Microsoft(tm) は Windows95 用の IrDA サポートでは都合３つのバージョンをリリースしています。 バージョン番号はコントロールパネルのソフトウェアのアイコン、および infrared.inf ファイル中にあります。

バージョン 1.0 はまだ一部のハードウェアの添付ソフトウェアの形で配布されています。

バージョン 2.0 は現在 Microsoft のウェブサイトで配布されているバージョンです。 これは自己展開型のファイル W95IR.EXE に収録されています。 最後に私が見たときには、これは 434KB で W95IR.EXE にありました。Microsoft のウェブサイトは頻繁に変更されていますので、 このファイルが別な場所にあったり、なくなっていたりしても驚かないでください。

バージョン 3.0 はダウンロード可能な赤外線開発キット IRDDK30 に含まれています (いました)。ただしこれが役に立つのは開発者にほぼ限られます。 これは内部的にも 2.0 とは違っており、Linux バージョン同様 "miniport" ネットワークドライバベースです。これは少し前からあり、NT も部分的にサポートしていますが、明らかに NT4.0 の主ディストリビューションには含まれませんでした。 Windows 95 向けには 2.0 のほうが恐らく適しています。 但し、あなたの入手した特定のハードウェアのドライバの説明書に従って選択を行う必要があるかもしれません。

MS のウェブサイトには役に立つユーティリティの IrXfer が、IRXFER.EXE アーカイブに収録される形で置いてありました。 これは赤外線転送ユーティリティで、私の知る限り IrOBEX の一種 (IrOBEX プロトコル仕様書による) を使っています。 このユーティリティは自由にダウンロード可能なものでしたが、最後に見たときには見つけることができませんでした。 これは良質のグラフィカルインターフェースを持つユーティリティで、IrDA を使ってコンピュータ間でファイルの転送を行えます。

一部のラップトップ機、たとえば HP Omnibook 800 では、このパッケージにベンダで手を入れたものを使う必要があります (HP Omnibook 800 ではリカバリ CD に収録されています)。

特に、`..\windows\inf\*.inf` ファイルとデバイスマネージャは、設定の詳細を知るために参考になります。

私の知る限り、Windows NT は IrDA(TM) をサポートしていません。Windows 98 については、私が聞いた範囲では IrDA はまだサポートされていません。 Countersys 社 は自社の JetBeam 製品向けに NT4.0 向けの IrDA を販売しているということで、 Microsoft も JetBeam 向けにはそれを使ってくださいといっています。

以下は私の知る限り、ですが

- Windows95 : 2.0 を使用

- Windows98 : 3.0 と IrXfer が付属 (Linux/IrDA で動作。IrOBEX で多分動作)

- WindowsNT4.0: IrDA サポートなし

- Windows2000 : 3.0(+?) MicroSoft

これ以外に M$ 社以外からの製品がいくつかあります。 注意点として、これらのいくつかは専用の特殊なプロトコルを使っています。

- Extended Systems: QuickBeam 1.15 (Linux/IrDA, IrOBEX で動作) 訳注: 現時点では Extended System 社。シェアウェアのようだ。CounterPoint というソフトメーカはあるが、IrOBEX 関連のドライバ製造元ではあるものも、 これは直接そのメーカの製品ではないようだ。

- Laplink: LapLink 7.5 訳注: Laplink 社。日本語版もあり (Intercom 社)

- Altiris: CarbonCopy 32 4.0 訳注: 現在は Altiris 社。日本語版も見たような気がする

- Symantec: pc ANYWHERE 7.5 訳注: シマンテック。日本語版もあり。最新は 10.5

- Puma Technology: TRANXIT pro 4.0 訳注: 日本語版もあり

##### Linux/IrDA と MS-Windows95 IrDA(TM) 間の接続

IrNET が使えます。

##### MS-Windows98 機と Linux 間の通信

Ha Duong Minh さんによると「今日、 OpenOBEX project の ircp について報告できることを嬉しく思います。 ircp は現在、linux マシンと win98 機との間で魔法のようにファイルの転送ができています。 これ以上簡単にはできない、という方法で。 `ircp file1, file2, ...` または `ircp -r [DEST]` とやれば IrDA でファイル転送ができます。受信するには -r を使ってください」

##### MS-Windows2000/XP 機と Linux 間の通信

Windows 2000 と XP 向けには、Jan Kiszka さんによるドライバ IrCOMM2k があります。これは、シリアルポートをエミュレートする物で、モバイルデバイスとの間のデータ交換に利用できます。 たとえば、一部の携帯電話をモデムやファックス機器のように振る舞わせることができます。 また、赤外線ポートを持つ PDA と PC との間のファイル同期をとることもできます。IrCOMM2k は GPL ライセンスのオープンソースプロジェクトです。

#### Linux と Linux の接続

##### 接続用モジュール

Linux/IrDA で２台の linux マシンを接続するには４とおりの方法があります。

1. Dag Brattli さんが IrOBEX サポートについて書いています 「目をぱっちり開けているユーザなら、Linux 間でファイルを IrDA で送信できない理由が何かと首を傾げているかもしれません。 実のところ、そんな理由は何もありません (私自身はまだ試していませんが)。 つまり、linux ラップトップ間でファイルを送受する簡単な方法が、 既に手持ちにあるということです。 これはひょっとすると、待ち望まれている "キラーアプリケーション" なのかもしれません。"load_misc irobex" と両側のマシンで実行して、一方の側で "iroabex_app get" とし、他方で irobex put <file> としてください」

2. Linux/IrDA のネットワーク接続を用いて。多分 irlan_client を一方のマシンで、 irlan_server を他方のマシンでロードする必要があると思います。

3. IrCOMM サポートを用いた場合、言い換えるとシリアルライン上の場合、minicom や pppd などを使うことになります。 単に IrCOMM だけを二台の Linux マシン間で使う場合、 ＊一方＊のマシンの /etc/conf.modules に以下の行を付け加えてください。

       # set ircomm protocol engine to client-only mode
       options ircomm ircomm_cs=1

   この行を両方のマシンに加えてはいけません。 さもないと、両方とも相手からの通信を受け付けることができなくなります。 またカーネル 2.2.7 以降では /etc/conf.modules に ircomm_cs=1 を加える必要はなくなっています。この指定を使っている場合、削除してください。

4. IrNET: 次の IrNET リンク 参照。

##### 圧縮について

この機能はまだ全く実験中のものであることに注意してください。Dag Brattli さんによると「とりあえず圧縮サポートを IrLAP に加えたことをお知らせしま す。ご存じかと思いますが、これは IrDA(TM) 標準の一部では＊ありません＊が、 Linux 間では通信路で同じ圧縮機能があるかどうかのネゴシエーションを行うことができます。 このため、Win95 や Palm III その他との間では、全く圧縮機能は使えません。 これは私の知る限り Linux のみ、の機能です。 IrDA(TM) 標準では、デバイスは協議用のヘッダの未定義部を無視すべきとなっていますので、この機能は IrDA(TM)『互換』です (未使用のヘッダの値を使っているため)。

圧縮コードを試してみたい (Linux <-> Linux で) 場合、実際に接続を行う前のどこかの時点で irda_deflate モジュールをロードしてください。私は irattach の前に行っています。

ここで加えている圧縮は、RFC (Request for Comments) 1950 から 1952 までで規定された圧縮標準の実装である zlib ライブラリを使っています。 詳細については ftp://ds.internic.net/rfc/rfc1950.txt (zlib フォーマット)、rfc1951.txt (伸張フォーマット)、rfc1952.txt (gzip フォーマット) の各 RFC を参照下さい。

圧縮インターフェースは PPP と似ており、いろいろな圧縮機能を好きなだけインストールできます。 現時点では GZIP のみがサポートされていますが、BSD 圧縮も後で加わるでしょう。とりあえず GZIP 圧縮を 4Mbps で試したところです。 これは大失敗で、フレームの圧縮にあまりにも時間がかかったため、性能は圧縮を使わないときより実際のところ劣化しました。 結論としては、圧縮は SIR 速度でだけ使うべきだ、ということでしょう」

#### 複数デバイスの同時使用

Dag Brattli さんによると「IrLAP レイヤは複数のデバイスを扱えるように拡張されています。従って、内部 IR ポートで IrLAN を使いながら、同時に IrDA ドングルで Pilot と通信することもできます。 (中略) それではどうやって Linux/IrDA 接続を２つ設定するのかと言うことですが、実は単に持っている各 IrDA ポートに対して `irattach` で起動してやるだけです。

    irattach /dev/ttyS0         # (my ESI dongle)
    irattach /dev/ttyS2         # (my builtin IrDA port)

FIR デバイスでも次のようにしてやれば動きます。

    irattach irda0 -s
    irattach irda1 -s

この２つのデバイスは、同じマシンで動作していても互いに相手のことをみることはありません。 この２つのデバイスは、全く同時にディスカバリを開始するからです。 しかしながら、この２つのデバイスは別々のラップトップに対して使う必要があります。 この条件下で、ドングル、内蔵 IrDA ポートと IrDA PCMCIA カードが同時に何の問題もなく使えています。

２つのデバイスが干渉する状況では、接続を確立することが困難になることがあります。 これは、メディアがビジー (受信中) の場合にはデバイスは送信ができないためです。 私は場合によっては、２つのデバイスの間に本をたてることで回避しています」

#### ドッキングステーションとの接続

Dag Brattli さんによると「 Tekram IRDocking IR-660 との接続についてです。 このデバイスはドッキングステーションで、LAN 接続、プリンタ、マウス、キーボードの各インターフェースを持っています。 内蔵のマウスやキーボードと同時に利用することもできます。 単に `gpm -t ps2 /dev/irkbd` とすれば、ラップトップは IR-660 との間でキーボードとマウスの接続を作成します。 後は単に gpm が /dev/psaux と /dev/irkbd の両方を読むように直し、X11 が /dev/gpmdata を読むようにして、設定一丁あがりです」

「 ...問題が一つあって、gpm は複数のマウスを扱えますが、Linux は複数の別々のキーボードを扱えません。 このため、私のようにノルウェー語配置のキーボードとリモートの US キーボードを使っている場合は、操作時に混乱します。 この件については Alan Cox さんから、複数のキーボードを実際にサポートしようとしているプロジェクトのヒントを貰ったので、調べてみるつもりです」

「 ...OK。だいたい動くようになりました。/dev/console で TIOCSTI を使って、スキャンコードを直接 tty queue に入れることができます。 これは、ある程度変換・加工済みのキーコードを期待する仮想コンソールにとっては問題となるのですが、X はたまたま生のスキャンコードを望むので、 X を使っているときはとても良好に動作します。 その他の仮想コンソールでは動作しませんが。 まぁ、私にとってはこれで十分なので、単にテキストだけの仮想コンソールで動作させるために、 スキャンコードをキーコードに変換してキーマップに従って振り分けることに多大な時間をつぎ込む気はありません。 見たところ、irkbd ドライバはユーザ空間にうまく持ちこめているようです」

「 ...Tekram IR-660 デバイスは、キーボードとマウスをつける以外に IrTTP を使ったプリンタ接続ができます。IrLPT を使っても印刷はできますが、この場合 IrLMP との排他利用が必要になるので面白くありません。 文書を印刷するだけのためにネットワーク、マウス、キーボードを止めたくはありませんから。 fifo バッファを使った IrTTP プリントができるかどうか試してみるつもりです」

「 ...Tekram はデータチャネル以外にも制御用のチャネルを加えていますので、進行中の通信のステータス情報を多少得ることができます。 Tekram の専用プロトコルの名前は P1248 です。これは "P1248" クラスの "IrDA:TinyTP:LsapSel" LM-IAS エントリとして公開されているので、探してみてください」

「 ...Canon は P1248 プロトコルを使っており、Canon のプリンタモニタプログラム PrintBuddy2 (日本語版) はそのプロトコルを現在使っています。 Canon がデータチャネルを使っていない理由は分かりません。多分 TinyTP を他の方法に加える形でサポートしたかったためではないかと思います。 "IrLPT" クラスの LM-IAS 中の "IrDA:TinyTP:LsapSel" として試したり見たりできますので、探してみてください」

#### キーボード接続

Linux/IrDA キーボードドライバは、今はユーザ空間で動作します。 上記のドッキングステーションとの接続の章をご覧下さい。

Lichen Wang さんによると「IrDA-D と呼ばれている標準は、データを転送するよう設計されたものです。 これは IR キーボードには適していません。この IrDA-D を、Dag さんが Linux OS に、そして MS が Windows OS に移植しています」

IrDA-C (Control: 制御) がキーボード、ジョイスティックなどのために設計されたものです。 ただし、これを使った製品が市場に出回っているのを見たことはありません。

IrDA-D は IrDA-C と会話することはできませんし、その逆の IrDA-C から IrDA-D への会話もできません。物理層でのエンコーディング/デコーディングとソフトウェアプロトコルの両方が大きく異なっています。

IrDA-D と IrDA-C を一つのデバイスで両方実装することはできます。 シャープによると、IrDA-D と IrDA-C を、同時に同じ IR 空間内で両方使わない限り共存できると言うことです。 この言い方は多少ばかばかしくはありますが。 この言い方の定義に従えば、その過程で宇宙を永久に破壊さえしなければ、どのようなものでも何かと共存させることはできますから。

真面目な話、シャープの言いたいのは IrDA-D を多少いじって、二つのデバイス間のネゴシエーションで決定された最大切換時間と実際の送信の間に多少の未使用時間を作るようにしたこと、 そしてその未使用時間に IrDA-C のフレームを押し込んだ、ということでしょう。 IrDA-D プライマリと IrDA-C マスタは同一のデバイスに実装されている必要があります。 この実装ではキーボードは動くでしょうが、マウスやジョイスティックは時として応答性が悪くなることがありそうです。

#### シリアルケーブルを使った接続

時として本物の赤外線接続ではなく、シリアルケーブルを使って接続する方が便利な場合があります。 Bjorn Hanson さんによると「ケーブルを使って、僕の Ericsson SH888 との間で PPP で接続することができています。。以下のようにして行いました。 一部の手順は間違っているかもしれませんが、僕のところでは動いています :-)。

- `/etc/conf.modules` に `alias tty-ldisc-11 irtty` を書き足しました。

- /etc/irda/drivers を irattach /dev/ttyS0 となるよう編集しました。

- modprobe を使って irda と irtty モジュールをロードしました。

- irattach を開始しました。

- /dev/ircomm0 (/dev/modem のシンボリックリンク経由で) を使って kppp を走らせました。

- `stty < /dev/ircomm0` を実行しました。

- ホストに ping しました。

- `ifconfig irda0 down` を実行しました。

ping と ssh (ls -l を数回行って試しました) では何もかも問題なしでしたが、 Netscape mail をこの PPP で使おうとした際、コンピュータがハングしました。 リブート後、Netscape と lynx の両方を試してみましたが、どちらも接続まではできるものの、何のデータも受信できませんでした」

Claudiu Costin さんによる別法です

- Linux 2.2.5 で IrDA をモジュールとしてコンパイルします

- irattach ではカーネルに IrDA スタックを自動ロードさせることができないため、 `modprobe actisys` と打ちます。

- 次に irattach /dev/ttyS1 -d actisys とします。ここで COM2 はヌルリンクとして使っています。

- ping <address> は良好に動作します。

これを両方のマシンで行う必要があります。

注意してほしいのは、これは２つのマシンをつなげるお勧めのやり方ではないということです。代わりに PPP を使ってください。 私としてはこのやり方がどんなときに役に立つのか分かっていませんが、 ここにこれを含めるのは、メーリングリストで時々聞かれるからです。

#### ヌルモデムケーブル接続

IrDA が使えるハードウェアがなくても、シリアルヌルモデムケーブルで接続を行うことができます。IrDA ポートをシリアルポートにアタッチしてください。 つまり、"irattach /dev/ttyS0 -s" と両方のマシンで実行してください。

#### ピアツーピア接続 / 直接モード

IrCOMM と IrLAN はどちらのモードでも動作しますが、これらのモードの違いや、どのようにして設定するかについての詳しい情報を、私は現在持っていません。

#### 東芝のノートブックでの Linux/IrDA

Guenther Wieser さんが HOWTO about Toshiba and IrDA を書いています。これらのノートブックでは toshoboe Linux/IrDA ドライバが必要です。

#### デスクトップコンピュータでの IrDA カード

最近の一部のマザーボードには IrDA チップが実装されています。 モデルによっては、IrDA LED の追加が必要です。実際の例の記載が Andreas Gohr さんのところ にあります。

### Linux/IrDA でサポートされているハードウェア

#### ラップトップ機の IR ポートの情報を得るには

ラップトップ機で IrDA ポートを Linux/IrDA で動かすには、StandardInfraRed (SIR) モードか FastInfraRed (FIR) モードを使うことになります。

##### SIR

SIR モードの最大速度は 115,200bps で、赤外線ポートは 16550A UART を用いたシリアルポートをエミュレートします。 このポートはカーネルのシリアルドライバによって、起動時またはシリアルドライバモジュールをロードした時点で認識されます。 もし、赤外線ポートサポートが BIOS で有効になっていれば、殆どのラップトップ機で以下のようなカーネルメッセージを見ることができるでしょう。

    Serial driver version 4.25 with no serial options enabled
    ttyS00 at 0x03f8 (irq = 4) is a 16550A     #first serial port /dev/ttyS0
    ttyS01 at 0x3000 (irq = 10) is a 16550A    #e.g. infrared port
    ttyS02 at 0x0300 (irq = 3) is a 16550A     #e.g. PCMCIA modem port

##### FIR

4Mbps までの速度を使いたければ、あなたのマシンにはしかるべき FIR チップが搭載されている必要があります。また、このチップをサポートした Linux/IrDA ドライバも必要です。このため、使われている FIR チップの正確な情報を入手する必要があります。 この情報を得るには以下の方法があります。

1. マシンの 説明書 を読んでください。 但し、必要なだけの、かつ信頼できる情報がここから得られることはまれです。

2. FIR チップが PCI デバイスかどうか調べてください。 `cat /proc/pci` を実行してみてください。 カーネル 2.2.x の場合は `/proc/bus/pci` を見ます。 ただ PCI からの情報は不十分なことが多いです。PCI デバイスの最新情報とベンダ番号は `/usr/src/linux/Documentation` 以下のカーネル文書か、Craig Hurt さんのページ http://members.hyperlink.net.au/~chart で得られます。 カーネル 2.1.82 以降では、`pci-utils` パッケージの `lspci` コマンドを使うこともできます。

3. DOS ツール の `CTPCI330.EXE` を使うこともできます。このツールはドイツのコンピュータ誌 CT の CTPCI330.ZIP から入手できます。 このプログラムで得られる情報が、Linux 用のツールで得られるものより良質であることもよくあります。

4. Plug-and-Play (PnP) デバイス情報を得る。 `isapnp` ツールが役に立つでしょう。 但し、私はこのツールをこの目的で使ったことはありません。

5. もしすでに Linux/IrDA ソフトウェア をインストール済みなら、FIR モジュールをロードして `dmesg` の出力を見て FIR が検出されるかどうかを見るという手もあります。

6. 検出方法は他にもあります。以下は Thomas Davis さんによる説明です: (原注:多少編集しています) 「ベンダの FTP サイトを漁ってみて、Windows9x FIR drivers を探します。これには SMC チップなら、以下のものが含まれています。

       -rw-rw-r--   1 ratbert  ratbert       743 Apr  3  1997 smcirlap.inf
       -rw-rw-r--   1 ratbert  ratbert     17021 Mar 24  1997 smcirlap.vxd
       -rw-rw-r--   1 ratbert  ratbert      1903 Jul 18  1997 smcser.inf
       -rw-rw-r--   1 ratbert  ratbert     31350 Jun  7  1997 smcser.vxd

   よくわからないときは、まず Windows 95 向けのドライバの .inf/.vxd ファイルを見てください。 Windows95 の出荷版には FIR ドライバは＊全く＊含まれていませんので、 FIR ドライバは全てサードパーティ製で、多くは Counterpoint 製のものを ESI 社が移植したものです」

7. Thomas Davis さんは SMC 社製の小さな DOS ユーティリティ も見つけました。以下を参照下さい。 http://www.smsc.com/ftppub/chips/appnote/ir_utils.zip このパッケージには `FINDCHIP.EXE` コマンドと `FIRSETUP.EXE` ユーティリティが含まれており、後者はチップアドレス以外の全設定値を変更するのに使えます。 さらに、このパッケージには `BIOSDUMP.EXE` が含まれており、 これを用いれば以下の出力が得られます。

   例1 (COMPAQ Armada 1592DT の場合)

       In current devNode:
                  Size      = 78
                  Handle    = 14
                  ID        = 0x1105D041 = 'PNP0511' &- Generic IrDA SIR
       Types:  Base = 0x07, Sub = 0x00,  Interface = 0x02
       Comm. Device, RS-232, 16550-compatible
       Attribute = 0x80
                       CAN be disabled
                       CAN be configured
       BOTH Static & Dynamic configuration
       Allocated Resource Descriptor Block TAG's:
       TAG=0x47, Length=7 I/O Tag, 16-bit Decode
       Min=0x03E8, Max=0x03E8
       Align=0x00, Range=0x08
       TAG=0x22, Length=2 IRQ Tag, Mask=0x0010
       TAG=0x79, Length=1 END Tag, Data=0x2F

   結果 1

   Irq Tag, Mask に注目してください。

   `Irq Tag, Mask (ビットマップ) = 0x0010 = 0000 0000 0000 0001 0000`

   これは IRQ 4 だということです (0 からはじまって順に上がっていきます)。 またこれは SIR のみのデバイスで、IRQ 4 で、IO=0x03e8 に割り当てられています。

   例 2 (これを得たマシンの詳細は不明です)

       In current devNode:
                 Size      = 529
                 Handle    = 14
                 ID        = 0x10F0A34D = 'SMCF010' -- SMC IrCC
       Types:  Base = 0x07, Sub = 0x00,  Interface = 0x02
       Comm. Device, RS-232, 16550-compatible
       Attribute = 0x80
                      CAN be disabled
                      CAN be configured
       BOTH Static & Dynamic configuration

       Allocated Resource Descriptor Block TAG's:
       TAG=0x47, Length=7 I/O Tag, 16-bit Decode
       Min=0x02F8, Max=0x02F8
       Align=0x00, Range=0x08
       TAG=0x22, Length=2 IRQ Tag, Mask=0x0008
       TAG=0x47, Length=7 I/O Tag, 16-bit Decode
       Min=0x02E8, Max=0x02E8
       Align=0x00, Range=0x08
       TAG=0x2A, Length=2 DMA Tag, Mask=0x02, Info=0x08
       TAG=0x79, Length=1 END Tag, Data=0x00

   結果 2

   a) これは SMC の IrCC チップで、

   b) 一部は 0x02f8 のアドレスにあり、8 byte 分のアドレスを占有し、irq は 3 で

   c) もう一方の部分は 0x02e8 のアドレスにあり、8 byte 分のアドレスを占有し、dma 1 番 (0x02 =0000 0010) に接続されています。

   Thomas Davis さんは得られたマシン情報の一部を http://www.jps.net/tadavis/irda/devids.txt に置いています。

   このパッケージはエンドユーザ向けではなく、一部のユーティリティは危険なものになりえます。唯一の説明文書は Microsoft Word 形式でパッケージに同封されているため、Linux ユーザは必要に応じて `catdoc` などで読んでください。`catdoc` は http://www.fe.msk.ru/~vitus/catdoc/ で入手できます。

8. Microsoft Windows 9x/NT オペレーティングシステムの Device Manager を使う。

9. 以下の章で記載する ハードウェアサーベィ が使えます。

10. 最後の手段として、ラップトップ機をあけてチップセット上の印刷を見ることもできます。以下は、(多分不完全な) メーカリストです 訳注: メーカ名なので誤記は問答無用で直しました。 。 Crystal Semiconductor, Agilent (HP または Agilent (通常表記はどちらもロゴ)。 チップ名は HSDL で始まる 訳注: IrDA の光モジュール・トランシーバ)、 日立 (Hitachi)、IBM、National Semiconductor Corporation (NSC。表記はロゴ)、 NEC、Philips、シャープ (Sharp)、Standard Micro Systems Corporation (SMC/SMCC 訳注: 印刷ロゴは SMCC )、 Texas Instruments (TI)、VLSI、Winbond。 例として、HSDL-7001 の回路例を挙げます (HP の小冊子により、原著者により修正)

            LEDs    Encode/Decode    SIR/FIR

           HSDL-1001    HSDL-7001      UART 16550/
                          MicroController
           ______      ______________      ____________
          |      |    |              |    |            |
        (||   TXD|<---|IR_TXD     TXD|<---|SOUT        |
          |      |    |              |    |            |
          |      |    |           RCV|--->|SIN         |
          |      |    |              |    |            |
        (||   RCV|--->|IR_RCV  16XCLK|<---|BAUDOUT     |
          |      |    |          NRST|-+  |            |
           ------      --------------  |   ------------
                                       V

#### ハードウェアサーベィ

Linux と赤外線通信可能なデバイスに関するサーベィが幾つか WWW 上にあります。

- The Linux/IrDA Project - Hardware Survey

- 樋口 隆英 さんのサーベィ。このページは日本語です。

- 私も IrDA hardware survey at TuxMobil を用意しています。 このリストには、この文書で触れていない赤外線通信可能なデバイス (マウス、プリンタ、リモートコントローラ、トランシーバなど) についての情報も載せています。 このハードウェアサーベィをより充実したものにしていくために、様々なハードウェアに関する赤外線デバイスの情報を更に集めていく必要があります。 お持ちのハードウェアの正確な名称と、使われている赤外線コントローラのタイプを短い電子メールで報告いただければとても助けになります。 また、Linux/IrDA がどの程度良く動いているか、どの tty でか、動作した際のポートと割り込みの設定、使っている赤外線デバイス (例: プリンタ、携帯電話) などについて教えてください。 また、赤外線デバイスのための Linux ドライバを開発するのに必要となる、そのデバイスに関する詳細な技術資料を提供していただけると助かります。

#### ビッグエンディアン

ソース自体はビッグエンディアンのマシンでビルドして動かせるようになっているはずですが、私は実際にそうやって使っているという報告を受けたことがありません。 実際に動くかどうかについて関心があります。 多分 IrDA ドングルのようなものが、テストするために必要になるでしょう。

i386 と alpha はリトルエンディアンです。arm は選択できます (但し、NetWinder はリトルエンディアンに固定されています)。m68k、sparc と PowerPC はビッグエンディアンです。MIPS は選択できます。はっきりしない場合は `/usr/src/linux/asm/byteorder.h` を見て、そこに `linux/byteorder/big_endian.h` が含まれているか、 `linux/byteorder/little_endian.h` が含まれているかを見てください 訳注: MIPS はブート時に選択でき、Linux では両方あります。SGI 系と HardHat の Linux はビッグ、DECstation と Cobalt Cube はリトルです。 Debian 3.0 のディストリビューションは両方があります。 その他は MIPS-HOWTO を見てください。。

#### SMP

Jean Tourrilhes さんによると「IrSock、IrNET と OpenObex を SMP マシンで 複数のドングルを使って動かしています。良好に動作していますが、コード自体は 完全に SMP で安全なものにはなっていません。 ですから、どこでおちるかは分かりません…」

#### IrDA ハードウェア

- SIR

- FIR

- シリアルドングル

- USB ドングル

- PCMCIA カード

- PCI カード

Linux/IrDA で使えるデバイスのサーベィが TuxMobil にあります。

#### IrDA と USB

最近の 2.4 カーネルには IrDA USB ドライバが含まれています。他の FIR ハードウェアほどは効率は良くありませんが、少なくともサポートされており、 また動作させるのも容易です。 また、現行のプロダクトはすべて同一のハードウェアを元にしているので、そのハードウェアの殆どのバグも分かっています。

知る限り、Actisys 2000U と Extended System ESI-9685 は同一のハードウェアを用いているようです。 どちらの USB ドングルも Linux ドライバで良好に動作します。また、複数の USB ドングルを一台のマシンに接続する (現在は４個までですが) ことも可能です。

最新版のドライバは `usb-uhci` と `usb-ohci` でテストされています。 また、ソースコード中のドライバ情報、例えば USB 2.0 も参照下さい。

IrDA ブリッジ仕様書の Rev 0.9B 版が出ています。これは USB クラス仕様として採用が広がりつつあります。この仕様は 0.9 クラス仕様ヘッダ (USB.org にあります) で見ることができます。

最近 SigmaTel から新型の USB ドングルが市場に投入されましたが、これは IrDA-USB 仕様とは互換でなく、従ってこのドライバでは動作しません。 一方、SigmaTel は 詳細技術仕様 を公開していますので、ドライバを書くことは可能ではあります。

##### 動作環境

私はこの章の内容を以下の環境でチェックしました。

- ACTiSYS ACT-IR2000U FIR-USB Adapter (上記以外の他の USB ドングルでも動くはずです)、

- Kernel 2.4.19, irda-utils 0.9.14

- Debian GNU/Linux 3.0 Woody

##### 前提条件

IrDA と USB がサポートされたカーネル、`/etc/modules.conf` に標準的エントリいくつか、そしてこれまでの章に記載の通りデバイスファイル `/dev/ir*` が必要です。加えて二台目の IrDA デバイス (ラップトップか、IrDA ポートを持つプリンタか、携帯電話) が必要です。 こちらは Linux がインストールされたものでも、そうでないものでも構いません。

USB コントローラが動作している必要があります。`lsmod` で所定のモジュールが組み込まれているかを確認してください。 組み込まれていない場合、Intel/Via USB コントローラの場合 `modprobe usb-uhci` で、その他のコントローラの場合 `modprobe usb-ohci` を実行して組み込んでください。

注意して欲しいのは、このドライバはまだ `usb-ehci` (USB 2.0 コントローラ) ドライバとの組み合わせでは テストされていない ことです。 また、`uhci` ドライバ (Intel/Via USB コントローラの追加ポート/JE ドライバ) との組み合わせでは動きません。

また、(Linux USB Project で提供されている) 別系統のドライバがあり、こちらではデバイスは `ir-usb` と呼ばれています。このモジュールは IrDA スタックとは非互換で、`irda-usb` と競合します。 こちらのドライバは常に最初にロードされるように出来ているため、 `ir-usb` は完全に削除する必要があります。

ルーティング関連について十分な知識がないなら、`ifconfig` を使って最初の設定の間外部ネットワークを切っておくことを勧めます。 その後で `route -n` の使い方をチェックしてください。 また、ネットワークフィルタ (iptables) は問題を起こす可能性があるので、 ネットワークにつなげていない間は無効にして置いてください。

以下では詳細について、細かなこつを含め出来るだけはっきり書いていきます。 このため、実際の設定はもっとずっと作業が少なく簡単です。 設定の間は、個々のプログラムのログメッセージを監視するため、三つのウィンドウを開くようにしています。

##### ドングルを挿入する

まずドングルを挿入して、`dmesg` でカーネルメッセージを調べます。

    hub.c: USB new device connect on bus1/1, assigned device number 2
    usb.c: USB device 2 (vend/prod 0x50f/0x180) is not claimed by any active driver.
    usb.c: registered new driver irda-usb
    IRDA-USB found at address 2, Vendor: 50f, Product: 180
    irda_usb_parse_endpoints(), And our endpoints are : in=02, out=01 (64), int=03
    irda_usb_init_qos(), dongle says speed=0x13E, size=0x20, window=0x2, bofs=0x4, turn=0x2
    IrDA: Registered device irda1
    USB IrDA support registered

他の IrDA ハードウェアが PC 上で設定されている場合には、ドライバ名は `irda0` にはなりませんので、上記のように表示されているメッセージログをチェックする作業が重要になります。 ドライバは一台の PC で四つまでの IrDA-USB ドングルを扱え、ソースコードを修正することで更に増やすことも可能です。

この例では、デバイスは `irda1` です。 これは `ifconfig` でもチェックできます。

    irda1     Link encap:IrLAP  HWaddr 2c:52:61:ec
              EtherTalk Phase 2 addr:140/191
              UP RUNNING NOARP  MTU:2048  Metric:1
              RX packets:2278 errors:0 dropped:0 overruns:0 frame:0
              TX packets:844 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0
              RX bytes:33848 (33.0 KiB)  TX bytes:15116 (14.7 KiB)

##### ドライバを組み込む

次に行うことは、ドングル用の Linux/IrDA サービスを `irattach irda1 -s` で組み込むことです。 ここで用いるデバイス名は前の章を参照下さい。

組み込み後、アダプタの LED はだいたい三秒ごとに点滅するはずです。 また、`dmesg` を実行すれば以下のメッセージが表示されるでしょう。

    irlap_change_speed(), setting speed to 9600
    irlap_recv_discovery_xid_cmd(), discovery frame to short!

次に `irdadump` を実行すれば、届く範囲にある IrDA デバイスが全て表示されるはずです。少なくとも一つ (ここでは "japh") は最低見えます (この例ではもう一つの IrDA デバイスの名前は "Olga" です)。デバッグのため、ここで `irdadump` を実行しているターミナルウィンドウはそのままにしておき、 別のウィンドウで以降の作業を進めましょう。

    07:58:40.889590 xid:cmd ffffffff < 4fe026d8 S=6 s=3 (14)
    07:58:40.979575 xid:cmd ffffffff < 4fe026d8 S=6 s=4 (14)
    07:58:40.979679 xid:rsp 2c5261ec > 4fe026d8 S=6 s=4 japh hint=0400 [ Computer ] (20)
    07:58:41.069571 xid:cmd ffffffff < 4fe026d8 S=6 s=5 (14)
    07:58:41.166552 xid:cmd ffffffff < 4fe026d8 S=6 s=* Olga hint=0400 [ Computer ] (20)
    07:58:43.620104 xid:cmd ffffffff < 4fe026d8 S=6 s=0 (14)
    07:58:43.709078 xid:cmd ffffffff < 4fe026d8 S=6 s=1 (14)

##### IrCOMM モジュールの組み込み

次に IrCOMM モジュールをロードします。通常使う場合には PPP や IrDA 経由の印刷時に、カーネルデーモンの `kmod` がこのロードを自動で実行しますが、最初は手で行う必要があります。 `modprobe ircomm` を行い、次に `modprobe ircomm-tty` とします。

`dmesg` には次のように表示されます。

    IrCOMM protocol (Dag Brattli)
    ircomm_open_lsap()
    ircomm_tty_attach_cable()
    ircomm_tty_ias_register()
    ircomm_tty_close()
    ircomm_tty_shutdown()
    ircomm_tty_detach_cable()
    ircomm_close()

そして、`lsmod` を実行すれば以下が表示されるでしょう。

    Module                  Size  Used by    Tainted: P
    ircomm-tty             30080   0  (autoclean)
    ircomm                 13164   0  (autoclean) [ircomm-tty]
    irda-usb               13776   1
    ...
    irtty                   7264   0  (autoclean)
    irda                  141648   1  (autoclean) [ircomm-tty ircomm irda-usb irtty]

##### ネットワーク (PPP) 設定

コマンド行引数を与えて `pppd` を実行しても良いですが、設定ファイル `/etc/ppp/peers/irda` を用意した方が便利だと思います。

    connect /bin/true
    noauth
    persist
    debug
    kdebug 7
    nodetach
    115200
    local
    /dev/ircomm0
    192.168.0.2:192.168.0.3

設定に関しての注意として、ここではデバイス名が正しくとも USB デバイスの方は指定しないでください。Linux ラップトップにこれ以外の IrDA デバイスがあった場合、同じ PPP オプションで、最後のローカルとリモート IP アドレスを設定している部分だけ削除した同じ設定ファイルが使えます。 以下のエントリはデバッグ目的で、全部うまく動くようになったら削除可能です。

    persist
    debug
    kdebug 7
    nodetach

ここで、`pppd call irda` として PPP を開始しましょう。 デバッグのため、ここで `pppd` を実行したターミナルウィンドウはそのままにしておき、 別のウィンドウで以降の作業を進めましょう。

    Serial connection established.
    using channel 3
    Using interface ppp0
    Connect: ppp0 <--> /dev/ircomm0
    sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4592a46e> <pcomp> <accomp>]
    sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4592a46e> <pcomp> <accomp>]
    ...

次にリモート側の IrDA デバイスで PPP を開始すれば、以下のメッセージが出るはずです。

    sent [LCP EchoReq id=0x0 magic=0x3c8803b1]
    sent [IPCP ConfReq id=0x1 <addr 192.168.0.2> <compress VJ 0f 01>]
    sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
    rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x3c8803b1> <pcomp> <accomp>]
    rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x3c8803b1> <pcomp> <accomp>]
    rcvd [LCP EchoReq id=0x0 magic=0xa922f0e8]
    sent [LCP EchoRep id=0x0 magic=0x3c8803b1]
    rcvd [IPCP ConfReq id=0x1 <addr 0.0.0.0> <compress VJ 0f 01>]
    sent [IPCP ConfNak id=0x1 <addr 192.168.0.3>]
    rcvd [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
    sent [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
    rcvd [LCP EchoRep id=0x0 magic=0xa922f0e8]
    rcvd [IPCP ConfAck id=0x1 <addr 192.168.0.2> <compress VJ 0f 01>]
    rcvd [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
    Deflate (15) compression enabled
    rcvd [IPCP ConfReq id=0x2 <addr 192.168.0.3> <compress VJ 0f 01>]
    sent [IPCP ConfAck id=0x2 <addr 192.168.0.3> <compress VJ 0f 01>]
    Cannot determine ethernet address for proxy ARP
    local  IP address 192.168.0.2
    remote IP address 192.168.0.3
    Script /etc/ppp/ip-up started (pid 3975)
    Script /etc/ppp/ip-up finished (pid 3975), status = 0x1

`irdadump` を実行しているウィンドウには、以下の IrDA 通信メッセージが表示されているでしょう。

    08:17:11.179260 i:rsp  > ca=08 pf=1 nr=1 ns=2 LM slsap=00 dlsap=19 CONN_RSP (6)
    08:17:11.199127 i:cmd  < ca=08 pf=1 nr=3 ns=1 LM slsap=00 dlsap=1d CONN_RSP (6)
    08:17:11.199226 i:rsp  > ca=08 pf=1 nr=2 ns=3 LM slsap=1d dlsap=00 GET_VALUE_BY_CLASS: "IrLPT" "IrDA:IrLMP:LsapSel" (30)
    08:17:11.219123 i:cmd  < ca=08 pf=1 nr=4 ns=2 LM slsap=00 dlsap=1c CONN_RSP (6)
    08:17:11.219207 i:rsp  > ca=08 pf=1 nr=3 ns=4 LM slsap=1c dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "Parameters" (28)
    08:17:11.241117 i:cmd  < ca=08 pf=1 nr=5 ns=3 LM slsap=19 dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "Parameters" (28)
    08:17:11.241213 i:rsp  > ca=08 pf=1 nr=4 ns=5 LM slsap=00 dlsap=19 GET_VALUE_BY_CLASS: Success N/A (19)
    08:17:11.259114 i:cmd  < ca=08 pf=1 nr=6 ns=4 LM slsap=00 dlsap=1d GET_VALUE_BY_CLASS: No such class (11)
    08:17:11.259216 i:rsp  > ca=08 pf=1 nr=5 ns=6 LM slsap=1d dlsap=00 DISC (6)
    08:17:11.280107 i:cmd  < ca=08 pf=1 nr=7 ns=5 LM slsap=00 dlsap=1c GET_VALUE_BY_CLASS: Success N/A (19)
    08:17:11.280281 i:rsp  > ca=08 pf=0 nr=6 ns=7 LM slsap=1c dlsap=00 DISC (6)
    08:17:11.282124 i:rsp  > ca=08 pf=1 nr=6 ns=0 LM slsap=1e dlsap=00 CONN_CMD (6)
    08:17:11.299104 i:cmd  < ca=08 pf=1 nr=1 ns=6 LM slsap=19 dlsap=00 DISC (6)
    08:17:11.299204 rr:rsp > ca=08 pf=1 nr=7 (2)
    08:17:11.319102 i:cmd  < ca=08 pf=1 nr=1 ns=7 LM slsap=1a dlsap=00 CONN_CMD (6)
    08:17:11.319209 i:rsp  > ca=08 pf=1 nr=0 ns=1 LM slsap=00 dlsap=1a CONN_RSP (6)
    08:17:11.339100 i:cmd  < ca=08 pf=1 nr=2 ns=0 LM slsap=00 dlsap=1e CONN_RSP (6)
    08:17:11.339197 i:rsp  > ca=08 pf=1 nr=1 ns=2 LM slsap=1e dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37)
    08:17:11.361096 i:cmd  < ca=08 pf=1 nr=3 ns=1 LM slsap=1a dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37)
    08:17:11.361191 i:rsp  > ca=08 pf=1 nr=2 ns=3 LM slsap=00 dlsap=1a GET_VALUE_BY_CLASS: Success Integer: 14 (15)
    08:17:11.380092 i:cmd  < ca=08 pf=1 nr=4 ns=2 LM slsap=00 dlsap=1e GET_VALUE_BY_CLASS: Success Integer: 14 (15)
    08:17:11.380214 i:rsp  > ca=08 pf=0 nr=3 ns=4 LM slsap=1e dlsap=00 DISC (6)
    08:17:11.382104 i:rsp  > ca=08 pf=1 nr=3 ns=5 LM slsap=14 dlsap=14 CONN_CMD TTP credits=0(7)
    08:17:11.399090 i:cmd  < ca=08 pf=1 nr=6 ns=3 LM slsap=1a dlsap=00 DISC (6)
    08:17:11.399190 rr:rsp > ca=08 pf=1 nr=4 (2)
    08:17:11.419082 i:cmd  < ca=08 pf=1 nr=6 ns=4 LM slsap=14 dlsap=14 CONN_CMD TTP credits=0(7)
    08:17:11.419159 rr:rsp > ca=08 pf=1 nr=5 (2)
    08:17:11.438080 rr:cmd < ca=08 pf=1 nr=6 (2)

別のターミナルウィンドウを開き、`ifconfig` で PPP デバイスをチェックしましょう。

    ppp0      Link encap:Point-to-Point Protocol
              inet addr:192.168.0.2  P-t-P:192.168.0.3  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
              RX packets:9 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0
              RX bytes:318 (318.0 b)  TX bytes:708 (708.0 b)

`ps aux | grep irda` を実行すれば、以下のプロセスが表示されるはずです。

    root      3534  0.0  0.2  1272  464 ?        S    06:51   0:00 irattach irda1 -s
    root      3579  0.3  0.2  1400  476 tty1     S    06:55   0:06 irdadump
    root      4312  0.1  0.4  2088  948 tty2     S    07:18   0:00 pppd call irda

`route -n` を実行すれば、以下のように PPP デバイスが表示されます。

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.0.3     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
    0.0.0.0         192.168.0.3     0.0.0.0         UG    0      0        0 ppp0

そして、リモートホストに対して `ping 192.168.0.3` が動作するようになっているはずです。

    PING 192.168.0.3 (192.168.0.3): 56 data bytes
    64 bytes from 192.168.0.3: icmp_seq=0 ttl=64 time=290.7 ms
    64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=146.6 ms

これで TCP/IP アプリケーションは使えるようになりました。例えば、 `ssh` などが使えます。 但し、コネクションの確立まで多少の時間を要しますので、ちょっと辛抱が必要です。

    ssh -v USER@192.168.0.3

##### プリンタ接続 (IrLPT) の設定

ドングルを TCP/IP 代わりのプリンタ接続にも使うことが出来ます。 デバイス名は `/dev/irlpt0` になります。IrDA プリンタ接続の詳細は、関連の章を参照下さい。

##### 後片づけ

最後に設定の微調整 (ルーティングの設定) などを行います。 さらに高速度に設定することも出来ますが、私はまだ試していません。 全て動くようになったら、設定を保存していつも使うようにしましょう。 `/etc/irda.conf` 設定ファイルや、System V init スクリプト (IrDA やネットワーク関連の) などを編集してください。 このあたりのやり方は Linux ディストリビューション毎に異なります。

##### 残っている問題

奇妙な問題が残っています。IrDA-USB ドングルを挿入した後、微かではあるものも連続したビープ音がシステムスピーカから出ています。

#### PDA (Agenda, iPAQ, Yopy, Zaurus) での Linux/IrDA

現在もっともよく知られた Linux PDA は以下のものでしょう。

- Agenda VR3 - AgendaComputing 社 (既に製造中止)

- iPAQ - COMPAQ (HP) 社

- Zaurus SL-5000/5500 - シャープ

- Yopy - Samsung 社

これらはすべて IrDA ポートを備えています。Linux PDA 向けの Linux ディストリビューションは幾つかあります。以下に例を示します。

- QT Embedded (SHARP Zaurus にプリインストール)

- Opie

- Familiar

以下で説明するソフトウェア IPK パッケージは Zaurus Software Index - ZSI と ipkgfind にあります。また TuxMobil は Linux と PDA を組み合わせて使う関連情報全般を扱っています。

以下は、私の SHARP の Zaurus SL-5500G (元の SHARP ROM イメージ 2.38G と kernel 2.4.6-rmk1-np2-embedix#1 での経験に基づくものですが、必要に応じて読み替えれば他の Linux PDA でも使えるかもしれません。Zaurus には、GUI (FileManager や、設定で) を用いてファイルを光で送ったり、PPP コネクションのやり方などを記載した、 印刷されたマニュアルが付属しています。 この文書で記載しているのは、コマンドラインから出来ることについてと、公式の SHARP のマニュアルにも、 Opie User Manual ででも触れられていない話題についてです。

赤外線機能は StrongARM SA1110 CPU 機能の一部のようで、IrDA ドライバモジュールは `sa1110_ir` という名前です (手元の Zaurus では IrDA サポートはカーネル組み込みになっているようです)。 `irda-utils` のうち、`irattach` のみ付属しています。IrDA サポートは `irattach /dev/ttyS2 -s 1` を実行して組み込みます (注意: irattach の新版では "-s 1" は "-s" に置き換えられています)。 従って、どうやら SIR を使っているように見えます。FIR サポートに関する情報はまだありません。 `irdadump` 機能のサブセット機能、及び範囲内の他の IrDA デバイスを検出したり、IrDA をデバッグするには、 `cat /proc/net/irda/discovery` や、他の `/proc` ファイルシステム中のファイルが利用できます。 また、`irda-utils` を自分で ARM アーキテクチャ向けにコンパイルするのもいいですし、コンパイル済みのバイナリも提供されています。

デバイスファイルでは、`/dev/ircomm` のみ (`/dev/ircomm0` でないことに注意してください) が、予め作成されています。`modules.conf` はありません。 `irrecv` で赤外線設定が開始できます。IrOBEX サポートはありますが、 OpenOBEX からの所定のツールはありません。それでも Palm PDA や携帯電話、他の Linux マシンや Microsoft-Windows マシンに GUI からファイルを送ることが出来ます。 IrDA 立ち上げスクリプトは `/home/etc/rc.d/init.d/irda` にあります。赤外線リモートコントロールサポートについては以下をご覧下さい。

他の Linux マシンで `irdadump` を実行した場合、Zaurus は以下のように認識されます (二行目を見てください)。

    10:56:48.652982 xid:cmd b03cbbb9 > ffffffff S=6 s=5 (14)
    10:56:48.652963 xid:rsp b03cbbb9 < b7960e8f S=6 s=4 localhost hint=8420 [ Computer IrOBEX ] (26)
    10:56:48.742992 xid:cmd b03cbbb9 > ffffffff S=6 s=* japh hint=0400 [ Computer ] (20)
    10:56:51.203002 xid:cmd b03cbbb9 > ffffffff S=6 s=0 (14)

##### PPP

PPP を使って、携帯電話や他のコンピュータとの間のネットワーク接続を行えます。 詳しいことは、 LINUX DOCUMENTATION PROJECT - LDP の PPP-HOWTO 訳注: JF に訳があります を参考にしてください。NAT を用いた他の Linux マシン経由のフォワーディング関連は IPTABLES-Tutorial を参考にしてください。

`pppd` を、コマンドライン引数付きで実行して起動することも出来ますが、 設定ファイル `/etc/ppp/peers/irda` を作成する方がずっと便利だと思います。以下は最初のテストの例です。

    connect /bin/true
    noauth
    persist
    debug
    kdebug 7
    nodetach
    115200
    local
    /dev/ircomm
    192.168.0.2:192.168.0.3

Linux ラップトップにこれ以外の IrDA デバイスがあった場合、同じ PPP オプションで、最後のローカルとリモート IP アドレスを設定している部分だけ削除した同じ設定ファイルが使えます。 またデバイス名、つまり `/dev/ircomm0` を正しく設定するよう注意してください。 以下のエントリはデバッグ目的で、全部うまく動くようになったら削除可能です。

    persist
    debug
    kdebug 7
    nodetach

両方のマシンで `pppd call irda` として、PPP を開始してください。 これを実行したターミナルウィンドウを開いたままにしておき、 以降の作業を別ウィンドウで行うと、デバッグに便利でしょう。ネットワーク接続を `ifconfig` と `ping` でチェックしましょう。 携帯電話との接続については、この文書の前の方にある関連の章を見てください。

##### ファイルを光で送る - OpenOBEX

OBEX の利点は統合化でしょう。OBEX 経由で予定を送れば、Zaurus はおそらく Palm 同様にそれを組み込みのカレンダに統合します。名刺も同様です。 IrOBEX プロトコルは、他の PDA、携帯電話やコンピュータに赤外線でファイルを送る簡単な手段を提供しています。 Linux 向けのツールは OpenOBEX から提供されています。二台の Zaurus PDA 間、および Palm PDA への GUI を使った転送はたぶん上手くいくと思います。但し、現在の所 Linux ラップトップとの間のファイルの送受信は出来ていません。 `ircp FILE` で一つのファイルを送ろうとするたびに、以下の `irdadump` メッセージが出ます。

    11:11:03.943005 i:cmd  > ca=8a pf=1 nr=0 ns=0 LM slsap=12 dlsap=00 CONN_CMD (6)
    11:11:03.972964 i:rsp  < ca=8a pf=1 nr=1 ns=0 LM slsap=00 dlsap=12 CONN_RSP (6)
    11:11:03.973010 i:cmd  > ca=8a pf=1 nr=1 ns=1 LM slsap=12 dlsap=00 GET_VALUE_BY_CLASS: "OBEX:IrXfer" "IrDA:TinyTP:LsapSel" (37)
    11:11:04.002973 i:rsp  < ca=8a pf=1 nr=2 ns=1 LM slsap=00 dlsap=12 GET_VALUE_BY_CLASS: No such class (11)
    11:11:04.003015 i:cmd  > ca=8a pf=1 nr=2 ns=2 LM slsap=12 dlsap=00 DISC (6)

また、`ircp -r` として一つのファイルを受信しようとするたびに以下の `irdadump` メッセージが出ます。

    11:15:08.682979 i:cmd  < ca=8a pf=1 nr=4 ns=5 LM slsap=53 dlsap=00 CONN_CMD (6)
    11:15:08.683063 i:rsp  > ca=8a pf=1 nr=6 ns=4 LM slsap=00 dlsap=53 CONN_RSP (6)
    11:15:08.712970 i:cmd  < ca=8a pf=1 nr=5 ns=6 LM slsap=53 dlsap=00 GET_VALUE_BY_CLASS: "OBEX" "IrDA:TinyTP:LsapSel" (30)
    11:15:08.713035 i:rsp  > ca=8a pf=1 nr=7 ns=5 LM slsap=00 dlsap=53 GET_VALUE_BY_CLASS: No such class (11)
    11:15:08.732976 i:cmd  < ca=8a pf=1 nr=6 ns=7 LM slsap=53 dlsap=00 DISC (6)

Jean Tourrilhes さんの解決案は「Zaurus は "OBEX:IrXfer" サービスをサポートしておらず、"OBEX" サービスのみのサポートなのでしょう。 `cat /proc/net/irda/irias` で検証できます。とすると、Zaurus で "OBEX:IrXfer" サービスを立ち上げる (`ircp_server` - を Zaurus 向けにクロスコンパイルする) か、ラップトップ側で "OBEX" を使ったクライアント (`irobex_palm3`) を使うかのどちらかでしょう。」

###### ツール

Beamster は特に Linux PDA との相互の IrDA 転送を助けるための小さな Gtk/python ユーティリティです (ftp://ftp.handhelds.org/pub/linux/dists/familiar/feeds/unstable/packages/armv4l/beamster-0.1.ipk). 。これは IrDA オブジェクト交換プロトコル (OBEX) をサポートした殆どのハンドヘルド/ラップトップ/プリンタとの間の通信が行えます。 実際、すでに OpenOBEX パッケージで動作しているデバイスはこのユーティリティで動作します。

また、これはかなり直感的にすぐ使えます。IrDA が 'On' になっていることを確認し、二つのデバイスを向き合わせ、 新しい通信路が確立されたことがステータスバーで表示されるまで待ち、 転送モード (PalmOS との間では 'Palm3'、それ以外では 'Windows') を指定し、 'beam' か 'receive' を押します。'receive' は押すたびにオンオフが切り替わります。

以下の IrDA デバイスでの送受を確認しています。

- 古い Palm3

- Psion 5MX

- Windows 98 ThinkPad

- Actisys L220+ ドングルを使った Linux デスクトップ

Flex,Memory を直接アクセスする ObexFTP の実装 flexmem があります。sersniff を使って S45 data explorer (Windows) セッションをパイプしてみたところ、ログは OBEX をケーブルを用いて使った場合と同様のものでした。実際、古い Open OBEX は Siemens S45 携帯電話との組み合わせで動作していましたし、Siemens S45/ME45 およびその派生の携帯電話で動作することの確認がとれています。Siemens 携帯機器の Flex Memory へのアクセスが IrDA またはシリアル接続経由でできます。

##### 印刷

IrDA をサポートしたプリンタに直接印刷するには、デバイスファイル `/dev/irlpt0` が必要になります。これが無い場合、 `mknod /dev/irlpt0 c 161 16` として作成してください。 `cat FILE >/dev/irlpt0` として `/dev/irlpt0` に小さなファイルを送ってみて下さい。 手元の、SHARP が作成したカーネルではこれは動きませんでしたが、 カーネルをカスタマイズした後は問題なく動くようになりました。 ここでの手順で、ファイルの形式がどうこうということは気にする必要はありません。 これは単に最初のチェックですから。 きれいな印刷結果を得るには、 LinuxPrinting.org の Printing-HOWTO の記述を参考にしてください。 Linux PDA からの印刷については、 Linux-Mobile-Guide の次の話題として、詳しい説明を近く公開する予定です。

##### リモートコントロール - LIRC

家電用 IR (以下 CIR) を赤外線ポートからリモートコントロールするには、 Linux PDA でカーネルに対応した lirc-modules-KERNEL と LIRC をインストールすれば可能です。 更に詳しくは、 HandHelds.org-WiKi と、Opie-Remote の各 Web ページをご覧下さい。Opie-Remote は Compaq iPAQ と SHARP Zaurus 向けのリモートコントロールエミュレータです。

<sect2 <!--<title>Programming QT Embedded for IrDA-->

#### QT Embedded での IrDA 向けプログラミング

SHARP Zaurus 開発者サイトには、 IrDA-HOWTO という、Zaurus の IrDA ポートの使い方を説明した文書が提供されています。 Werner Schulte さんのサイト、 iPAQ Help - iPAQ and Zaurus development using QPE には、Qtopia アプリケーション開発についての全般的なことがらが記載されています。

##### キーボードとスキャナ

iPAQ 向けには、MicroInnovations 社の赤外線キーボードに対応した `h3600_microkbd` モジュールがあります。 ある種の赤外線でデータを読む光学式バーコードリーダもあるようですが、これは IrDA や CIR とは無関係だと思います。

Zaurus の外部赤外線キーボードは IRK で利用できます。 これは、Qtopia 環境で LIRC とのインターフェースを行う物です。 現在、Chicony KB-9820 (独語バージョン) のみサポートされています。

### より高度な話題

#### トラブルシューティング

##### 一般的情報

問題に出くわしたら、まず以下を試してみてください。

- 以下の FAQ の章を読む。

- /var/log/messages と /var/log/kern の出力を見る。

- `dmesg` を実行する。

- `/proc/irda` の各ファイルを見る。

##### トラブルシューティング技術

私は強力なハッカーというわけではありませんが、ここには Linux/IrDA ソフトウェアのエラーやバグを追跡するための技を集めてあります。

- `/proc/sys/net/irda/debug` のデバッグレベルを 1, 2, 3, 4 と変更してみる。

- `/proc/sys/net/irda` にあるファイルを用いて 違うパラメータを試してみる。 例えば、`echo 0 > /proc/sys/net/irda/discovery` などのようにしてみる。`/proc/*/irda` ファイルとは

      root@duckman:~# ls /proc/sys/net/irda/* /proc/net/irda/*
      /proc/net/irda/discovery
      /proc/net/irda/irlmp
      /proc/net/irda/irda_device
      /proc/net/irda/irttp
      /proc/net/irda/irias
      /proc/net/irda/irlap
      /proc/sys/net/irda/devname
      /proc/sys/net/irda/discovery
      /proc/sys/net/irda/compression
      /proc/sys/net/irda/debug

- コードをデバッグすることも可能ではありますが、私はやり方を知りません。 SKB デバッグコードを用いたい場合、irda.h を編集し、/include/linux/skbuff.h を変更してください (snapshot 10-2-98 の編集履歴参照のこと)。

- irda モジュールに関する問題については、modules パッケージ収録の kdstat ユーティリティが役に立つでしょう。但し、私はまだこれを使えていません。

- 「使用するディスカバリパケットの数 (1、6、8 または 16) と、それを送る時間間隔 (2-8 * 10mS) を /proc/sys/net/irda で変更できるようになりました。 デバイスの検出で問題が発生していると言うことなら、これを試してください。私の Palm III では 16 ディスカバリスロットと、8 (*10mS) のスロットタイムアウトが好ましいようです」…… 「IR-610 で安定した検出が行える最小のスロット数は 9 のようです」 その他にも「Palm III では 8 ディスカバリフレームを連続して送るのはまずく、6 なら OK です。8 にすると 6-10 回に一回しか返答しませんが、6 だと毎回返答が返ります。これが Linux/IrDA の問題なのか、Palm III が悪いのかは分かっていません。この問題を解決する方法の一つとして、 異なったディスカバリ手法を以下のように順に繰り返して見ることが考えられます。

         Discovery 1: send 8 xid frames with 80 ms separation
          ここで返答があれば、この設定を引き続き使います。
          返答がなければ次の設定を試します。
         Discovery 2: send 6 xid frames with 80 ms separation
         Discovery 3: send 8 xid frames with 90 ms separation
         Discovery 4: send 6 xid frames with 90 ms separation
         Discovery 5. 1 に戻る

  これ以外のパターンや、もっと多くの組み合わせが必要かもしれません。 多分これは将来実装されて、/proc/sys/net/irda/discovery_slots を 0 に設定することで有効となるようになるでしょう。

- カーネル Oops となる場合には、それを `../linux/scripts/ksymoops/ksymoops` プログラムに食わせれば、どこでおかしくなったかがわかります。 単に Oops を起こした行を syslog から切り抜いて、ファイルに保存し、 `ksymoops <file>` を実行してください。

- Dag Brattli さんによると「cs4232 サウンドカードが毎秒数百回 ! の割り込みを発生させていることを突き止めました。 そこでカーネルからサウンド関係を取り去ったところ、マシンがだいたい 4 倍 ! も速くなりました。Linux/IrDA は esound サーバ (esd) を同じマシンで実行している場合、問題を起こすかもしれません。 私の二台のマシン、166MHz の Pentium と 200MHz の Pentium Pro の両方とも esd を動かしていると Linux/IrDA を実行できません。これは、esd によりサウンドカードが毎秒 300 回の割り込みを発生するため、シリアルドライバが受信オーバフローを起こすからです。 これは Linux-2.2 がシリアルドライバで遅い割り込みを用いている (2.2 ではすべて遅い割り込みで処理されるため) ため、割り込みドライバが抜ける際に割り込み処理がスケジュールされるためです 訳注: 割り込み処理を引き続いて行うこと。 遅い割り込みの良い点は、次のタイマの刻みを待つ必要がないためパケットがずっと速く配送されることです。 上記の例外は pc87108 ドライバで、これは esd との組み合わせでも問題なく動作します。これは、このドライバが DMA を用いてパケット当たり数回の割り込みしか起こさないためです」

- Linux/IrDA の接続をチェックするには、ユーザ空間ツールの `irdaping` と `irdadump` も使えます。

- 私の知る限り、IrCOMM は赤外線デバイス経由でもシリアルケーブル経由でも使えます。 これはデバッグに役に立つかもしれません。

- 以下を試してください。

  1. `/etc/conf.modules` を編集し、次の行を付け加えてください。

     `option irda irda_debug=3`

  2. irda 関係モジュールがすべて削除されていることを確認してください。

  3. /etc/syslog.conf を編集し、次の行を付け加えてください。

     `*/* -/var/log/all`

  4. `"killall -1 syslogd"` を実行してください。

  5. 印刷、またはその他の irlpt で問題を起こしている動作を実行してください。

  6. /var/log/ 以下の全ファイルをチェックしてください。

- 一部の ThinkPad モデルでは、プリインストールされている M$ OS で再起動して、 ThinkPad ツールを使って IrDA ポートを有効にしなければなりません。これを行う Linux 向けのツールは現在ありません。これは同時に内蔵シリアルポート (ttyS0) を無効化します。DOS 用のツールは `PS2.EXE` で、私の知る限り `tpctl` はこの機能を持ちません。 この DOS プログラム (ps2.exe) で赤外線ポートを有効にすることがきわめて重要です。Microsoft windows の ツールを用いてこれを行うことはできません。 これを行わなければ、ドライバは正しくロードされて何もかも OK のように見えますが、LED が十分に明るく発光しません。

##### PCI デバイス番号

Daniel R. Risacher さんによると 「Palm III と私の Tecra 8100 (2.2.17 使用) で同期をとるため、 /usr/src/linux/include/net/irda/toshoboe.h で "#define PCI_DEVICE_ID_FIR701 0x0701" を "#define PCI_DEVICE_ID_FIR701 0x0D01" と書き換える必要がありました」

##### scanport

チップの正しいデバイス ID を得るには、`scanport` コマンドが使えます。これは hwtools パッケージの一部です (Debian では。他のディストリビューションでも多分同じでしょう)。 単にコマンドを入力すれば、コマンドで 0x100 から 0x400 までの I/O ポート (標準的 ISA のアドレス範囲) をスキャンします。0x400 以上は 0x400 以下のデバイスのシャドウがあり、更に上は PCI デバイスが使っていますので、 標準では 0x400 以上はスキャンしません。「結局 inb を使って私のチップの I/O アドレスを手で探すことになりました。 運良くそんなに先まで見る必要はありませんでした (最近のサウンドカードは 0x530 付近に居座っており、0x220 を従来モード互換のために押さえています)。 普通は、デバイスがアドレス空間内でどこにいるか分かっていれば、 ドライバでそれを指してみて、それがドライバが期待しているデバイスかどうかドライバに検出させることになります。 これは完全に安全とは言えませんが、全ドライバに全 I/O ポートをそのドライバが扱えるものを求めて総当たりさせるよりはずっと安全です scanport はポートの読み込みを行うだけで、これは通常安全です 訳注: PC-AT の仕様上は 16bit フルデコードしろということになっているが、守っているデバイスは少ないため、結果として上のようなことになる。 。

#### メーリングリスト

Linux-IrDA メーリングリストでは、質問、回答、バグ報告、パッチ、提案とコメントの投稿が歓迎されています。 但し、このメーリングリストは購読している人のみ投稿可能です。これは SN 比をあげるため、及び SPAM を避けるためです。

Linux-IrDA メーリングリストの購読は、ブラウザで以下の irda-users ページを開けば Linux-IrDA メーリングリストの設定ページがあります。Subscribing to Linux-IrDA の節を読んで、電子メールアドレスとパスワード (二回) に記入し、"Subscribe" ボタンを押してください。

以前の投稿を見るためのメーリングリストアーカイブは Geocrawler で閲覧できます。 以前のアーカイブは 1999 年八月以降は、 Linux-IrDA メーリングリストアーカイブ に置かれています。 これより前のメールはすべて ここ にアーカイブされています。 どちらのアーカイブも既に古く間違いが多いので、参考にしないで下さい。

リストのメンバ全員にメッセージを送るには、 <irda-users@lists.sourceforge.net> に電子メールを送って下さい。 電子メールを送る前に、これは説明文書を読み、 Google またはお好みのサーチエンジンに当たった後の最後の手段だと考えていてください。 あなたの質問の答えがないか、メーリングリストアーカイブも調べて下さい。 また、特定の情報を含めるようにすると助けがずっと容易になります。 以下のコマンドの出力を含めるようお願いします。

    uname -a
    cat /proc/net/irda/discovery
    setserial -g -a /dev/ttyS*
    findchip
    irdadump

また、もちろん何らかのエラーメッセージが出ていればそれと、関連する `dmesg` の出力を含めてください。また BIOS での IrDA サポート関連の情報と、使っている Linux ディストリビューションの情報も必ず含めるようにしてください。

#### GUI (グラフィカルユーザインターフェース): Gnome, KDE

Gnome IrDA applet は IrDA デバイスをモニタするための GNOME IrDA アプレットです。

Beamster は特に Linux PDA との間で IrDA 送受信を行うための小さな Gtk/python ユーティリティです (ftp://ftp.handhelds.org/pub/linux/dists/familiar/feeds/unstable/packages/armv4l/beamster-0.1.ipk)。 これは IrDA オブジェクト交換プロトコル (OBEX) をサポートした殆どのハンドヘルド/ラップトップ/プリンタとの間の通信が行えます。 実際、すでに OpenOBEX パッケージで動作しているデバイスはこのユーティリティで動作します。

また、これはかなり直感的にすぐ使えます。IrDA が 'On' になっていることを確認し、二つのデバイスを向き合わせ、 新しい通信路が確立されたことがステータスバーで表示されるまで待ち、 転送モード (PalmOS との間では 'Palm3'、それ以外では 'Windows') を指定し、 'beam' か 'receive' を押します。'receive' は押すたびにオンオフが切り替わります。

以下の IrDA デバイスでの送受を確認しています。

- 古い Palm3

- Psion 5MX

- Windows 98 ThinkPad

- Actisys L220+ ドングルを使った Linux デスクトップ

#### 赤外線光源を見えるようにする

不詳

What you don't see gets you. 見えなかったとおりのもので、はまってしまった (What you see is what you gets のもじり)

IrDA 対応のプリンタを持っているなら、電話をそれに向ければ IR ポートのそばの LED が光ったり点滅したりするのが見られると思います。また、赤外線ポート付きの Palm オーガナイザを持っているなら、それを電話に向けてみてください。電話の IR ポートがディスカバリモードになっているなら Palm 側で "Waiting for Sender" ポップアップウィンドウが出るはずです。

Palm 用の IR 発光を測定する "IRMonitor" というプログラムがあります。 これは EuroCool か PilotZone で手に入ります。このプログラムを実行して、 赤外線ビームが出ていると思われるポートの方向に Palm を向けます。 もしそのポートから発光しているなら、IrMonitor のスクロールグラフ上の波としてみることができるはずです。 赤外線で遊んだり、実用で使ったりしようとする人には、このプログラムを強くお勧めします。

赤外線を検出するにはビデオカメラも使えます。 但し、私はこれについては確認できていません。

この節の記述の殆どは "The Armadillo with the Mask" さんによる Linux/IrDA メーリングリストへの投稿からとりました。

#### 節電について

私の HP Omnibook 800 の仕様書には、使っていないときには赤外線ポートをオフにしてくださいと記載されています。 バッテリ動作時間が 10% 程度短くなってしまうからです。

必要な場合、カーネルの IrDA セクションで高速 RR 機能を無効にすることも試してください。 このオプションは転送遅れを大幅に軽減しますが、電力消費は増えます。

#### IrDA 仕様を超えて

##### 通信距離を伸ばす

IrDA 仕様によれば、通信可能距離は 1m までです。Hewlett-Packard 社の IrDA Data Link Design Guide の p.20 には「場合によっては IrDA で保証された 1m 以上にリンク間距離を伸ばしたいことがあります。それには２つの方法があります。 一つは送信光の強度を上げること、もう一つは受信側の感度を上げることです。 リンク間距離を増加させるには、光受信感度と強度の両方を、両側の IR リンクで挙げなければいけません。標準の、最小の光強度しか持たない IrDA デバイスと通信したいなら、光受信感度を上げなければいけません。また標準 IrDA デバイスは最小の光受信感度しか持っていないないかもしれませんので、光送信強度も同時に上げなければなりません」

Andreas Butz さんによると「ばかげた質問かもしれませんが、誰か IrDA スタックが本当にすべて双方向通信に依存しているのか、それとも一部は単方向通信に無理矢理できるのかについて知りませんか? 特に、通信データにエラーが多い場合にどうなのか。現在私のところで、IR ドングルを幾つか改造して、数メートル (ほぼ一部屋) に配置された Palm Pilot に対してブロードキャスト通信をしようとしています。 Pilot の方は変更したくないし、受信側の感度を上げるほうはできそうにないので、 できるのは単方向通信に限られるんです」 この議論の続きはメーリングリストアーカイブを当たってください。

Marc Bury さんからのメールには「Philips 社のリモートコントロール向けの新技術の話を聞いたところです。 Philips 社では IRDA - Control と読んでいます。 これは双方向通信で、75kbps データレート、複数同時デバイス (最大 8) が可能で、少なくとも 6 m の距離! をサポートしているということです」 この件の情報は、IrDA.org を参照下さい。

ドイツの雑誌 ELEKTOR では、長距離 IrDA ドングル (20m、RS232、IrDA 1.0) を作るための手引き記事を載せています。ELEKTOR 97/5 月号 です。 ELEKTOR を参照下さい。

大きな問題は、受信機の感度を上げる必要があるということです。 物理の基本は、光の強度は距離の二乗に反比例すると教えていますので、1m のものを 5m にのばそうと思うなら 25 倍の強度 (およびそれに伴う携帯デバイスでの電池の消費)、または 25 倍の感度 (およびダイナミックレンジ - 以前同様 3 inch の場合にも動作しなければなりませんから) が必要になります。 また、対向側としてみれば、単に 25 倍の感度を実現すればいいというだけではありません。 受信側では、蛍光灯やスクリーンセーバ、移動する人の影などからなる干し草の山から一本の針のような IrDA 光を見つけなければならないからです。

これを Palm III アップグレードボードで試した人がいます。 Palm III upgrade board をご覧下さい。

また、レーザダイオード (パルス発信の) を使うことも K-H.Eischer さんが薦めています。 ただし、これは高価ですし、1mW を超える高出力を持つものは危険でもあります。 よりよい方法はレンズを使ってビームを絞り込む方法です。また、空気には 光の吸収が最小になる波長がありますので (正確な周波数は未確認ですが) IR ダイオードをその周波数で使うべきです。

James さんが書いてきています「長距離 IrDA が欲しい方のため、私たちは次のものを試しました。ベストのやり方は以下です」

- wavelan - カードだけ買って、アンテナは買わずに自作しましょう。 メーカが $9000 で出している機種と同じぐらい良い感度が得られます。

- マイクロ波 - X バンドのドップラーレーダモジュールを買ってきて、少し調整してローカルの送信と外からの受信に使います。 モジュール全体は Ethernet のように動作し、AUI ポートにつなげますが、現在これは違法かもしれません。

- ir - 赤外線を使ってビデオ信号を転送するキットを出しているところがたくさんあります。 必要になる大きなフレネルレンズがついてきて、100m 超で約 4MHz の帯域が得られます。

- レーザダイオード - 最初に私たちが当たったときは、扱いにくい代物でした。 `elantec からまずまずのドライバがでていますが、これに変調をかけるのはとても大変です。 Steve Carcia が He-Ne レーザに変調をかけることについての連載記事を書いていますが、これは高圧が必要で、感電した場合命に関わります。

どれを選んだにしても、プロトコルとして IrDA を使うのは多分よい選択です。 それは、これが単方向通信をそこそこうまく扱える少ないプロトコルの一つだからです。

##### 将来の標準 (Bluetooth と IrDA)

「ますます多くの人が、IrDA と Bluetooth は幸福に共存するだろうと考えるようになっており、Bluetooth で IrDA を置き換えようという考え方は力を失っています。 IrDA は依然として価格性能比ではるかに勝っており、標準に新たに追加された AIR や VFIR 機能を見ると、IrDA が正しい方向に進んでいっているのが分かって嬉しく思います」

#### IrDA ネットワークの隣人たち

##### Laptop-プリンタ-PDA

Sourceforge の Drag-n-drop 関連 のところを見てください。PDA に (IrOBEX を使って)、およびプリンタに (IrLPT を使って) ドラッグアンドドロップでファイルを送れるようになります。

##### ブリッジング/ルーティング

James さんによると「ルーティングを兼ねたブリッジングを行うずっといい方法があります。 これは完全にユーザ空間で動作し、カーネルパッチは必要としません。

これは２つの部分からなっています (一方だけで良いかもしれませんが、両方とも必要かもしれません)。 最初の部分は irdaipcfg という名で、次のことをします。

1. 最初の部分は、`irdaipcfg ifeth ifirlan` としてデーモンで実行します。これは ifirlan の ARP パケットを監視し、デーモンを実行中のマシンによって出されたものではない arp パケットをチェックします。 この arp パケットは実行中のマシンと irlan の反対端の IP アドレス (これは irlan コードで、gratuitous arp 要求の結果から作成されます) を含みます。 このプログラムはそれを使って、ifirlan を用いたこの ip アドレスへのホストルートを作成し、ifeth にそのアドレスに対する proxy arp を行うよう付け加え、ifeth に向けて gratuitous arp を送ります。 これはクライアントの IP アドレスを /var/run/host.ifirlan に書き込みますので、 上記すべてをスクリプトから簡単に無効にすることができます 訳注: gratuitous arp/proxy arp (rfc2002) は定訳がないようですので、そのままにしました。原文の typo は修正。 。

2. 二番目の部分は `gratarp ifirlan` として実行します。時々 gratuitous arp がパイプ処理中で行方不明になるようですので、gratarp はデーモン化して、起きていることすべてを吐き出し続けます。

私は以下のようにして使っています (使い方はお好きなように)。

私のホストマシン (ローカルネットに繋がっているマシン) では、irlanx は アドレス 10.192.0.1 でネットマスク 255.255.255.255、 またブロードキャストアドレスを 10.192.0.1 として、irattach により /etc/irda/network 中から ifup スクリプトで立ち上げています。 /etc/irda/network では次に irdaipcfg eth0 irlanx と実行してルーティングを行います。

/etc/irda/network から

    "start")
        echo 1 >/proc/sys/net/ipv4/conf/all/forwarding
        ./ifup ifcfg-${device}
        /sbin/irdaipcfg ${localnet} ${device}
        ;;
    "stop")
        host=`cat /var/run/host.${device}`
        if [ .$host != . ]; then
          /sbin/arp -d ${host} dev ${localnet}
          /sbin/route delete ${host} dev ${device}
        fi
        ./ifdown ifcfg-${device}
        /sbin/ifconfig ${device} down
        ;;

クライアント側では、irlan を通常のサブネットアドレス 10.32.32.51 とし、但し通常のネットマスクとは異なる 255.255.255.255 で設定しています。 10.192.0.1 dev irlan をホストにし、デフォールトゲートウェイを 10.192.0.1 dev irlan にした静的ルーティングを使っています。 /etc/irda/network から gratarp を実行しており、家の中を歩き回っても telnet や ssh のセッションは切れません。これらは ftp://bullard.esc.cam.ac.uk/pub/irda に置いてあります」

##### IPv6

私の知る限り、IPv6 には近傍探索メカニズムが規定されていますが、Linux/IrDA を IPv6 で使うことに関する情報は持っていません。この話題に関する議論は Subject "patch-2.2.7-ac1-irda4" のスレッドでありましたので、 メーリングリストアーカイブを当たってみてください。

##### DHCP

dhcpcd を IrLAN で使えるとの報告を受けています。最新の DHCP ソフトウェアを使うようにしてください。

#### Linux/IrDA と APM

Fons Botman さんによると「私の Omnibook 2000CT を irtty を有効にしたままハイバネーション状態にしてから (Fn-12 を打って、メモリイメージをディスクに書きだし、マシンの電源を完全に切る)、 電源を再度投入すると IrDA が動きません。Omnibook で irdadump を動かしてみると、マシンはウィンドウボックスから受けたディスカバリフレームに応答しようとしているようですが、windows PC は返答を受け取れません。 ここで単に irattach を切って、irtty とシリアルを削除し、その後 irattach を再実行すると、また動き始めます。これは他の linux ラップトップでも起きているんでしょうか? シリアルデバイスドライバの問題なのかな?」Pedro Figueiredo さんによると、この問題は Fujitsu LifeBook 735DX でも起きているそうです。

Dag Brattli さんによる返答です「同じ現象が PPP を使っているとき (そして、IrDA を使っていないとき) にも起こるか確認して貰えませんか。 私の推定では APM 機能はシリアルポートをシャットダウンしているため、 ドライバで再起動時に再度初期化してやらなければならないのではないでしょうか。 これは私の知っている範囲では PCMCIA ドライバの一部では正しく実装されていますが、シリアルドライバが同様に APM システムからのイベントを受けているとは全然思えません。

というわけで、小さな専用カーネルプロジェクト、ということになります。irport (と多分 FIR ドライバ) に APM サポートを加えることから始めるのが一番やさしいでしょう。 次に、必要ならシリアルドライバにパッチを加えます。上でも書きましたが、 正しく直すためのお手本には PCMCIA サブシステムが良い情報源になると思います」

#### 性能テスト

`netperf` は様々な種類のネットワーク性能を測定するのに使えるベンチマークで、Unix ドメインソケット、BSD ソケットを用いた TCP と UDP に対応しています。 このプログラムは単方向のスループットと、始点から終点までの遅れの両方をテストできます。 Netperf のページをご覧下さい。

Pierre Beyssac さんの `bing` は ICMP ECHO_REQUEST パケットを使い、そのリンク端での応答時間を様々なパケットサイズを用いて計ることで、一対一リンクのバンド幅を測定します。

#### IrDA プロトコル

##### IrDA スタック

###### IrDA スタック

IrDA スタック

IrDA スタック

##### 入手可能な IrDA プロトコルの実装

この項の内容は Lichen Wang さんから頂きました。

既存プロトコル群

  IrLAP、IrLMP と TinyTP は現在かなり安定になってきています。 但し個々の実装については、まだ多少の問題は残っています。

  IrCOMM は広く使われていますが、Microsoft はこれをサポートしないと明言しており、IrSocket のみを用いています。

  IrObex、IrMC や IrTran-P などは様々なデバイスで使われていますが、PC 上のサポートは統合されたものではない、個別のケース対応のものです。 また、問題だらけ、ということもしばしばです。

新 IrDA プロトコルの開発状況

  AIR は主に IBM の推している規格です。より広い通信角度と長い通信距離 (10m?) が実現できますが、通信速度は遅くなります。 また、この既に遅くなってしまっているチャネルを、さらに時分割して使う機能も持っています。 私は、この規格がユーザにもたらす恩恵はとても少ないと見ています。AIR に伴うハードウェアの変更もソフトウェアの変更も大きなものです。もし AIR を使った製品が市場に出てくるとしても、 実際の製品をみるまでにはまだたっぷりと待たされることになると思います。

  IrBUS はシャープが推しているものです。これはリモートコントロールや、赤外線キーボードなどを対象としたもので、データ通信向けではありません。 シャープの意図通りになれば、恐らく IrBUS はセットトップボックスや web-tv などで使われることになるでしょう。 そのようなデバイスの普及率がある臨界点を超えた時点で、一部の PC でその種のデバイスをコントロールするために IrBUS を実装してくるのではないかと思っています。

  最後は VFIR です。これの利点は高いデータ転送速度 (16 Mbps) です。 AIR や IrBUS とは違い、VFIR に伴うソフトウェアの変更はごく小さなものです。 変更点は主にハードウェア部です。

まとめ

  要約すると、新 IrDA プロトコルを期待して、それまで待つ必要があるとは思いません。 現在の IrDA の、インストールが容易で手堅い実装が、今の世の中の先端です。

#### 知られているバグ

バグを見つけたら、IrDA メーリングリストにバグ報告を送ってください。 報告には、dmesg の出力、Linux のバージョンとディストリビューション、使 っているハードウェアの情報を含めてください。よろしくおねがいします!

しばしば IrCOMM は接続に失敗します。特に、両方のデバイスがディスカバ リに入ると起き易いようです。ディスカバリは、 echo 0 >/proc/sys/net/irda/discovery で禁止することができます。

CR (復帰) 文字は IrCOMM を使って二台の Linux マシン間の一方で、 cat file >/dev/ircomm0、他方で cat /dev/ircomm0 としても転送することができません。これは奇妙な動作を引き起こし、Linux マシンがフリーズします。 pc87108 デバイスドライバを、モジュールではなくカーネル組み込みにするとカーネルがブート時にクラッシュします。 当面の解決策としては、ドライバをモジュールとしてコンパイルしてください。

IrOBEX では、受信時にデータの一部が消えることがあります。このバグはおそらく IrOBEX のユーザ空間側で起きていると思われます。

#### FAQ

- irport 対 irtty

  irport は使ったことがありません。というのは、irtty で困っていないためです。 但し、この選択は使っている低レベルドライバの種類には依存しないはずです。 私は今のところ irtty、nec-ircc と irda-usb がうまく使えています (私のハードウェアでは、ですが)。

- Q1 - 質問: ポートとか割り込みとかいう話は全然分かりません。 どこから始めたらいいんでしょうか。

  A1 : その一 ハードウェア設定

  1. まず、ハードウェアの仕様を調べます。見あたらなかったらベンダのサポートページを当たったり、サポートホットラインに電話して聞きます。 この文書の前の方にあるハードウェアサーベイで情報を見つけることができるかもしれません。

  2. 最新の BIOS を使う。通常ベンダのサポートページに置かれています。

  3. "setserial /dev/ttyS? -g -a | egrep 16550A" を実行してみる。 表示されたデバイスのどれかが、多分さがしている IrDA ポートです。 二番目であることが多いですが、これは保証の限りではありません。

  4. ここで UART (非同期シリアルコントローラ。代表的なものは上記 16550A) のようにみえるものが、物理的には IrDA コントローラであることに注意してください。私の HP Omnibook 800 では、実際の IC は VLSI 社の VL82C147 PCI-IrDA コントローラです。 このコントローラは速度 115,200bps までは UART のように振る舞います。 但し、時として正しい設定情報を得るのが非常に難しいことがあります。

  その二: カーネルにハードウェア情報を与える

  1. cat /proc/ioports としてどのポートが現在使われているかを見ます。

  2. cat /proc/interrupts として、どの割り込みが現在使われているのかを見ます。

  3. ポートと割り込みが IR デバイスで使えるようにします。例えば、PCMCIA サービスを停止したり、/etc/sysconfig/pcmcia に PCIC_OPTS="irq_list=3,4,5,7,9,10,12,14,15" のような行を加えます。

  4. ここまで分かったなら、正しい割り込みとポートがどれかを調べます。これには setserial /dev/ttySx irq M port 0xNNNN としてカーネルに教えてみます。 M と NNNN に複数の可能性があるなら、全部試してみます (注意: Serial-HOWTO に記載のとおり、割り込み 0, 1, 6, 8, 13, 14 を試すのは避けてください) 訳注: PC-AT アーキテクチャでは、0,1,6,8,13 は全部決まったデバイスに固定的に割り当てられています。14 だけは IDE を使ってないなら使える可能性有り。これに加えて、IDE RAID カードやコントローラ等を使っているなら、それが使っているものも避けてください。 。

  5. うまくいったなら、そのときのパラメータを原作者まで送ってください。 送っていただいたものは赤外線ハードウェアサーベィに含めたいと思います。

  6. 幸運を祈ります

  IR シリアルポートを `setserial` コマンドを使って調整する必要があるでしょう (例えば、 setserial /dev/ttyS0 spd_vhi (速度 115200 bps 時) など)。

- Q3 - 質問: `tcsetattr read/write error` というメッセージが /var/log/messages に出るんですが

  A3 : 多分 /dev/ttyS* の選択を間違っているか、割り込みかポートの設定が違っています。

- Q4 - 質問: すべての設定は正しそうで、それを裏付ける妥当なメッセージが返ってきます。それなのに動きません。

  A4 : デバイスを 0.5m (1.5 フィート) 以内に置いてください。 赤外線ポートを使うアプリケーションがただ一つのみとなっているかを確認してください。 両方のデバイスが同じプロトコル、例えば IrOBEX や IrCOMM を使っているかを確認してください。

- Q7 - Ho Chin Keong さんの質問「２台のラップトップ間で通信を行うのに、この２台間で LAN ルートの設定を行う以外の方法はありますか?」

  A7 : Dag Brattli さんによる回答「あるともないともいえますね。IrDA 標準の一つ IrCOMM を使えば二台のラップトップ間のシリアルケーブル接続がエミュレートできます。 これを使えば、シリアルポート向けに書かれたアプリケーション (ターミナル、PPP、 slip など) は使えます。但し、この機能はまだ Linux/IrDA には実装されていません。Linux/IrDA でサポートのある IrLPT (プリンタ) は、実際には IrCOMM のサブセットですから、機能の一部は動くと思います」

- Q8 - Ho Chin Keong さんの質問「赤外線パスをえいやと 10 秒以上ふさぐと、通信が再開できません。この場合、赤外線通信を再開するには irattach を殺して全体を再起動してやる必要があります。但し、ふさいでいる時間が 10 秒以内なら接続は維持されたままです。 これは仕様、それともバグなんでしょうか? この時間を 10 秒以上、または無限時間まで伸ばす方法はあるんでしょうか?

  A8 : Thomas Davis さんによる回答「これは IrLAP/IrLMP コードのプライマリ側のバグのようです。スタックを逆に辿って reset/disconnect 通知を送っていないようですね。 このことは、プリンタと通信しようとしている間や、ハンドシェークしている際に ディスコネクトや割り込みを行った時に、 クエリモードで IrLPT が固まることで気がつくと思います (現在は、IrLAN 処理中に 起きます)」

- Q11 - IrDA を BSD で使えるのでしょうか?

  A11 : 今のところ Linux/IrDA が唯一の入手可能な GPL ソースです 訳注: BSD なソースはない、ということを含むと思われる。 。

- Q12 - Rui Oliveira さんの質問「Palm III と Actisys 220L アダプタをつけたLinux マシン間で、通信がうまくいきません。マザーボードアダプタ (メーカー名がありませんが、Actisys 210L に似たものだと思います) では、pilot 同期ツール (pilot-xfer) を赤外線アダプタのつながっている /dev/ttyS1 に向け、SIR モードで IrLink を使ってあっさりと Palm III と Linux マシン間の通信ができています。これをシリアル - IrDA アダプタの Actisys 220L 経由でシリアルポートから行おうとすると、うまくいきません。質問は、IrDA アダプタ付きのシリアルポートに単にデータを送り込むだけだと、実際には何が起きているのか、が知りたいのです」

  A12 : Lichen Wang さんによる答え「ハードウェア的には、IrDA SIR ではシリアルパラレル変換、エンコーダ・デコーダ、それにトランシーバが必要です。 COM ポートをドライブしている UART はどの PC でもシリアルパラレル変換ハードウェアに相当します。一部の PC ではエンコーダ・デコーダを持っており、BIOS で有効と無効の選択ができます。 無効と指定しているときには、COM ポートは昔ながらの COM ポートとして使えます。 エンコーダ・デコーダを有効としているときには、通常 COM ポートは使えなくなりますが、代わりに IrDA ポートが使えるようになります。 Actisys IR-210 は SIR トランシーバに相当するので、上に書いたような IrDA エンコーダ・デコーダ付きの UART を持つ PC で、エンコーダ・デコーダを有効にした状態で使うことができます。 このハードウェア構成では、Windows 向けのセットアッププログラムに、この PC は "赤外線デバイス" と "ラップトップとデスクトップ向け内蔵赤外線ポート" を持っている、と指定してやる必要があります。これに対して、Actisys IR-220 はエンコーダ・デコーダとトランシーバの両方が含まれています。これは普通の UART と組み合わせて使うよう設計されたものです。もし、PC の UART にもエンコーダ・デコーダが組み込まれている場合、BIOS からそれを無効にしなければいけません。こちらのハードウェア構成では、 Windows 向けのセットアッププログラムには、"ACTiSTS" 社の "ACT-IR220L Infrared Wireless Interface" を持っていると指定してやる必要があります。 というわけで、質問の答えです。シリアルポートにデータを投げるのに加えて、UART とエンコーダ・デコーダに、使用するデータレートを与える必要があります。 また内蔵エンコーダ・デコーダを持っている場合、UART にデータレートを与える際に、エンコーダ・デコーダの設定も正しく行う必要があります。 UART とエンコーダ・デコーダが独立になっている場合、両方にデータレートを正しく設定する必要があります。」

- Q13 - 接続を行う際に、例えば Telnet を使った場合、login プロンプトが出てくるまで信じがたいほど時間がかかるんですが、これは何故?

  A13 : Renaud Baldura さん、Dag Brattli さんと Hee Thong さんによる回答「これは DNS 設定の問題です。リゾルバが、入ってくるコネクションの IP アドレスの逆引きをしようとしてタイムアウトしているためです。単に /etc/resolv.conf の名前を変更して他のものに面倒を見させるようにするか、 単に /etc/hosts にあなたの (Ir) 専用ネットワークのアクセスするマシン名を静的バインディングとして与えることで、DNS 検索を避けることができます。 両方のマシンがプライベートのテスト環境にあるなら、/etc/host.conf に "order hosts, bind" という行を加えてください。これによって、DNS 検索の前に /etc/hosts ファイルを見るようになります。両方のマシンで、２台のマシンの IP とホスト名を反映するよう /etc/hosts を更新するようにしてください 訳注: host.conf ではなく /etc/nsswitch.conf の方を修正するディストリビューションもあり。当該ファイルの man ページや、所定 HOWTO 参照。。

- Q14 - David LaPorte さんの質問「Toshiba Tecra 740cdt で IrDA ポートを動くようにした人はいませんか。読む限りでは、これは IRQ 11 で、ttyS2 に現れるはずです。えと、残念ながら PCMCIA モデムがついていて、これが ttyS2 を押さえてしまっており、PCMCIA コントローラが IRQ 11 を押さえてしまっています。どなたか助言をいただけませんか?」

  A14 : Dag Brattli さんによる回答「まだマシンに Win95 が残してあるなら、 デバイスマネージャを起動して IrDA ポートの PnP セットアップを変更して (既に使っているところではないところに移して) ください。例えば ttyS1 (Win95 で) を移動して PCMCIA カードが使おうとしている側に移し、ttyS2 用に ttyS1 の設定を使えば良いでしょう。

      dagbnb ~/linux/test/ > cat /etc/sysconfig/pcmcia
      PCMCIA=yes
      PCIC=i82365
      PCIC_OPTS="irq_list=7,9,10"
      CORE_OPTS=

  PCMCIA コントローラが IRQ 11 から移動したことを確認してください。 また、Win95 上で IrDA ポートが有効になっていることを確認してください。 標準設定では IrDA ポートは無効になっていますので。

## 赤外線リモートコントロール

### はじめに

赤外線を使ったリモートコントロールは Linux/IrDA プロジェクトの対象ではありませんが、この HOWTO には "Linux と赤外線" の話題を広くカバーするために含めてあります。 この問題に取り組んでいるプロジェクトもいくつか知っています。最新の情報は、 TuxMobil に置いてあります。

### Linux Infrared Remote Control (Linux 赤外線リモートコントロール) - LIRC

LIRC は、広く普及している赤外線リモートコントロールに赤外線を送受するためのパッケージです。 LIRC にはシリアルポートに接続されたハードウェアのためのデバイスドライバと、 このデバイスドライバを用いて赤外線信号を受信・解読および送信するためのデーモン、赤外線信号をマウスの動きに変換するマウスデーモン、 およびリモートコントローラでコンピュータを操作するための幾つかのユーザプログラムが含まれています。 赤外線ハードウェアは自作することも、様々な市販品を用いることもできます。 樋口 隆英さんは LIRC についてこう書いています 「凄いソフトで、殆どこれだけで完璧なものに思えます。 但し、このソフトがサポートしているハードウェアは市場に殆ど出回っていません (あるいは特製の回路をハンダ付けで作る必要があります。 これは普通の人には敷居が高いでしょう)。 FastIR ドライバに家電品の赤外線向けサポートが実装されるか、 なんらかの共通 API (例えば raw IrSocket とか共通 ioctl とか) が できれば、LIRC はずっと普及すると思います」

### Lego マインドストーム

Luis Villa さんによる Lego Mindstorm with Linux Mini-HOWTO からの引用です「ご存知ない方のために書きますが、Lego の Mindstorm キットは ロボット工学のキットで、Lego グループから約 200 US ドルで発売されています。 キットの中身は、たくさんの Lego ブロックと、RCX という大きなブロック (これには CPU や液晶ディスプレイと、いくつかのコネクタが付いています) と、 数個のモータと、外界との交信用の光センサと、二つのタッチセンサです」

「RCX との通信は、マシンのシリアルポートにつながった IR tower を経由します。 つまり、シリアルポートがないマシンではアダプタを買わないかぎり RCX を使えません。また場合によっては、IRQ やシリアルポートの競合のため、 シリアルポートがきちんと動かないこともあります。これは、特にモデムが /dev/ttyS0 を使っている場合起きがちです」

### シリアル赤外線コントローラ

これは単純で安価なデバイスで、どんなシリアルポートにも繋げられ、赤外線リモートコントロール機能を持つ大概のデバイスを制御できます。 最初はハンダ付けなしのブレッドボード上で設計されたもので、最終的には PC 用のボードになっています。このパッケージについては ここ を見てください。

### COREL Netwinder PC 用の赤外線ツール

Ryan Shillington さんから COREL Netwinder を赤外線経由で制御するためのツールについて幾つか寄せて貰っています。例えば

「Corel Palm Administrator のサーバ側のデーモンですが、これを動かすには ir-simple がインストールされ、立ち上がって動いている必要があります。 これを使えば IP アドレス、ゲートウェイアドレス、eth1 の設定などのチェックや変更が行えます。 また、簡単なコマンドの実行や、温度やメモリや負荷の状態のチェックも可能です」

「Corel Palm Administrator のクライアント側の方では、簡単なコマンドの実行と、温度やメモリや負荷の状態のチェックなどが可能です」

「これは、とても基本的な赤外線デバイスドライバです。これは IrDA をサポートしておらず、信頼性のない転送しかサポートしていません。 これは、リモートコントロール用の信号 (とキーボードなど) に特化したものと思います。 IrDA とは全く違ったやり方で、データをブロックしたり流したりします。」

ツールは ここ にあります。

### ir

`ir` は、 Chris Dodge さんの RedRat 2 赤外線コントローラ用インターフェースプログラムで、 家電製品との間で赤外線通信を行うためのものです。 対象となるのは、TV、ビデオデッキ、 ケーブルテレビセットトップボックスやステレオなどです。 このプログラムは基本的な Perl の機能だけを使って書かれており、外部パッケージを必要としません。 このため、このプログラムは Perl とシリアル通信をサポートするどんなプラットホーム上でも動作するはずです。 このプログラムはコマンド行からも、cron からも、e-mail ハンドラからも (alias 経由で) 使え、さらには cgi スクリプトとして、 好きなコードでフォームを自動生成させることもできます。 マクロ機能もあるので、一つのコマンドで一連の赤外線信号を送ることもできます。 X-10 の IR543 を使って、X-10 デバイスを制御することも可能です。 ダウンロードは ここ からです。

### irmctl

irmctl は、お好きな IrDA 非互換の赤外線レシーバを制御するためのユーティリティデーモンです。 現時点では、irman (libirman 経由で) のみサポートされています。

### IRManager

IRManager は IRMan 赤外線レシーバの高度な利用のための Linux デーモンです。 このデーモンは、赤外線信号を (複数の) 専用の IRMan アプリケーションに中継し、 自作のスクリプトやアプリケーションと組み合わせて使うこともできます。 また、高度な設定オプションによるマッピングシステムを持っており、あなたのコンピュータをリモートで使う際の、 最高の柔軟性と使いやすさを兼ね備えた操作を実現しています。

### irXxD

irXxD はリモートコントロールコードを送受するためのライブラリです。Linux カーネル 2.0 と 2.2 で IR 信号を送受するためのモジュールが含まれており、 それ以外の様々な OS にも対応しています。

### XR3

Xr3 は RedRat2 シリアルポートベースの IR リモートコントローラのための一連のツールです。 このソフトウェアは元々 ReplayTV パーソナルビデオレコーダ (PVR) を操作するために開発されたもので、 殆どの赤外線操作可能な A/V 機器を扱えるよう拡張されています。 」

### IR File Chooser (赤外線ファイル選択機)

Infra Red (IR) File Chooser はリモート制御のメニューでファイルを選択して、指定されたプログラムでロードします。 好きなだけのファイルの種類と、それに関連づけられたプログラムの組を定義できます。 この InfraRed (IR) File Chooser の機能は Perl やシェルスクリプトを使って拡張できます。GUI は Perl::GTK で作成されており、リモート制御コマンドの取り込みには RCU::Lirc を使っています。

### IControl

IControl は Creative 社 RM-900 リモコンと付属の IR LiveDrive! 受信ユニットからの信号を解釈するものです。これは現在様々なプログラム (XMMS、Xine、XawTV や XScreensaver など) に入力を送ったり、画面上のウィンドウをめくったり (ウィンドウを背面に送ったり)、入力対象画面を変更するなどが行えます。 また、これは完全に構成変更可能で、ユーザが各キーに、デーモンのサポートする任意の動作を割り付けることが出来ます。 他のリモコンのサポートも計画中です。

### jlirc

jlirc は LIRC と WINLirc プログラムへの Java クライアント API です。 これをつかって、開発中の Java アプリケーションにリモートコントロールのサポートを追加できます。

### lircemu

lircemu は、Lirc アプリケーションの開発者向けの小さなツールです。これは Lirc デーモンをエミュレートするもので、Lirc をサポートするプログラムのテスト、開発、利用が行えます。 これはグラフィカルな仮想リモートコントロール機能を提供しますので、ボタン押しを簡単に行うことができます。 また、単純なコンソール利用バージョンも同梱されています。

### tonto

Tonto は、Philips 社の Pronto シリーズのリモコン関連開発者の友です。Tonto は、 CCF ファイルを編集するための IDE GUI 機能と Java API の両方を提供します。

### 赤外線リモートコントローラと IrDA

これまでに述べてきた内の２つのプロジェクトでは、手製のドングルを赤外線リモコン用に作っていました。 ドイツの ELEKTOR 誌 97/5 月号 p. 28 にも、シリアル IrDA ドングルを自作するための説明があります。 誰か、この２つの種類のドングルを一つにまとめられないものでしょうかね。

赤外線リモートコントロールと IrDA との関連性について、Linux/IrDA メーリングリストでの議論から少し引いておきます。 以下の引用は、多少編集して短くしてあります。

Ryan Shillington さんによると「家電機器のIR - CIR とリモートコントロールの赤外線機能および ASK-IR は、FIR、MIR や SIR とはずいぶん異なっています」

「リモートコントロールの赤外線機能と ASK-IR は赤外線光源を使っていますが、とても低速で、周波数も低いです。 一方、到達可能距離はずっと長くなっています。動作速度は 2400 baud 程度です。

SIR はずっと高速で、リモートコントロールとは違って数文字以上のデータの受け渡しが必要で、かつ長い距離での通信を行うことを意図しています。

MIR はもう少し高速で (距離はより短くなります)、スピードは 1.15Mbps になり、 FIR は (デバイスを殆どくっつけるようにして置く必要がありますが) 4Mbps です。 通信可能距離は、データを送るスピードに反比例します。

私はリモートコントロールの赤外線制御用のドライバを書いていますが、 ここで注意しておきたいのは、あなたの赤外線で操作したい対象がサポートされている必要がある、ということです。 NEC、RC-5 や RC-0 プロトコル (最も普通のものです) などがサポートされているか見てください。

SIR はリモートコントロール信号の受信にも使えます。 ボーレートを適切な低い値にすれば、データが入ってきます。 但し、経験上、このデータは正しくありません。 これは正しいやり方で解析されておらず、その結果としてチェックサムの計算や補数によるチェックを行うことができません。

リモートコントロールからのデータが (SIR で) 正しく取れるよう取り組んでいます。 また、SIR は温度によってリモートコントロールからのデータを違う値として取り込むという報告も受けています。 但し、私にはこのような経験はありません」

Lichen Wang さんがこれに答えています 「殆どのラップトップに搭載されている、いわゆる ASKIR は、リモートコントロールのためのものではありません。 ASKIR は Sharp Wizard と Zaurus PDA、及びシャープの一部のノート PC 向けのものです。シャープはこの仕様を IrDA 規格が策定されるよりずっと前に作成しており、現在でも従来機との互換性のために搭載しています。また Apple の Newton も一度はこの機能を持っていました。

簡単にいって、ASKIR は 9.6 kbps (19.2 と 38.4 Kbps も可能です) の非同期データフォーマット、8 ビットデータ、1 ストップビット、奇数パリティを用いています。 スタートビットと、データ/パリティ中の '0' ビットは 500KHz の赤外線方形波 (DASK 副搬送波) として送信されます。ストップビットとデータ/パリティ中の '1' ビットは、赤外線送信が行われないことで伝達されます。

ここまでの説明で分かるとおり、これは全く現在の赤外線リモートコントロールとは非互換です。... (中略) ...

その通りです。SIR ハードウェアを使って受信だけでなく送信も行えます。 もちろん、いくらかの制限はあります。

殆どの IR リモートコントロールは 38KHz 副搬送波を使っています。38 の三倍は 114 で、これは 115.2 にかなり近い値です。というわけで、UART を 115.2 Kbps で動作するよう設定し、また 7 データビット、パリティなし、1 ストップビットに設定します。38 KHz の副搬送波の三サイクル分は、データ 0x5B を送受することになります。

副搬送波が 38KHz でなければならないことに加えて、さらにいくつかの物理的制約があります。 SIR レシーバは、こういう目的向けに設計されているわけではないため、38KHz ではあまり感度が良くありません。SIR トランスミッタはもっと低いデューティサイクルを想定しており、副搬送波として強い信号を送信することはできません。

IR リモコンは、特定のパターンで副搬送波をオンオフすることで制御信号を符号化しています。 副搬送波が送受できるようになったわけですから、残る問題はタイミングだけです。

送信としては、0x5B の連続送信を何回副搬送波のトーンバーストとして送ればいいのか、 そしてバーストの間の無送信時間をどれだけとる必要があるのかを知る必要があります。

受信としては、0x5B のデータを何回連続して受け取ったか、それら連続したバイト間の間隔がどれだけあったかを知る必要があります。... (中略) ...

IrDA リンク間距離と、SIR/MIR/FIR との関係の私の経験は、Ryan さんの言っている内容とは多少異なります。... (中略) ...

SIR、MIR 及び FIR とも 0 から 100cm の距離で実用的に動くはずです。但し

(a) 一部のデバイスは長距離通信時に問題が出ます。

できる限り、２つの通信対象のデバイスは 50cm 以上離さないでください。 低消費電力のデバイス、例えばポケットベルや携帯電話などはもっと短い距離としてください。 これは、このようなデバイスが MIR や FIR ではなく SIR を使っているという事実に関わらず、です。

(b) 一部のデバイスは短距離通信時に問題が出ます。

２つのデバイスは、少なくとも数センチは離してください。 二つのデバイスをあまりに近づけすぎると、問題が出ることがあります。

リンクが不安定なときに２つのデバイスを近づければいいと言うのは、感覚的に納得がいくものです。 一方、近づけすぎるのはやはりダメ、というのは直感に反します。 近づけたときに問題が起こる理由は、100cm の時に比べ 1cm では、光の強さが 10,000 倍になるためです。0.5cm では 40,000 倍等々です。 問題を起こす赤外線レシーバメーカは、この広いダイナミックレンジへの対応に問題を起こしているのです。 10W の電球の下で文字を追うのは誰でも苦労しますが、それが 100,000W だとどんな気分になるか想像してみてください。

IrDA の物理レイヤは IR リモートコントロールで使われている DASK 変調とは全く互換性がありません。従って、FIR とリモートコントロールで同じ制御回路を使うことはできません。但し、殆どの FIR コントローラチップはリモートコントロールをサポートするための多少の追加回路を持っています。 ここでは一部のみ名を上げますが、National Semiconductor、SMC 及び Winbond はすべてこのような作りの I/O チップを出しています。

FIR 用の IR トランスミッタとリモートコントロールはとてもよく似ています。 私は標準の FIR トランスミッタを使ってみましたが、リモートコントロールとしては 10m まで使えました。 従って、リモートコントロール用に設計されたトランスミッタと同じように良好に動作します。

FIR 用の IR レシーバについては多少異なります。FIR レシーバはリモートコントロールの信号を受信できますが、その距離は 1m までです。一方リモートコントロール用に設計されたレシーバは通常 10m は届きます。

私は National Semiconductor 社製の I/O チップを搭載していて、FIR とリモートコントロールの両方をサポートしている ISA バスカードを持っています。また、FIR とリモートコントロールの両方のレシーバ (加えて両モード用のトランスミッタ) を持った IR ドングルも持っています。 私自身の経験は DOS 環境のみで、まだ Linux では走らせてはいませんが、誰か興味のある方はいますか?」

Benny Amorsen さんによると「私は ASKIR をサポートしているらしいラップトップ機を持っています。 赤外線ポートのモードは BIOS で ASKIR に切り変えられます。BIOS でモードを切り変えるためにリブートしているのでは殆ど役に立ちませんので、誰かが動作時に切り変える方法を見つける必要があるでしょう」

Dag Brattli さんによると「多分 IrDA 互換のリモートコントロールは IrControl (以前は IrBus と呼ばれていた) を使うことができるはずです。私は今のところ IrControl 標準準拠のリモートコントロールは知らないんですが、多分どこかにあるはずです (この件について誰か知りませんか?)。まず、 Linux/IrDA site から物理層標準の仕様 (これには IrControl が含まれていると思います) を取ってくる必要があるでしょう。

通常の IrDA (IrLAP を使うもの) は、リモートコントロールにはうまく適合しません。これは、通常の IrDA はコネクション指向の特性を持ち、コネクションレス目的では 9600bps までしかサポートしていないためです。 このように速度が制約されているのは、目の安全への考慮のためとされています (でも、CIR が同じ出力でより良く動作する理由がこれではわかりませんが)。 それに、私はラップトップ機間で 4-5m 離して通信ができているのを見たこともあります (この状態で高速な通信ができるとは思いませんが)。

ほとんどの IrDA チップセットは CIR 動作が可能ですし、ドライバで CIR を話せるようにするのも実に簡単です。樋口 隆英さんが IrSocket を調べ始めており、その改造で CIR パケットを送受できる Ir(DA) の "raw" ソケットを開けるようになると素晴らしいです。全 CIR アプリケーションをユーザ空間で実行できるようになりますので。

私の知る限り、Corel は Netwinder を制御するために CIR を使うことに興味を持っているようです。 この記事 か、Ryans page をご覧下さい。

Hewlett-Packard 社の IrDA Data Link Design Guide の p.21 より。「Hewlett-Packard 社の IrDA トランシーバを使って IrDA 以外の信号を送受することは可能です。 そのような実装の詳細については、アプリケーションノート "Transceiver Performance with ASK and TV Remote Signals" を参考にしてください」

IR-MAN ページ から

「幸いなことに、多くの IrDA デバイスは TV 用リモコンで使われている 38KHz の ASK 変調と互換性を持ちます。これは、IrDA デバイスはそのような赤外線信号で動作できると言うことです。 但し、どうやらポータブルコンピュータで TV リモコンからの赤外線を受信できないものが、まだ多数あるようです。

デスクトップコンピュータの場合、マザーボードの種類によって２つの選択枝があります。 普通の Pentium マザーボードは赤外線通信をサポートした I/O チップセットを搭載しています。 この場合、赤外線送受デバイスを接続するための専用コネクタがあります。 もう一方の選択枝は、コンピュータのシリアルポート (RS-232) に繋げるシリアルタイプのトランシーバを購入することです。PC リモートコントロールは、このどちらの IrDA デバイスを用いた場合でも正しく動くことをテスト済みです。

1. IRmate IR-210 シリアルポート赤外線アダプタ ... このデバイスで認識可能なシリアルポートのデータ速度は 2400 bps です。 この種のアダプタでこの通信速度は共通なのか、このモデル固有の特性なのかは分かりません。

   受信したデータ値のサンプルがどの程度似ているかを見てみましょう。 一部の赤外線コマンドは毎回大きく変化し、認識が困難です。 この場合、比較時に許容値をとても大きくとることで対処しますが、違うコマンドと誤認する危険性が大きくなります。 殆どどの場合も、最適な許容値は 20 でした。

2. Actisys IR2000L を Asus P2B マザーボードにつないで使っています。(中略) 幾つかのポートスピードで良好に動作しますが、4800 bps が最適なようです。 同様のタイプの他のアダプタもこのスピードが最良のようです。 例となるデータシーケンスをこのデバイスで見てみたところ、幾つかのリモコンのボタンで全く同じシーケンスが送られているように見え、区別は全くできませんでした。

3. Asus IR IR-eye は上と同じマザーボードに接続できます。Actisys デバイスと同様に良好に動作します。

TV のリモコンはコマンドを一方向で、最大 30 フィートの距離を低速バースト信号として送ります。 このようなリモコンでは使い勝手を向上するため、ほどほどの指向性を持った赤外線 発光ダイオード (LED) を使用しています。IrDA によるコードレス接続では、一対一かつ双方向でファイル転送を行いますが、 その際 IrDA では短い距離用の高速バースト信号を使い、指向性の強い赤外線 LED を使用しています。 IrDA 通信では比較的注意深く光の向きを合わせる必要がありますし、障害物に弱くもあります。 このため、リモートコントロールを相手にしているときに長い距離での動作は期待しないでください」

Alessio Massaro さんによると「IrDA は テレビのリモコンとは会話できませんが、シリアルインターフェースをエミュレートする IrCOMM レイヤは持っています。私の想像では、LIRC が IrDA で動くようにするには、単に IrCOMM 仮想シリアルドライバから読み込むようにしておいて (/dev/cua などに対するように) マシンのドングル+IrDA ヘッダにリモコンを向けてやれば良いのではないかな」

Dag Brattli さんの返答はこうです 「多分普通のシリアルポートのことを話していると思うんですが、私は少なくとも IrDA がそういうものとして動くように作るという選択はしませんでした。 私は全デバイスドライバをネットワークデバイスドライバに向けて実装しており、多少の差異というか、よりフレーム指向になるよう作っています。 デバイスドライバは IrDA フレームを送受するもので、他に何も受け渡ししません。

それに、現在のところ IrDA デバイスで、より生の状態の読み書きをサポートするために tty インターフェースを実装しなければならないとも思っていません。ついでながら、 IrCOMM のことは忘れてください。この件には関係ありません。

実はデバイスドライバ自体には、生の読み書きのサポートは既に加えてあります。 これは一部のドングルで必要になるためです」

## 付録

### Credits (謝辞)

【訳注: Credits (謝辞)の項は Invariant に指定されているので、訳しません。】

Thanks to:

         * The members of the Linux-IrDA mailing list.
         * The writers of the other HOWTOs which gave me many inspirations.
         * The developers of the SGML-Tools which provided some means to write a HOWTO.
         * Benny Amorsen
         * The Armadillo with the Mask
         * Mathieu Arnold
         * Fons Botman
         * Philip Blundell
         * Dag Brattli - Linux/IrDA core team
         * David Burley
         * Andreas Butz
         * Edgardo Calabrese >
         * Andrew Chadwick
         * Ho Chin Keong
         * Claudiu Costin
         * Stefan Dahlke
         * Thomas Davis - Linux/IrDA core team
         * Colin DeWitt
         * Richard Donkin
         * Ha Duong Minh
         * Ales Dryak
         * K-H. Eischer
         * Ove Ewerlid
         * Timo Felbinger
         * Tollef Fog Heen
         * Christian Gennerat
         * Gerhard Gonter
         * Mike Groeneweg
         * Bjoern Hansson
         * Takahide Higuchi - Linux/IrDA core team
         * Jon Howell
         * Gerd Knorr
         * Hannes Kurth hkurth_at_olsn.org
         * Arthur Tyde  and Bryan Abshier from Linuxcare Inc.
         * Joonas Lehtinen
         * Mark Lewis
         * Florian Lohoff
         * George MacDonald
         * Pawel Machek
         * James McKenzie
         * Alessio Massaro
         * Harald Milz
         * Bjoern Mork
         * Tang Ning
         * Rui Oliveira
         * Igor Pesando
         * Kurt Pfeiffle
         * Raj Rijhwani
         * Christian Rishoej
         * Wessel de Roode
         * Markus Schill
         * Ryan Shillington
         * Richard Titmuss
         * Jean Tourrilhes
         * Carlos Vidal
         * Lichen Wang
         * Guenther Wieser
         * Toni van de Wiel
         * Ralf Zabka
         * Christian Zoz

Sorry I didn't start to follow the credits when starting the HOWTO, so probably I forgot somebody.

残念ながら、HOWTO を開始したときからこの謝辞の作成を開始しなかったため、 忘れているかたがいると思います。

### 版の履歴

- v0.1 to v0.4a, 19 March 1998 to 4 August 1998, ドラフト。LDP に未収録

- v1.0, 14 August 1998, LDP へリリース

- v1.1, 18 August 1998, Takahide Higuchi さんによる IrCOMM パッチ情報追記。細かな修正。

- v1.2, 24 August 1998, `linux-irda-1998-08-20` スナップショットへアップデート。FIR と改版履歴の項を追加。 細かい修正。

- v1.3, 27 September 1998, 複数インスタンスの説明の項、携帯電話、ディジタルカメラ Linux間通信、最新版 - CVS、節電の各項を追加。 一般的設定の項を小変更。ハードウェアサーベイを修正。その他細かい修正。

- v1.4, 11 October 1998, IrCOMM サポートの記載を改良。ドングル接続の項を変更。 Palm III の項を修正。その他細かい修正。

- v1.5, 12 October 1998, 細かい修正。

- v1.6, 26 October 1998, IrManager の項を追加。`linux-irda-1998-10-21` スナップショットに更新。ドングル接続の項を修正。その他細かい修正。

- v1.7, 1 November 1998, リモートコントロールの項追加。ドングル接続の項を修正。その他細かい修正。

- v2.0, 9 January 1999, Linux/IR がカーネル 2.1.131 に統合されたことに伴うほぼ全面的な書き換えと再編集。ドングル接続の項に BIOS サポートの情報追加。設定ツールの項と CVS の項削除。

- v2.1, 13 January 1999, 細かい修正。

- v2.2, 26 January 1999, プロジェクト名を Linux/IR から Linux/IrDA へ変更。 トラブルシュートの章に加筆。既知のバグの項の順序をトラブルシュートの章の後に再配置。多少のゴミを削除。

- v2.3, 4 February 1999, Andreas Butz さんによる目の安全の章を追加。 スペルチェック。カーネルパラメータの章を見直し。Andreas Butz さんによる情報追加。その他小修正。

- v2.4, 9 February 1999, パッチファイルの適用関連の情報を変更。

- v2.5, 12 March 1999; Linux/IrDA を新 URL に。Big Endian サポートの章を追加。 `irdaping`, `irdadump` の章を追加。 「IrDA を超えて - 接続距離を伸ばすには」の章追加。 ラップトップの赤外線ポートについての記載のある章の手直し。Fons Botman さんによる Windows の章への情報多数追加。SMP の章追加。Ericsson SH888 の情報を追加。 古くなった FAQ を削除。その他細かい修正。

- v2.6, 6 April 1999, ドッキングステーションの章追加。キーボードコネクションとシリアルケーブルを使った接続の項追加。その他細かい修正。

- v2.7, 11 June 1999 これからの標準 (Bluetooth と IrDA) の章を開始。GUI の章に CORBA の注記を追加。Nokia 社の携帯電話に関する情報を多少加筆。 シリアル赤外線ポートスニファの付録を追加。IrDA ネットワーク近傍の節を開始。 Psion 5 の章を開始。付録 C を開始。LIRC に多少加筆。その他細かい修正。

- v2.8, 20 September 1999, LiRC メーリングリストを追記。<htmlurl ... > タグを <url ...> に変更。conf.modules のエントリフォーマットを変更。 ハードウェア検出 (PCMCIA) の項を追加。IrDA メーリングリストを追記。 Linux-IrDA メーリングリストのアドレスを変更。マルチプルインスタンスの節に小加筆。仏語訳への URL を追加。付録 B に `sersniff` の章を追加。 コンパイル済みパッケージの節を追加。Palm III と Thinkpad 600 の接続の章を追加。 その他細かい修正。

- v2.9, 21 September 1999, プリンタ接続の章の変更。スペルチェック。Siemens S25 との接続について加筆。その他細かい修正。

- v2.10, 2 November 1999, 細かい修正。

- v2.11, 9 March 2000, 'irctl' と 'IRManager' 赤外線コントロールプログラムへのリンク追加。文書のベース URL 変更。Linuxcare Inc. の Arthur Tyde さんと Bryan Abshier さんによる Linux と Windows CE との接続の章を追加。IrDA-Java インターフェースのリンク追加。 Guenther Wieser さんによる東芝の機種と IrDA についての HOWTO へのリンク追加。 Siemens S25 との接続に関する追加情報を Timo Felbinger から頂き追加。携帯電話への AT コマンドのリンク追加。コード履歴の章追加。SH888 電話帳ツールへのリンク追加。 Lichen Wang さんによる IrDA プロトコルの短いサーベィ追加。その他細かい修正。

- v3.0, 5 November 2000, フォーマットを DocBook に変更。 ライセンスを GNU Free Documentation License - GFDL に変更。題名を IR-HOWTO から Infrared-HOWTO に変更。文書の URL を更新。 Linux/IrDA へのリンクを更新。

- v3.1, 8 November 2000, リンク更新。DocBook 3.1 に準拠。

- v3.2, 21 March 2001, 使われなくなった irmanager と /dev/irnine への言及と誤ったデバイス難波に関する記載を削除。カーネル 2.4.x に伴う修正。 詳細な査読とテスト。モジュールオプションとヌルモデム接続に関する章追加。 節の順序見直しと整理。リンク更新。

- v3.3, 22 April 2001, 2.4.3 からドキュメントを取り込み。使われなくなったものへの言及を削除。その他小修正。

- v3.4, 10 August 2002 Linux PDA の章の加筆と PPP、OpenOBEX、印刷関連などについての記載追加。 各セクションで、irattach の -s オプションの新シンタクスへの変更。 IrDA と USB の章の手直しと改善。印刷関連手直し、irlpt サーバと IrLPT についてのヒントはもう役に立たないので削除。Common Unix Printing System - CUPS の使い方を記載。Gnome IrDA アプレットと、Beamster GTK/Python を新設の GUI セクションに追記。日本語訳へのリンク追加。幾つかの LIRC プログラム (IR Chooser、IControl、jlirc) の情報記載。URL への参照をハイパーリンクに書き換え。@ を _at_ に変えてスパム対策を行う (多少は役に立つと期待)。URL 訂正 (LDP 等)。その他細かい修正。

- v3.4b 12 December 2004 (日本語版のみ) v3.5,v3.6 の追加事項のうち、IrCOMM2k, LIRC 追加、Zaurus キーボード、 Serial 関係、携帯電話関係、PocketPC の節の加筆を取り込み。mobilix.org を tuxmobil.org に書き換え。IrLAN 関係にメンテナンスなしの注記を挿入 (内容は削除せず)。

### シリアル赤外線ポートスニファ

#### Gerd Knorr さんによるスニファ

このプログラムは Gerd Knorr さんから提供を受けたものです。 これを用いてプロトコルの細部を見るため IrDA を通して行われる通信を表示することができます (ソース中の ttyS1 は必要に応じて変更してください)。

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <ctype.h>
    #include <sys/types.h>
    #include <sys/time.h>
    #include <sys/ioctl.h>

    #define BUFSIZE 1024

    int
    read_and_print(int fd, int sec, int usec)
    {
        int         rc,l,i;
        char        buf[BUFSIZE+1];
        fd_set      set;
        struct timeval  tv;

        if (sec || usec) {
        FD_ZERO(&set);
        FD_SET(fd,&set);
        tv.tv_sec  = sec;

        tv.tv_usec = usec;
        if (0 == select(fd+1,&set,NULL,NULL,&tv))
            return -1;
        }

        switch (rc = read(fd,buf,BUFSIZE)) {
        case 0:
        printf("EOF");
        exit(0);
        break;
        case -1:
        perror("read");
        exit(1);
        default:
        for (l = 0; l < rc; l+= 16) {
            printf("%04x  ",l);
            for (i = l; i < l+16; i++) {
            if (i < rc)
                printf("%02x ",buf[i]);
            else
                printf("-- ");
            if ((i%4) == 3)
                printf(" ");
            }
            for (i = l; i < l+16; i++) {

            if (i < rc)
                printf("%c",isalnum(buf[i]) ? buf[i] : '.');
            }
            printf("\n");
        }
        break;
        }
        return rc;
    }

    void
    setlines(int fd, int rts, int dtr)
    {
        int lines = 0;

        if (rts) lines |= TIOCM_RTS;
        if (dtr) lines |= TIOCM_DTR;

        ioctl(fd,TIOCMSET,&lines);
    }

    int main(int argc, char *argv[])
    {
        int         ser,i;
        struct termios      saved_attributes,tattr;
        struct winsize      win;
        char        buf[16];

        if (-1 == (ser = open("/dev/ttyS1",O_RDWR))) {
        perror("open /dev/ttyS1");
        exit(1);
        }

        /* Set the terminal mode */
        tcgetattr (ser, &tattr);
        cfmakeraw (&tattr);
        cfsetospeed (&tattr,B9600);
        cfsetispeed (&tattr,B9600);
        tcsetattr (ser, 0, &tattr);

        setlines(ser,0,0);
    #if 0
        tcsendbreak(ser,0);
    #endif

        /* main loop */
        fprintf(stderr,"setup done\n");
        while (-1 != read_and_print(ser,30,0)) {
        usleep(100000);
        }

        return 0;
    }

#### sersniff

Jonathan McDowell さんの書いた sersniff は 2 つのシリアルポート間をトンネル / sniff する簡単なプログラムです。 このプログラムは Nokia 9000i 携帯電話機と Windows だけで動作する Nokia の NServer ソフトウェアの間で使われているプロトコルを解析するツールとして作成されたものです。

### 赤外光源と目の安全について

この節は、Linux/IrDA メーリングリストでやりとりされた意見をまとめたものです。 医学的にしっかりした根拠があるものではありませんし、もっと良い事実や根拠のある情報をお持ちの方はこの HOWTO に貢献をお願いします。

IrDA の仕様では、IrDA デバイスの通信範囲は目の安全のために 1m に抑えられていると記載されています。 これ以外にも、この制約が課されている理由には、消費電力と IR の混信などがありそうです。 基本的に赤外線が目に危険なのは、赤外線が目に見えないため、眩しい IR 光源から虹彩を守るために瞳孔が閉じないためです。 これは紫外線で雪盲になるのと同じ状況ですが、紫外線に比べて赤外線は波長が長いため、赤外線の光のエネルギーの危険性は紫外線よりずっと小さなものです。

ウェブ上で見つけることができた唯一の法的規制と医学的なアドバイスは、 熱源電球の赤外線放射に関するものと、IEC 825-1 (CENELEC EN60825-1) の溶接手順に関するものでした。 これらの記載によると、恐らく IrDA デバイスの放射する赤外線は恐らく害がないことを示唆するものと思われます。 なぜなら、IR LED の出すピーク出力 (約 300mW) は医学用の赤外線熱源電球の出す出力よりも数桁低いためです。 このような熱源電球では目の保護眼鏡を付けることが想定されていますので、例えば 1000 個の赤外線 LED が同時に発行するところを見つめる場合には、同様に保護眼鏡を付ける必要があるでしょう。 赤外線の影響は主に熱であり、紫外線の場合のような生化学的な影響や破壊ではありません。 但し、Hewlett-Packard 社の HP Omnibook 800 の説明書には IR LED を直接見ないようにとの但し書きがあります。

上で述べたようにここの議論は IR LED と 赤外線ランプの仕様に関するデータから仮定した推定と常識に基づいたものに過ぎません。 もしよりよい医学的知識を持った方がここに付け加えることができるならば、是非ともお願いします。

### 著作権、免責、商標

訳注: この章は著作権関係の規定であるため、原文を残します。

#### 免責と商標

This is free documentation. It is distributed in the hope that it will be useful, but without any warranty. The information in this document is correct to the best of my knowledge, but there's a always a chance I've made some mistakes, so don't follow everything too blindly, especially if it seems wrong. Nothing here should have a detrimental effect on your computer, but just in case I take no responsibility for any damages incurred from the use of the information contained herein.

これはフリードキュメントです。この文書は有用であることを希望して配布されてはいますが、無保証です。 この文書内の情報は私の力の及ぶ範囲で正確なものですが、間違いを犯している可能性も常にありますので、無批判に信じ込まないでください。 特に間違っていそうに思える箇所には。 ここに書かれている内容であなたのコンピュータに被害が出るとは思っていませんが、一応ここに書かれている情報によって損害が発生したときも、私はその責任を負わないことを明記しておきます。

Though I hope trademarks will be superfluous sometimes (you may see what I mean at Open Source Definition ), I declare: If certain words are trademarks, the context should make it clear to whom they belong. For example "MS Windows NT" implies that "Windows NT" belongs to Microsoft (MS). "Mac" is a trademark by Apple Computer. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and I was aware of a trademark claim, the designations have been printed in caps or initial caps. All trademarks belong to their respective owners.

商標の記載が不必要になることを希求してはいますが、 (どういうことかは Open Source Definition に記載があります) ここで、特定の語が商標ならば、内容からその権利者が明らかとなるようにしたことを宣言しておきます。 例えば、"MS Windows NT" は "Windows NT" が Microsoft(MS) に属する商標であることを示しますし、"Mac" は Apple Computer Inc. の商標です。 製造者および販売者が商品を識別するために付けた名称は、多くの場合商標です。 そのような商品名がこの文書に現れた際に、私がそれが商標であると気がついている場合には、大文字ないしは先頭が大文字を使っています。 すべての商標は、その所有権者に属します。

#### 著作権

For all chapters permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being "Preface" and "Credits", with the Front-Cover Texts being "Linux Infrared HOWTO", and with the Back-Cover Texts being the section "About the Document and the Author". A copy of the license is included in the section entitled "GNU Free Documentation License".

本文書のどの章も複製、配布および変更が GNU Free Documentation License バージョン 1.1 以降の規定に従う限り、許諾されます。GNU GNU Free Documentation License は Free Software Foundation により発行されています。本文書の不変部は 「Preface」と 「Credits」であり、表紙テキストは “Linux Infrared HOWTO” で、裏表紙テキストは “About the Document and the Author” です。ライセンスの写しが “GNU Free Documentation License” に収録されています。

#### GNU Free Documentation License - GFDL

訳注: GFDL は英語が原本となるため、訳しません。訳は GNU Project のページ等をご覧下さい。

Version 1.1, March 2000

Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

##### 0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

##### 1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

##### 2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

##### 3. COPYING IN QUANTITY

If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

##### 4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

C. State on the Title page the name of the publisher of the Modified Version, as the publisher.

D. Preserve all the copyright notices of the Document.

E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

H. Include an unaltered copy of this License.

I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

##### 5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

##### 6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

##### 7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

##### 8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

##### 9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

##### 10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See copyleft.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

#### 日本語訳について

誤字・脱字・誤訳等は <JF@linux.or.jp> までお知らせください。

- 翻訳：
- かねこ <skaneko_at_a2.mbn.or.jp>
- 校正：
- 中野さん <nakano_at_apm.seikei.ac.jp>

翻訳履歴:

2002-04-02

  初版: JF にリリース

2002-11-15

  原版の v3.4 に追従。訳注を脚注に変更。ほか細かい修正。