FreeBSD ハンドブック
Prev | Chapter 18. シリアル通信 | Next

# 18.3. シリアル端末

原作: Sean Kelly `<kelly@ad1440.net>` 28 July 1996

訳: 中根 雅文 `<max@FreeBSD.org>`

シリアル端末を利用することで、 コンピュータのコンソールのそばにいないと きや、 手近にネットワーク接続されているコンピュータがないときでも、 FreeBSD の機能を便利に、かつ安価に利用することができます。 ここでは、FreeBSD にシリアル端末を接続する方法を解説します。

## 18.3.1. 端末の種類と利用方法

もともと Unix システムにはコンソールがありませんでした。 ユー ザはコンピュータのシリアル ポートに接続された端末からログインして プログラムを利用していました。 ちょうどモデムと通信ソフトを使ってリモート のコンピュータにログインし、テキスト ベースのプログラムを利用するのと よく似ています。

最近の PC は、 高品質の画像を表示できるコンソールを搭載していま すが、 ほとんどすべての Unix 系 OS には未だにシリアル ポートを使ってログ インするための機能があり、FreeBSD でもこの機能がサポートされています。 現在使用されていないシリアル ポートに端末を接続することでシステムに ログインし、 通常はコンソールや Xウィンドウ システムの `xterm` のウィ ンドウ上で起動しているテキスト ベースのプログラムであれば何 でも利用することができます。

職場での利用ということで考えるならば、FreeBSD が動作しているコンピュー タに接続された何台ものシリアル端末を 各社員の机に配置するというようなこ とが可能です。また、 家庭での利用方法としては、余っている古い IBM PC や Macintosh を FreeBSD が動いているパワフルなコンピュータの端末として利 用することができます。普通ならシングルユーザのコンピュータを、 パワフ ルなマルチユーザのシステムに変えることができるのです。

FreeBSD では、以下に挙げる3種類の端末が利用できます。

- ダム (dumb) 端末

- PCを利用した端末

- X 端末

以下は、それぞれについての解説です。

### 18.3.1.1. ダム端末

ダム端末は、シリアルライン経由でのコンピュータとの接続専 用のハードウェアです。ダム端末は、 テキストの送受信および表示ができる 程度の計算能力しかもっていないので、“dumb” (間抜け) というように呼ば れています。 この端末上でプログラムを実行することはできません。テキスト エディタ、コンパイラ、E-mail、 ゲームなどなどのプログラムを実行するのは、 ダム端末を接続しているコンピュータの方です。

Digital Equipment社の VT-100 や、Wyse社の WY-75 を初めとして、多くのメーカが何百種類もの ダム端末を作っています。ほとんどどんな種 類のダム端末でも FreeBSD に接続して使用できます。さらに、高性能の端 末の中には画像を取り扱えるものもありますが、 限られた数のソフトウェア パッケージしかこういった機能には対応していません。

ダム端末は、X ウィンドウ システムで提供されるようなグラ フィックアプリケーションを必要としない 職場で広く用いられています。

### 18.3.1.2. PC を端末として利用する

ダム端末 がテキストの表示およ び送受信の機能をそなえただけのものならば、言うまでもなく、 どんなPC もダム端末になり得ます。 必要なものは適切なケーブルと、そのPCの上 で動作する端末エミュレーション を行うソフトウェアのみです。

このような環境は、家庭においてよく利用されます。 たとえば、あなたの同居 人が FreeBSD のコンソールを専有している時などに、あまりパワーのないコ ンピュータを FreeBSD システムにシリアル端末として接続し、 その端末上で テキストだけを用いる作業をおこなうことができます。

### 18.3.1.3. X 端末

X 端末は、既存のものの中で最も洗練された種類の端末といえ ます。X 端末は、たいていの場合シリアル ポートではなく、 イーサネッ トのようなネットワークを利用した接続をおこないます。また、 アプリケーション の利用においても、 テキストベースのものだけでなく、X アプリケーション の利用が可能です。

ここでは、参考までに 端末について紹介しただけで、X 端 末の設定や利用についての解説は おこないません。

## 18.3.2. ケーブルとポート

シリアル端末を FreeBSD システムに接続するためには、 適切なケー ブルと、 端末を接続するためのシリアルポートが必要です。ここでは、これ らについて説明します。もし既にあなたの利用したい端末と、 その端末 を接続するためのケーブルについてよく理解していれば、 設定 の章まで読み飛ばしてください。

### 18.3.2.1. ケーブル

端末の接続は、シリアルポートを利用します。そこで、端末を FreeBSD システムに接続するためには、シリアルケーブル (RS-232C ケーブ ルとも呼ばれています) が必要となります。

