18.3. シリアル端末

原作: Sean Kelly 28 July 1996

訳: 中根 雅文

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

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

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

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

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

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

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

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

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

詳しくは、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/ttysgetty タイプの設定をする際は、 端末側の通信 パラメータの設定が、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番目のフィールドには、 そのポートのター ミナルタイプのデフォルトを指定します。 ダイアルアップ用のポートの場合 は、 ユーザがどのタイプの端末あるいは 通信ソフトを利用してダイアルアップ してくるかは分からないので、unknowndialup を記述するの が一般的です。一方、 直結された端末の場合、ターミナルタイプが変わるこ とはありませんから、 このフィールドには実際のターミナルタイプを記述し ます。

一般に、ユーザは .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 アカウントが不正に利用された場合に、 その経過を調査 する上で二つの記録を利用できるようになります。 loginsu コマンドは、共にシステムのログに記録を残します (また、 ログイン は 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)” に変更してください。