次のページ 前のページ 目次へ

16. 端末の使用

16.1 はじめに

本章では端末インターフェースの制御に関することや、端末を使いながらセット アップを変更することなどについて述べます。端末のユーザによる画面制御や インターフェースの検査方法、また、デバイスドライバが提供する各種コマン ドの使い方について説明します (またはポインタを示します)。たくさんある アプリケーションプログラム、シェル、または豊富な Linux ユーティリティ の使い方については触れません。端末で普通に使われる 2 つのコマンドを示 します。

16.2 端末の起動

端末を動作させるには、もちろん電源を入れなければなりません。ログインプ ロンプトが現れなければ、何度か ``Return'' キーを叩いてみてください。そ れから、アカウント名をタイプして (そして Return か Enter を押す)、パス ワードプロンプトが現れたらパスワードを入力します (これもまた、Return か Enter を押す)。全て大文字でタイプしないようにしてください。そうする と、コンピュータは、端末が小文字を送れない古いタイプのものだと思って、 シリアルドライバは端末に大文字だけを送るように設定するでしょう。

何も起こらなければ、ホストコンピュータと端末が正常かどうかチェックして ください。ホストコンピュータがシャットダウン (電源オフ) していると、`` 電源オフ'' のコンピュータ側で文字をエコーするようにコンピュータの送受 信ピンが一緒に接続されている場合がありますので、端末のキーボードでタイ プした文字は画面上に現れるかもしれません。 トラブルシューティングをご覧ください。

16.3 端末 (シリアル) デバイスドライバ

コマンドライン上でタイプしたときに、シェル (Bash シェルのような) はタ イプした文字を読み、それに反応します。最初にタイプしたものは、オペレー ティングシステムの端末ドライバ部分へ送られます。ドライバは決った文字へ 変換します (例えば、Return キーで生成される ``Return'' 文字は、Linux ファイル内にある ``new-line'' 文字に置き換わる)。それはまたある制御コ ードも認識します。プログラムの実行を中断するために、^C をキーボードで タイプしたような場合です。そして普通はタイプした文字をエコーバックした りもします。 Stty は端末用のドライバの動作を設 定する (機能の一部や全部) を設定したり、無効にするために使います。

16.4 エディターの問題

いくつかの端末で emacs と vi の両方を使うには少々問題があります。

emacs と ^S, ^Q

ソフトウェアフロー制御を行なっているなら、emacs で ^S コマンドを使うと 画面が固まるでしょう。^Q コマンドはそれを解除します。これを避ける方法 は、emacs の構成を変更して、このキーを他のキーに割り当て直すことです。

vi とカーソルキー

vi はインサートモードから抜けるためのコマンドとしてエスケープキーを使 います。矢印キー (カーソルキー) を押せば、エスケープシーケンス (ESC で 初まる文字列) がホストに送られます。vi は ESC の 2 つの意味を区別しな ければいけません。利口な vi (このために設定された vim などの) は ESC と次のキーの時間間隔によって見分けることができます。もし間隔が短かけれ ばカーソルキーが押されたと判断します。さらに詳しいことを知りたければ、 vim で ``help cursor-keys'' を使ってください。