シリアルケーブルには2種類のケーブルがあります。 どちらの種類の ケーブルを使わなければいけないかは、 どんな端末を接続したいかによります。

- もし、PC を端末として利用したい場合は、ヌルモデム ケーブル (リバースケーブルもしくは クロスケーブルと呼ばれることもしばしばあります) を使用してください。ヌルモデムケーブルは、 コンピュータ同士や端末同士を接続するために用い られるケーブルです。

- もし、本物の端末を接続するのであれば、その端末につい てきたドキュメントからどのようなケーブルを 使うべきか調べてください。も しドキュメントがない場合は、 まず ヌルモデム ケーブルを試してみて、うまくいかない場合は スタンダード ケーブル (しばしばストレートケーブルと呼 ばれます) を試してみてください。

また、端末側と FreeBSD 側の 両方の シリアルポート の形状が、 あなたが使用しようとしているケーブルについているコネクタの形 状と一致していなければなりません。

#### 18.3.2.1.1. ヌルモデムケーブル

ヌルモデムケーブル (またはリバースケーブルあるいはクロ スケーブル) は、たとえば “signal ground” 信号のように、いくつかの信 号はそのまま通しますが、 他の信号は途中で入れ替えて通します。たとえば、“send data” 信号のピンは、反対側のコネクタの “receive data” 信号の ピンと繋がっています。

自分で使うケーブルは自分で作りたいということであれば、 以下にター ミナルを接続する際に推奨される ヌルモデムケーブルの結線を示しておきま す。この表では、 RS-232C の信号線の名前と、DB-25 コネクタ上のピンの番 号を示しています。

Signal | Pin # |  | Pin # | Signal
--- | --- | --- | --- | ---
TxD | 2 | connects to | 3 | RxD
RxD | 3 | connects to | 2 | TxD
DTR | 20 | connects to | 6 | DSR
DSR | 6 | connects to | 20 | DTR
SG | 7 | connects to | 7 | SG
DCD | 8 | connects to | 4 | RTS
RTS | 4 |  | 5 | CTS
CTS | 5 | connects to | 8 | DCD

> Note: DCD と RST では、コネクタ内部でピン4を5に接続し、 そして逆側のコネクタのピン8と接続します。

#### 18.3.2.1.2. スタンダード RS-232C ケーブル

スタンダードシリアルケーブル (またはストレートケーブル) の場合は、すべての RS-232C 信号をそのまま通します。つまり、片方の “send data” 信号のピンは、逆側の “send data” 信号のピンと繋がっています。モデムを FreeBSD に接続するときや、一部の端末を接続するときにこのタイプの ケーブルを使用します。

### 18.3.2.2. ポート

シリアルポートは、FreeBSDが動作しているホスト コンピュータと端 末の間でデータのやりとりを行うために用いるデバイスです。 ここでは、現在存在するポートの種類と FreeBSD でのポートのアクセス方法について解 説します。

#### 18.3.2.2.1. ポートの種類

シリアルポートには何種類かのものがあります。 ケーブルを購 入したり自作したりする前に、 そのケーブルのコネクタの形状が端末および FreeBSD システムのポートの形状と一致していることを 確認してください。

ほとんどの端末は DB25 ポートを搭載しています。 FreeBSDが動作しているも のを含めて、PCは DB25 または DB9 ポートを搭載しています。マルチポート のシリアルカードの場合は、RJ-12 や RJ-45 のポートを搭載しているかもし れません。

利用されているポートの種類に関しては、 ハードウェアについてきたドキュメ ントを参照してください。 また、多くの場合、ポートの形状から判断すること もできるでしょう。

#### 18.3.2.2.2. ポートの名前

FreeBSDでは、`/dev` ディレクトリ内のエントリを介 してシリアルポートへのアクセスがおこなわれます。 2種類の異なったエン トリがあります。

- 着信用のポートの名前は、 `/dev/ttyd`x`` ( `x` は 0から始まるポート番号) となっています。一般に端末の接続には 着信用ポートを用います。着信用のポートでは、 シリアルラインのデータ キャリア検出 (DCD) 信号がオンになっている必要があります。

- 発信用のポートの名前は、 `/dev/cuaa`x`` となっています。 発信用のポートは普通モデムの接続に用い、端末の接続には 利用しません。ただ、 ケーブルまたは端末がキャリア検出信号を使えない タイプのものの場合は、 発信用のポートを使うとよいでしょう。

詳しくは、sio(4) のマニュアルをご覧ください。

たとえば、端末を一つ目のシリアルポート (DOS でいうところの `COM1`) に接 続したとすると、`/dev/ttyd0` がこの端末を指すことになります。また、 二つ目のシリアルポート (`COM2`) ならば `/dev/ttyd1` となり、 以下この形式のデバイスエントリを使います。

各シリアルポート、 特にマルチポートのシリアルカードを利用する ために、kernel の設定をおこなう必要がある場合がありますので、注意してくだ さい。詳しくは、FreeBSD カーネルのコンフィグレーション をご覧ください。

## 18.3.3. 設定

ここでは、端末からのログインを可能にするために必要な FreeBSD 側の設定について解説します。 既に端末を接続するポートが利用できるように kernel の設定をおこない、端末が接続されているものと考えて、解説を進め ます。

簡単に言えば、プロセス管理や初期化をおこなっている `init` プロセス に対して、 ログイン名を読み込み `login` プログラムを起動している `getty` を実行するように指示します。

これをおこなうには、`/etc/ttys` の内容を編集する必要があります。まず、`su` コマンドで root になって、`/etc/ttys` に以下の 変更を加えてください。

1. 端末を接続するポートの `/dev` のエントリが含ま れている行がまだ存在しなければ、これを `/etc/ttys` に追加してく ださい。

2. `/usr/libexec/getty` が対象となるポートに対して 実行されるように指定してください。また、 `/etc/gettytab` ファイ ル内の適切な `getty` タイプのエントリを指定してください。

3. デフォルトのターミナルタイプを指定してください。

4. 対象となるポートを “on” に設定してください。

5. そのポートが “secure” であるかどうかを指定してください。

6. `init` に `/etc/ttys` を読み込みなおさせてく ださい。

また、必要に応じて `/etc/gettytab` を変更し、上の 2で使用する `getty` のエントリを追加してください。 このドキュメントではこの方 法については特に解説しませんので、gettytab(5) および getty(8) のマニュアルをご覧ください。

以下では、上のステップについて詳しく解説します。 実例を用いて、何をす べきかを解説していきます。Wyse-50 と、 古い IBM の 286 マシン上で通信 ソフト Procomm を使って VT-100 エミュレーションをおこなっているものを端 末の例として紹介します。また、Wyse は 2番目のポートに、 286マシンは 6 番目のポート (マルチポートのシリアルカード上のポート) に接続します。

`/etc/ttys` について、 より詳しくは、ttys(5) のマニュアルをご覧 ください。

### 18.3.3.1. `/etc/ttys` へのエントリの追加

既にエントリがある場合を除いて、まず初めに `/etc/ttys` にエントリを追加しなければいけません。

`/etc/ttys` には、 FreeBSDシステム上のログインを許可するすべての ポートを記述します。たとえば、一つ目の仮想コンソール `ttyv0` のエン トリもこのファイルにあります。このエントリのおかげで、 コンソールからの ログインが可能になっています。 このファイルには、他の仮想コンソール、シ リアルポートおよび仮想端末のエントリも含まれています。 端末を接続する 場合は、そのポートの `/dev` のエントリを、 `/dev` の部分 を省略して記述します。

FreeBSD のインストール当初の状態では、 `ttyd0` から `ttyd3` までの、初めの四つのシリアルポートのエントリが `/etc/ttys` に記述され ています。 これらのポートのいずれかに端末を接続する場合は、新たなエント リを追加する必要はありません。

ここで紹介している例では、 既にファイルにエントリが存在する 2番目のシリ アルポート、 `ttyd1` に Wyse-50 を接続しています。 一方、6番目のシ リアルポートに接続する 286マシン用のエントリは、新たに追加してやらな ければなりません。以下に、エントリを追加した後の `/etc/ttys` か ら抜粋して示します。

    ttyd1   "/usr/libexec/getty std.9600"   unknown off secure
    ttyd5

### 18.3.3.2. `getty` タイプの指定

次に、 端末からのログインを処理するプログラムの指定をおこな います。 FreeBSDでは、標準的には `/usr/libexec/getty` をこの目的 で利用しています。`login:` プロンプトを送り出しているのは、このプロ グラムです。

`getty` プログラムは、 コマンドラインパラメータとして、 `getty` タイプをとります。ただし、 このパラメータは必須ではあ りません。 `getty` タイプは、 ボーレートやパリティといった、接続され た端末の特徴を表すものです。`getty` プログラムは、与えられた `getty` タイプに対応したこれらの特徴を `/etc/gettytab` から 読み込みます。