これは上記の問題を解決するまた別な方法です。VT 端末で左矢印キーは ESC [ D か ESC O D のどちらかを送ります。他の矢印キーは同じようなものです が、D の代りに A、B、C を使います。もし問題があれば、ESC [ D を選択し てください。というのは、他の手段で ``O'' は、vi で ``Open a line'' コ マンドとして解釈されるからです。``['' は、viでは矢印キーが押されたと解 釈されるはずです。ESC [ D は、``カーソルキー アプリケーションモード'' が設定されていないとき、送られるでしょう。ESC [ D は、通常はデフォルト なので、全てうまくいくはずです。多くの termcap に含まれる ``アプリケー ションモード'' を防止したい文字を除いては。エディターは起動時に端末に 対してこの文字列を送ります。それで問題が起こるのです。

この文字列は termcap コード ``ks'' (terminfo では smkx) があり、それは ファンクション (それと相対) キー (と矢印キーを含む) を有効にするという 意味です。アプリケーションはこれらのキーを有効にするために、``ks'' 文 字を端末へ送ります。誰かが termcap を書いたのは、アプリケーションがこ れらのキーを有効にしたいなら、``アプリケーションモード'' に移行すると いう理由からなんですが、これは ``アプリケーション'' の話であって、あな た望んでそうするわけではありません。

Linux コンソールには ``ks'' 文字がないので、コンソール上でこの落し穴に 引っかかることはありません。他の端末では、termcap (あるいは terminfo) の編集か、他の termcap エントリの使用が必要になるでしょう。``ks'' 文字 以外に、kd, kl, kr, ku などの送信する文字を termcap で宣言する必要があ ります。それから tic でインストールします。

vim (vi の改良版) で、ESC 0 D がうまく動くようにセットアップする方法 は、vim のヘルプ ``vt100-cursor-keys'' をご覧ください。``gitkeys'' と 使えば、カーソルキーを押したときに何が送られてるか確認できますが、エデ ィタの中から実行したときは、違ったものを送るかもしれません。

16.5 ls での間違った色表示

ls がカラー機能をエミュレートしようとして端末をおかしくさせてるなら、 その機能をオフにしましょう。ls --colorls--colour はどちらもカラー機能を使います。インストール の種類によっては、ls がデフォルトでカラーを使うように設定してあり ます。ls のエイリアスがないかどうか /etc/profile などを 調べてみてください。コンソールでのカラーの使い方や、端末を白黒で使う方 法については コマンド ls の例をご覧ください。

16.6 固まった表示 (端末のハング)

端末がハングする徴候は、端末上でタイプしたものが見えない (あるいは、何 もしないのに文字が表示される) という点です。もしタイプしたものが見えな ければ (あるいは何もしなければ)、データフローを再開するために ^Q とタ イプしてください (フロー制御での停止の場合です)。端末がハングするのは、
端末へバイナリを送ること や、 プログラムが異常終了したことが原因です。
どちらにも該当しないなら、あなたのプログラムにバグがあるか、端末との対 話が致命的に不正であるかのどちらかです。

実行中のプログラムを止めたいけど、普通の方法 (いくつかのプログラムは、 特別なキーを叩くと終了します) で止められないなら、他の端末から ``top'' か ``kill'' を使って終了させてみましょう。プロセスに終了するのを拒否 された場合、top から シグナル 9 を送信して強制終了させてみましょう。強 制終了のタイプ ``9'' は、おかしくなったインタフェースと同様にそこら辺 にあるテンポラリファイルを放りっぱなしにします。ログインシェルを kill しても、getty がまた起動して、新しいログインプロンプトが表示されるはず です。

Linux を使い初めたばかりの人達は Ctrl-S (^S) (または ``スクロール停止'' キーを無意識に押してしまい、謎の画面フリーズ騒ぎを起こします (けれど も、ソフトウェアフロー制御を使うなら、このキーが何であるか推測できま す)。まともに対話できる画面に戻すには、Ctrl-Q (^Q) を押します。従って フリーズしたときに、何でもキーをタイプすると、ファイルやなにかを壊すこ とになるでしょう。ハードウェアフロー制御を使う理由のひとつが、このよう な、画面フリーズを防止するためです。

16.7 おかしくなった端末インターフェース

ここでは、前ページの ``端末のハング'' と ``画面のフリーズ'' が混在した ケースについての話です。

徴候といくつかの修正

表示が正しく見えなくなる、タイプした文字が正しく表示されない (せいぜ い) 、あるいは、コマンドをタイプしても何も起こらないときに、端末インタ ーフェースがおかしくなってるはずです。時々、再度ログインし直すことで問 題を解決できます。こうするには、端末で動いている shell プロセスを kill します (あるいは、getty が動いていたら kill する)。他の端末からこれを 行います。一度 kill したら、新しい getty プロセスが起動しなおして、多 分画面の乱れはおさまってるはず。端末の電源を入れ直す (あるいはリセット する) ことでも直るかもしれません。

おかしくなる現象は、使用するプログラムのバグやハードウェアの故障 (通常 は使えているのに原因不明の故障)、あるいは間違った設定などです。もし順 調に動いていたのに突然不調になったのなら、あなたが何かしでかしたために インターフェースがおかしくなったのです。インターフェースをおかしくさせ る要因は 3 つあります。

端末にバイナリキャラクタを送る

あるエスケープシーケンスか制御文字が送られると、端末はその特性を変えま す。うっかりバイナリファイルを表示しようとして、その中に偶然そのような エスケープシーケンスが入っていたら、端末をおかしな操作モードにしてしま ったり、使用不能にさえしてしまうかもしれません。このようなことが起こら ないよう設計されたプログラムを使っていつもバイナリファイルを見たり、編 集するようにしなさい。ほとんどのエディタやページャはバイナリを扱えるの で、端末のインタフェースをおかしくさせることはないでしょう。いくつかの アプリケーションは「バイナリを編集できない」とあなたに伝えるメッセージ を表示するかもしれません。でも、``cat ....'' や ``cp .... /dev/tty..'' (.... はバイナリファイル) を使うと、バイナリを端末に送ることになり、 おかしなことが起こるでしょう。

おかしなことは、通信プログラムを使ってリモートコンピュータがあなた の画面にバイナリを送りつける時も起こり得ます。そのことに準備してお く多くの方法があります。想定できる ASCII ファイルでさえ、求めていない 制御コードを含んでいるかもしれません。

この問題を修復するには端末をリセットします。``reset'' (壊れているかも しれません) か ``setterm -reset'' (もちろん <return> キーを押します) のどちらかをタイプすればよいのです。これはリセット文字を terminfo エン トリから端末に送ります。正しい設定が端末内に保存されていれば、その時に 特別なキーを (おそらく設定モードの時に) 押すことで設定が修復できるはず です。それから、端末を設定するのなら、初期化文字を送るために ``reset'' を使う必要がまだあるでしょう。

``reset'' コマンドは、``clocal'' のセットが必要な端末を壊しているよう なので、``reset'' は ``clocal'' を未設定に変えてるように思えることに注 意してください。こういった場合、問題を修正するかわりに、 ``reset'' は 端末とホストコンピュータ間の通信を不可にすることで妥協しているだけです。 あなたはログインし直す必要があり、その時に getty が ``clocal'' をセッ トしてくれることを期待するはずです。幸運なら、問いかけなしでログインで きるでしょう。その他、ログインプロンプトの取得については 徴候といくつかの修正をご覧ください。``reset'' が必要なら事前に十分ためし、もし ``reset'' があなたをログアウトさせた り、うまく動かないようなら ``setterm -reset'' を使うべきです。私は 2000 年 3 月にバグレポートを提出してあるので、今なら ``reset'' は修正 されているはずです。

徴候といくつかの修正

異常終了したプログラム

大きなアプリケーションプログラム (エディタなどのような) は起動した時に stty の設定を変えるために一時的に stty コマンドを使います。これにより デバイスドライバは ``raw'' モードに変わるので、タイプした全ての文字は アプリケーションプログラムに直接送られます。ドライバからのエコーは禁止 されるので、アプリケーションプログラムから直接送られるすべてが画面で見 られます。したがって、大くの制御コマンド (^C のような) はそんなアプリ ケーションではうまく働きません。

そのようなアプリケーションを終了させるときには、アプリケーションプログ ラムは最初に、起動する前の状態に stty の設定を戻します。もしプログラム が異常終了したら (タイプした文字がいつまでたっても表示しないとき、こう なったと推定できます)、コマンドライン上で ``raw モード'' のままでしょう。

raw モードから抜けて、普通の stty の設定に戻すには ``stty sane'' とタ イプします。あなたは、``return'' の後にこうタイプして、 ``return'' で 終わらせなければなりません。しかし、``return'' キーは、 shell が待ちう けているような改行文字にもはや変換されないので、``return'' キーを叩い てもその役目を果たしません。そんな場合は、``return'' キーの代りに改行 コード (^J) をタイプしてみてください。``sane'' 端末インタフェースは、 正確には正常なものと同じものではありませんが、普通は働くでしょう。 ``stty sane'' はいろんな理由でおかしくなったインタフェースから抜け出す ためにも有効です。

16.8 特殊 (制御) 文字

あなたがキーボードでタイプする多くの制御文字は端末ドライバで ``捉えら れ'' て、様々なタスクを実行します。このような制御コマンドを見るには、 stty -a とタイプして、2行目 から 4 行目を見てください。これらは stty の man ページで簡潔に説明されています。stty コマンドを使用して、異った 制御キャラクタに変えられたり、無効にしたりします。しかし、あなたの端末での 制御キャラクタは以下に記述されているものとは異なっているかもしれません。 それらはコマンドライン編集や、割り込み、次のキャラクタを透過的に通過さ せたりするのに使います。

コマンドラインでの編集

端末ドライバにはコマンドライン編集用の 2、3 のコマンドがありますが、シ ェルにも組込みの本当のエディタ (``readline'' のような) があります。そ のようなエディタは通常はデフォルトで利用できるので、有効にするために何 かをする必要はありません。もし利用可能なら、以下のコマンドの多くを覚え る必要はありませんが、コマンドラインエディタはまだよく使われています。 一番覚えておかなければいけないのは、^C (割込み), ^D それとスクロールを 止める方法です。

割り込み (& Quit, Suspend, EOF, Flush)

スクロールの開始 / 停止

見たいものがスクリーンの下へスクロールして消えてしまいそうになったら、 (Xon-Xoff フロー制御が有効になっている) ホストへ ``停止'' 信号 (^S か Xoff) を送って、これを防ぐことができます。 再開するには ``開始'' 信号 (^Q か Xon) を送ってください。いくつかの端 末では、Xoff と Xon を交互に送るか、あるいはハードウェアフロー制御信号 を送ることができる (??) ``非スクロール'' キーがあります。以下は ctrl-S (^S) と ctrl-Q (^Q) が何をするかです。

もしスクロールの停止とクイットの両方をしたければ、^C を使いなさい。他 に何かするためにスクロールを止めたいが、プログラムの出力をメモリに保存 しておいて、後でスクロールを再開したいなら、^Z でサスペンドしておきな さい。

スクロールの代替手段としては、more 、less や most などのページャにパイ プを使って出力を送る方法があります。しかし、出力は標準出力でないかもし れませんが、ページャが認識しないエラー出力かもしれません。これを解決す るには、ページャが良好に働くように、リダイレクション ``2>&1'' を使う必 要があるかもしれません。後方にスクロールする必要がなければ、単に ^S と ^Q を使います。

PC コンソール (端末をエミュレートする) では、Shift-PageUp キーを使って 後方にスクロールします。^S を使って止められないほど早くスクロールする 場合に、頻繁に必要になるでしょう。一度後方へスクロールしたら、再び前方 にスクロールするには、Shift-PageDown を使います。

次のキャラクタを文字通りとりなさい

^V は,デバイスドライバ経由で直接タイプされた次のキャラクタ (普通は制御 キャラクタ) を、なんのアクションや割込みもなく送ります。エコーバックす ると ^C のように 2 つの ASCII キャラクタになります。

16.9 7 ビット端末で Latin-1 のファイルを見る

``テキスト'' ファイルには 8 ビットの Latin1 で書かれたものがあります ( 文字セットをご覧下さい)。Latin1 を表示できない端末をお使いなら (あるいは、Latin1 文字セットが選択肢がないなら)、リストの先頭につく小 丸は 7 ビットコードで表示されるでしょう。man ページ (それらは Latin1 です) を見る時は、小丸に近い何かに 7 などの文字をちゃんと変換するため に、man にオプション -7 を付けます。

16.10 インタフェースを点検する

これらのユーティリティプログラムは端末インタフェースについての情報を提 供します。

16.11 端末の設定変更

端末の設定は、普通は端末マニュアルのセットアップ手順を使ったインストー ルを一度するだけでよいのです。しかし、いくつかの設定は端末の使用中にも 変更されます。端末を使っていて、端末のインタフェースがおかしくなった時 に、通常は、 ``setserial'' のどんな ``stty'' コマンドも使わないでしょ う。でも、インタフェースの整合性を壊さないで、端末画面の外観や振舞いを やりかえる変更があります。時々、これらの変更はアプリケーションプログラ ムが自動的に行うので、あなたがする必要はありません。

そのような変更を行う直接的な方法は、端末のセットアップキー (または類す るキー) を使うことで、メニューを使って変更を行います。こうするには、端 末のことをよく知ってる必要があります。 その他の 3 つの方法はコンピュータから端末にエスケープシーケ ンスを送ることです。反転表示にするための 3 つの方法を以下に示します。

  1. setterm -reverse
  2. tput -rev
  3. echo ^[[7m

setterm

これは最も使いやすいコマンドです。長い名前のオプションを使います (しか し、その前には通常の -- は使いません)。どんなコードを送るか 決めるのに terminfo データベースを調べます。色、明るさ、行ラップ、キー ボードリピート、カーソルの形状などを変更できます。

tput

``tput'' コマンドは ``setterm'' に似ていますが、引数に普通の単語を使う 代りに、terminfo にある略称を使わなければなりません。多くの略称は簡単 すぎて、覚えにくいです。

echo

反転表示する ``echo ^[[7m'' の例では、^[ はエスケープキャ ラクタです。それをタイプするには ^V^[ とタイプしてください (あるい はエスケープキーに続いて ^V をタイプします)。この ``echo'' の方法を使 うには、端末のマニュアルか、terminfo あるいは termcap から、どんなコー ドが使われているか確認しなければなりません。コマンドライン上でタイプす るなら setterm や tput より簡単です。``echo ...'' は実行が早いので (な にも探さないから)、起動時に動くシェルスクリプトなどで使うのに適しています。

変更の保存

端末の電源を切ったとき、それまでの変更は消えてしまいます (セットアップ モードで、端末の不揮発性メモリに保存してなければの話です)。同じコマン ドをタイプせずにもう一度同じ設定にしたいなら、シェルスクリプトに書くか、 シェルファンクションを作ってください。そして変更したくなったら、それを 動かすのです。半永久的に変更する 1 つの方法は、ログインした時か、コン ピュータが起動した時に、毎回そのスクリプトを動かすことです。

16.12 端末をコンソールとして作る

これは ``シリアルコンソール'' とも呼ばれています。システムからの多くの メッセージは通常はコンソール (PC モニタ) だけに送られます。起動時にコ ンソールに送られるメッセージのいくつかは、ブートが成功した後で、コマン ド dmesg をタイプすれば端末で見ることができます。ブートが失敗した場合 は、端末はオペレーティングシステムなしで動作できませんから、これは役に 立ちません。端末をコンソールとして、コンソールに関する Linux のメッセ ージを受け取ることができるように Linux カーネルを再構築できます。残念 ながら、(PC が最初に起動した時にモニタに表示される) BIOS メッセージは 端末に表示できません (モニタには表示されますが)。

モニタやキーボードなしで PC を起動する人達がいます。通常 PC はキーボー ドやビデオカードなしでは起動しませんが、幾つかの BIOS なら可能です。`` コンソール リダイレクト'' 機能をサポートする BIOS を使用しているなら、 PC を起動する時に CMOS のメニューを使って BIOS のセットアップが必要です。

カーネル 2.2 以降

シリアルコンソールを作るための説明は、ソースコードと一緒に含まれるファ イル serial-console.txt にあります。通常、デバイス /dev/console は tty0 (PC コンソール) にリンクします。シリアルコンソール用として、本当のデ バイス (他へのリンクではない) である新しい /dev/console を作ります。そ してまた、/etc/lilo.conf にシルアルコンソールに関する文を書いて、 lilo を起動します。これは、カーネルがロードされる前に、あなたのコンソール をセットアップするために ``setserial'' と同じものを走らせる必要がある ためです。詳細は上記のドキュメントや man ページの lilo.conf をご覧くだ さい。

/etc/lilo.conf のサンプルです (ttyS0 用)。

prompt
timeout=50
boot = /dev/sda
vga = normal # 強制的に sane にする
install = /boot/boot.b
message = /boot/message
image = /vmlinuz
root = /dev/sda1
label = console
serial = 0,9600n8
append = "console=ttyS0"

カーネル 2.2 以前

1997 年 4 月の Linux Journal 誌には、Linux カーネルのパッチに関する記 事がありました。src/linux/drivers/char/console.c の最初に一組の #define を加えること。

#define CONFIG_SERIAL_ECHO
#define SERIAL_ECHO_PORT 0x2f8  /* シリアルポートアドレス */

以下は Linux Journal 誌の記事にはありませんでした。カーネル 2.+ (それ
と、それより前のバージョン ??) では、ボーレートの設定も必要です (9600 
以外にしたければ)。これら 2 行を見てください。

serial_echo_outb(0x00, UART_DLM); /* 9600 ボー */
serial_echo_outb(0x0c, UART_DLL); 

(設定したいボーレートに依り) 上記の 0x0c を変更してください :

115200 ボー: 0x01       19200 ボー: 0x06        2400 ボー: 0x30
 57600 ボー: 0x02        9600 ボー: 0x0c        1200 ボー: 0x60
 38400 ボー: 0x03        4800 ボー: 0x18

今、ブートする OS を選択するためにコンソールを使っているけど、本当は端 末から選択したいなら、/etc/lilo.conf に 1 行追加する必要があります。 lilo.conf の man ページを見て、``serial='' でサーチしてください。

モニタ (PC コンソール) 無しで Linux を実行できますか ?

はい、端末を使って、それを上記のコンソールのように働かせるこができます。 ほとんどの BIOS は PC の起動時にビデオカードから情報を取得しているので、 ビデオカードは必要なんじゃないかと思えます。BIOS は起動時にキーボード も必要としますが、あるいは、キーボードが不要なように設定できる BIOS の オプションがあるかもしれません。

16.13 マルチセッション

``screen'' パッケージは、コンソール上の仮想端末に似たマルチセッション をサポートします。 コンソール /dev/tty? をご覧ください。しかし、ページのイメージは、``ページ'' として端末内で はなく、ホストコンピュータ内に保存されますから、これは ``ページ'' では ありません ( ページをご覧ください)。

16.14 ログアウト

ログアウトするには、``logout'' か ``exit'' をタイプしてください。ある 状況ではログアウトの要求が拒否されますが、その理由を問うべきです。拒絶 された理由の一つは、ログインしたときと同じシェルを使っていなかったこと です。ログアウトの別な方法は ^D と押すことです。^D は他の目的にも使い ますから、ログアウトには使いたくないかもしれませんね。もし、bash シェ ルで IGNOREEOF が設定されていたら、^D はもはやログアウトには使えません。

16.15 端末間でのチャットやスパイ

同じホストコンピュータの端末からログインしている二人がお互いにチャット したいときは、``write'' か ``talk'' プログラムを使います。インターネッ トでは、チャットは ``lynx'' を使うかもしれません。

端末で他の誰かが何をしているかスパイするには、``ttysnoop'' プログラム を使います。``ttysnoop'' では二つの端末は同じ状態となり、各キーボード で何かをタイプすると両方の画面 (の同じ位置) に表示されます。それで、あ なたが本当にスパイをしていて、それを悟られたくなければ、何もタイプすべ きではない。

ttysnoop は、先生と生徒が各自の端末の前に並んで座ってるような場合の教 育用に使えます。先生は生徒が何をタイプしたか見て、生徒がミスタイプした 文字を正しくタイプすることで訂正できます。生徒は先生がタイプする文字を 見て、自分の端末で同じ文字をタイプします。それはあたかも二人の人間が同 時にキーボードに触れて一つの端末を使ってるようなものです。

``ttysnoop'' には欠点が一つあって、それは端末が全て同じ種類 (vt100 な どのように) のもの (か同じエミュレートのもの) が必要であるということで す。``Linux'' はコンソール (モニタ) でエミュレーションされ、 ``minicom'' は vt100 に似たエミュレーションなので、ttysnoop を 2 つの PC で使う なら、1 つのほうでは端末エミュレータとして ``minicom'' を実行します。

``DoubleVision'' は非フリープログラムで、ttysnoopq のようなものですが、 より高機能です。違った種類の端末を使用でき、端末のセッション情報を覚え ていて再現することができるので、前に何があったか監視することができます。 Web ページは http://www.tridia.com です。

16.16 シリアルポートの共有

端末の電源が入ったときに同じシリアルポートに接続したい別なシリアルデバ イス (プリンタ、モデムなど) をお持ちなら、他の装置に接続する以上のこと が必要です。これは主として getty プログラムかシェルが、ポートを監視し ていて、getty や シェル (あるいはシリアルドライバ) がそのポートに数バ イトを送ろうとするからです。getty は kill されても再起動して、(他の装 置に接続されている) シリアルポートに対してログインプロンプトを送りつづ けるでしょう。この問題を解決する 1 つの方法はランレベルを変更すること で、getty プログラムやシェルはそのポートに対して動作しなくなります。し かし、外部機器への出力ポートとして使われているポートに対してのみ行なう と、他の人が (端末にするつもりで) シェルや getty を同時に動作させて使 ってるポートかもしれないので危険なことです。

ランレベルの調整については、そのポートで getty プログラムが動くことの ない他のランレベルを作るようにしましょう。それから新しいランレベルを作 って、他のものにシリアルポートを使わせるようにしましょう。こうするには /etc/inittab を編集してチェックし、getty が動くランレベルに設 定します。例えば、``S1:23:respawn:/sbin/getty ...'' 行は、 (ttyS1 で) getty がランレベル 2 と 3 で動くことを意味します。現在、 (``3'' を消して) ランレベル 2 でのみ動作させるようにしていて、他のシル アルデバイスを使いたいなら、ランレベル 3 ヘ移行します。このように、他 のものがシリアルポートを使うようにするには、ランレベル 3 に移行するた めに、スーパーユーザが ``init 3'' とタイプするのです。``init 2'' とタ イプすれば、もとのランレベル 2 に戻ります。各ランレベルは初期化スクリ プトにより違った設定になっていますが、お望みの時にランレベルの変更がで きるので、各ランレベルで同じスクリプトが動作することに注意してください。 各 Linux ディストリビューションでのスクリプトやランレベルの動きはどの ようなものでしょう。 Debian では、説明が /usr/doc/sysvinit に ありますが、/usr/share/doc でも見ることができます。

ポートについての stty の設定にも問題があります。ポートが端末用に使われ ているときにある設定になっていますが、ランレベルを変更するために ``ini t 3'' が実行され、そのポートで getty が実行不可になると、オリジナル (ブートの時) の設定は復元されません。結局、``raw'' モードでポートを設 定することになります。これは、あなたが書いたスクリプトか、その次にその ポートで動くアプリケーションのどちらかで、stty を使って完全に設定し直 すことを意味します。シリアルポートから印刷するアプリケーションは完全に ポートの再設定を行なう能力はありません (/etc/printcap は一部の設定しか しないからです)。従って、あなたはスクリプトを書く必要があります。 stty による端末の設定は、シェルが動作するかどうか、``ログイン''プロンプト が表われるかどうかなどによって違います。そういう訳で、ランレベルを切り 替えた後の stty の設定は異なるのです。


次のページ 前のページ 目次へ