ファイル `/etc/gettytab` には、 新旧の端末に関する多数のエントリ が記述されています。 ほとんどの場合、`std` という文字列で始まる名前 のエントリを使えば、 接続された端末に対してログインセッションを提供す ることができます。これらのエントリを利用した場合、 パリティは無視されま す。110 bps から 115200 bps までのボーレートに対応した `std` のエン トリがあります。当然、 新たなエントリを追加することも可能です。 gettytab(5) のマニュアルに、 さらに詳しく解説されています。

`/etc/ttys` の getty タイプの設定をする際は、 端末側の通信 パラメータの設定が、getty タイプのものと一致していることを確認し てください。

紹介している実例では、Wyse50 はパリティなし 38400 bps で接続していま す。また、286 マシンの方は、パリティなし 19200 bps の接続です。以下は、 この段階でのこの二つの端末に関する `/etc/ttys` の設定です。

    ttyd1   "/usr/libexec/getty std.38400"   unknown off secure
    ttyd5   "/usr/libexec/getty std.19200"

ここで、実行するプログラムを指定している 2番目のフィールドが、ダブルクォー テーションに囲まれていることに注意してください。 こうしないと、`getty` のタイプの指定が、 つぎのフィールドとして判断されてしまう可 能性があるので、 十分注意することが必要です。

### 18.3.3.3. デフォルトのターミナルタイプの指定

`/etc/ttys` の 3番目のフィールドには、 そのポートのター ミナルタイプのデフォルトを指定します。 ダイアルアップ用のポートの場合 は、 ユーザがどのタイプの端末あるいは 通信ソフトを利用してダイアルアップ してくるかは分からないので、`unknown` や `dialup` を記述するの が一般的です。一方、 直結された端末の場合、ターミナルタイプが変わるこ とはありませんから、 このフィールドには実際のターミナルタイプを記述し ます。

一般に、ユーザは `.login` や `.profile` などのファイル内で `tset` コマンドを使って、 ターミナルタイプをチェックし、必要ならば ターミナルタイプの入力を求めるプロンプトを 表示するようにします。この とき、 `/etc/ttys` の中でターミナルタイプが指定されていれば、 このプロンプトを表示せずに先に進むことが可能です。

FreeBSD 上で、どのターミナルタイプを利用できるかは、 `/usr/share/misc/termcap` をご覧ください。 このファイルには、お よそ 600 のターミナルタイプが定義されています。 必要ならば、新たなエン トリを追加することも可能です。詳しくは termcap(5) のマニュアルをご覧ください。

紹介している例では、Wyse-50 のターミナルタイプは Wyse-50 です (もっ とも他のタイプをエミュレートすることも可能ですが、ここでは Wyse-50 モー ドで使用します)。また、286マシン上では Procomm が VT-100 エミュレー ションをおこなうように設定されています。以下が、まだ未完成の `/etc/ttys` の関連部分です。

    ttyd1   "/usr/libexec/getty std.38400"   wy50  off secure
    ttyd5   "/usr/libexec/getty std.19200"   vt100

### 18.3.3.4. ポートを利用可能にする

`/etc/ttys` のつぎのフィールド、 つまり 4番目のフィー ルドは、 そのポートをアクティブにするかどうかの設定です。 このフィールド に `on` を指定すると、 `init` プロセスが2番目のフィールドに書かれ たプログラム、`getty` を実行し、 ログインのためのプロンプトを送り出 すようになります。 このフィールドに `off` を記述すると、 `getty` は起動されず、 よってこのポートからのログインもできなくなります。

ということで、当然このフィールドには `on` を指定します。以下が `/etc/ttys` です。それぞれのポートを `on` にしました。

    ttyd1   "/usr/libexec/getty std.38400"   wy50  on secure
    ttyd5   "/usr/libexec/getty std.19200"   vt100 on

### 18.3.3.5. ``secure'' なポートの指定

とうとう最後のフィールドの設定です。 (実際にはここでは触れ ませんが、 オプショナルな`window` の設定のフィールドも存在するので、 ほぼ最後のフィールドといった方が正確かもしれません) 最後のフィールド では、 そのポートが安全かどうかを指定します。

ここで、“安全” なポートとはどういうポートのことでしょう?

これは、root のアカウント (または、ユーザ ID が 0 のアカウント) がロ グインしてもよいポートということです。 安全でないポートでは、root のロ グインは許可されません。

では、どのように安全なポートとそうでない ポートを使えばよいでしょう?

ポートを安全ではないとすることで、 そのポートに接続された端末からは、root のログインを禁止することができます。FreeBSDシステムの root のパス ワードを知っている人は、 まず一般ユーザとしてログインしなければなりませ ん。 スーパユーザの特権を得るためには、そのうえで `su` コマンドを 利用しなければいけません。

これによって、root アカウントが不正に利用された場合に、 その経過を調査 する上で二つの記録を利用できるようになります。 `login` と `su` コマンドは、共にシステムのログに記録を残します (また、 ログイン は `wtmp` にも記録を残します。 )。

ポートを安全なものとして指定すると、その端末からの root のログインが可 能になります。root のパスワードを知っている人は、単に root としてログ インできます。この場合は、当然ログインの記録や `su` コマンドのログ は残りません。

では、どちらを使うべきでしょうか?

単純に “insecure” を使うのがよいでしょう。 公共の場所にある訳ではな い端末や、 鍵のかかったドアの内側にある端末にも “insecure” を指 定する方がよいでしょう。 スーパユーザの特権が必要な場合でも、ログイ ンして `su` を実行するのは、 ごく簡単なことなんですから。

以下に、ようやく完成した `/etc/ttys` のエントリに端末の場所を表 すコメントを追加したものを示します。

    ttyd1   "/usr/libexec/getty std.38400"   wy50  on insecure # Kitchen
    ttyd5   "/usr/libexec/getty std.19200"   vt100 on insecure # Guest bathroom

### 18.3.3.6. `init` にファイル `/etc/ttys` の再読み 込みをさせる

FreeBSD をブートすると、最初に起動されるプロセス、 `init`が `/etc/ttys` を読み込んで、記述されているプログラムを利用可能な ポートに対して実行し、 ログインプロンプトを送り出させます。

`/etc/ttys` の編集が終わった後、 `init` に変更を認識させるた めに、わざわざ FreeBSD をブートしなおしたくはないでしょう。このような 場合のために、`init` は、 `SIGHUP` (hangup) シグナルを受信すると、 `/etc/ttys` を読み込みなおすようになっています。

`/etc/ttys` の変更を保存したら、 以下のようなコマンドを実行して、`init` に対して SIGHUP を送信します。

    # kill -HUP 1

(`init` プロセスのプロセス ID は 常に 1です)

すべての設定が正しくおこなわれ、 すべてのケーブルがただしく接続されてい て、 かつ端末の電源が入っていれば、 端末にはログインプロンプトが表示され ているはずです。これで、 これらの端末からの最初のログインの準備が完了で す!

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

細心の注意を払って設定をおこなっても、 ときには端末の接続がう まくいかない場合があるでしょう。以下に、 よく見られる問題とその解決方法 を示します。

ログインプロンプトが表示されない

  端末の電源が接続され、 スイッチが入っていることを確認してください。もし、PC を端末として利用している場合は、 通信ソフトが適切なシリアルポー トを利用する設定になっているかどうか確かめてください。

  ケーブルがしっかりと端末と FreeBSDが動作しているコンピュータの両方に接続され ていることを確認してください。また、 正しい種類のケーブルを利用している か確かめてください。

  端末と FreeBSD の間の通信速度とパリティの設定が一致していることを確認 してください。 出力をモニタに表示するタイプの端末の場合は、モニタ のコントラストと明るさの設定を確認してください。また、 出力が印刷 されるタイプの端末の場合は、 紙とインクが十分にあるかどうかを確かめてく ださい。

  `getty` が動いていて、 端末を認識していることを確認してください。以 下のコマンドで動作中の `getty` プロセスのリストを得ることができます。

      # ps -axww|grep getty

  その端末に対する `getty` の情報が表示されるはずです。たとえば、以下 の表示例は、`getty` は 2番目のシリアルポート (`ttyd1`) に対し て `/etc/gettytab` 中の `std.38400` のエントリを使って動作し ているということを示しています。

      22189  d1  Is+    0:00.03 /usr/libexec/getty std.38400 ttyd1

  もし、`getty` プロセスが一つも動いていないようであれば、 `/etc/ttys` の中で、 そのポートを利用可能にする設定をしたかどう か確かめてください。また、`kill -HUP 1` を確実に実行してください。

ログインプロンプトの代わりにゴミが表示される

  端末と FreeBSD の間の通信速度およびパリティの設定が一致していることを確 かめてください。また、`getty` プロセスの情報を調べて、適切な `getty` のタイプが使用されていることを確認してください。間違った getty タイプが使用されている場合は、 `/etc/ttys` を修正し てから、 `kill -HUP 1` を実行してください。

文字が重複して表示される、 入力したパスワードが表示される

  端末または通信ソフトの設定で、“半二重 (half duplex)” あるいは “ローカ ルエコー” となっているところを、“全二重 (full duplex)” に変更してください。

Prev | Home | Next
シリアル接続の基礎 | Up | ダイアルインサービス