|
次のページ
前のページ
目次へ
14. コンピュータセットアップ (設定) の詳細端末のためにコンピュータをセットアップするには各種ファイルを編集します。 幸運な場合は、/etc/inittab を編集するだけですむでしょう。コンソール (または、作業用端末) で編集することになります。 14.1 Getty (/etc/inittab ファイル)コンピュータの起動時(あるいはランレベルを切り変えた時) に、シリアルポ ート上でログインプロセスが走った状態にしておくには、/etc/inittab ファ イル内に getty コマンドを書いておかなければいけません。getty は GET TT Y (端末) のことで、端末の状態を調べます。各端末には専用の getty コマン ドが必要です。どんな /etc/inittab ファイルにも、コンソール用の getty コマンドが少なくとも 1 つはあります。これを見つけて、その隣りに本当の 端末用の getty コマンドを追加してください。このファイルにはコメントに されたテキスト端末用の getty のサンプル行があるので、そこをコメントで はないようにして (先頭の # を消す)、2、3 の引数を変更する必要がありま す。 使用可能な引数は、あなたが使う getty によります。
使いたい getty を持っていない場合、他のディストリビューションを調べま す。もし、それが RPM や Debian の package ならば、alianプログラムを使 えば RPMにも、debにも、tar ballにも相互に変換できます。 (紹介した gett y たちの)ソースコードは Serial Softwareからダウンロードできるでしょう。 モデムコントロール線を使わないのなら (例えば、最小限の 3 つの端子 -- 送信、受信、信号グランド -- を使うなら)、``ローカル'' フラグ を使って getty に認識させなさい。このフォーマットは使用する getty に依存します。 Agetty (多分 getty という名前でしょう)/etc/inittab のサンプル行です。
S1 は ttyS1 を示します。23 は、ランレベル 2 か 3 で getty を起動するこ とを意味します。respawn は、getty が kill されたら自動的に再起動すると いうことです。/sbin/getty はgetty コマンドファイルです。 -L は、ローカ ル (モデムコントロールを無視する) という意味です。-h (例にはありませ ん) は、ハードウェアフロー制御を有効にします (stty crtscts と同じ)。 19200 はボーレートです。ttyS1 は /dev/ttyS1 のことです (MS-DOS での COM2)。vt102 は端末タイプで、getty が環境変数 TERM をこの値にセットします。 設定ファイルはありません。getty を編集した後で、コマンドラインで ``init q'' とタイプすれば、ログインプロンプトを見ることができます。 Agetty のパリティ検出
パリティの自動検出には時々問題があります。最初にログイン名をタイプした
後で、あなたをログインし終えるように、 様々な方法で、この ``ログイン'' ループに入るでしょう。一文字か二文字だ けのログイン名をタイプし、リターンキーを押したとしましょう。これらの文 字がパリティを検出するのに十分でないなら、パリティを検出する前にログイ ンが走るでしょう。端末に電源が入ってなくて、agetty が最初に走る時に接 続しなかったら、時々こういう問題が起ります。あなたがこのような ``ログ イン'' ループで立往生したら、解決は、agetty が ``タイムアウト'' で再度 走るまで 1 分程待つことです。 Agetty の 8 ビットデータにおけるパリティ残念ながら agetty はデータ長が 8 ビットでのパリティを検出できません。 (1999 年後半現在) agetty にはパリティの自動検出を無効にするオプション がないために、間違った検出をしてしまうことがあります。結果として、ログ イン処理を間違って伝えたり、誤ったパリティをセットしてしまうのです。し たがって、8 ビットデータとパリティを一緒に使うことは不適切だと思います。 getty (getty_ps の一部)(Greg Hankins 著 Serial-HOWTO(の古い版) を参考にしています)
望むなら、興味を引くようなものをログインバナーとして getty に表示させ ることができます。私の例ではシステムの名称とシリアルライン名を表示して います。以下のようなものを追加することができます。
/etc/gettydefs の編集が終ったら、構文が正しいことを次の方法で確かめら れます。
端末に接続されるシリアルポートの getty か uugetty の設定ファイル
(( シリアルポートで
init を再起動します。
この時点で、端末にログインプロンプトが表示されるはずです。プロンプトを 表示させるのにリターンキーを叩かないといけないかもしれません。 mgetty``m'' はモデムを表します。このプログラムは主にモデムのためであって、 1999 年半ばの時点ではテキスト端末とは相性が悪いようです。端末用のドキュ メントは貧弱なもので、端末で使う方法を理解するのに、モデム用のドキュメ ントを苦労して読みながら設定する必要があるでしょう。端末用の設定は、 /etc/mgetty/mgetty.config の最終行を見てください。mgetty に(多くの端末 で使われる) ソフトウェアフロー制御(Xon/Xoff) をサポートさせるには、 mgetty を再コンパイルしてください。将来は最初からサポートされるんじゃな いでしょうか。端末でもモデムと同じ getty を使えるならいいのですが、 megetty は目的に合うように少しいじる必要があります。 14.2 Stty と Setserialシリアルポートを設定するために ``stty'' コマンドと、``setserial'' コマ
ンド (の両方) があります。stty で設定する必要のある幾つか (あるいは全
て) は、 getty を通じて設定でき、setserial を使うこともないので、stty
と setserial のどちらも使わなくていいかもしれません。2 つのコマンド
(getty と setserial) は、違う個所を設定します。stty がほとんどやって、
setserial は割込みやポートアドレス等の低レベル部分を設定します。設定を
``保存'' するために、コンピュータが起動する度にこれらのコマンドを実行
するように、あるファイル (シェルスクリプト) に書いておかねばなりません。
Linux のディストリビューションにはよく、 14.3 Setserial本章は、モデム、シリアル、そしてテキスト端末の 3 つの HOWTO について書 いています。これらは、HOWTO の中にもあるように、少しマイナーな違いが幾 つかあります。 はじめにラップトップ (PCMCIA) では 訳注:PCMCIAや、PCCardのシリアルポートカードの設定は pcmcia_cs で行い ます。setserial はラップトップ本体に組み込まれたシリアルポートには使え ます。 もし 1 つか 2 つの組み込みのシリアルポートしかないなら、setserial を使
わなくても正しく設定できます。そうでなければ (またはシリルポートで問題
があれば)、おそらく
setserial は、ポートが閉じられた後に操作を持続する時間を設定できます (メインメモリのバッファに残っているデータを出力するため)。これは 1200 以下のボーレートで必要です。そしてまた、``フロー制御'' による待ちが多 発するなら高速の通信においても必要になるでしょう。man ページの ``closing_wait'' をご覧ください。シリアルポートがプラグアンドプレイな ら、プラグアンドプレイやシリアルについての他の HOWTO 文書を参照すると 良いでしょう。 setserial は、シリアルポートハードウェア自体の IRQ と I/O アドレスのど ちらも設定しません。それはジャンパーかプラグアンドプレイで設定されます。 あなたは、ハードウェアで設定されているのと同じ値を setserial に教えな ければなりません。使えそうな値をでっちあげて、setserial に教えたらダメ ですよ。でも I/O アドレスを知ってて IRQ を知らないなら、IRQ を決めるよ うに setserial に指示はできます。 引数をつけずに
指定のポートでデバイスドライバがどのように設定されているかの情報を表示
します。``UART: unknown'' と表示されたら、おそらく UART が存
在しないということです。言い換えると、指定のシリアルポートがなくて、ポ
ートに関する他の情報は無意味なので、無視すべきです。指定のシリアルポー
トが本当にあるなら、setserial がそれを認識していないので、修正する必要
があります。
-g オプションに -a を追加すればさらに詳しい情報を表示しますが、小数の 人達がこれらの情報を処理 (あるいは理解) する必要があるので、デフォルト の設定にしておけばよいでしょう。普通の場合は、``setserial'' の報告する 通りにハードウェアを設定すればよいのですが、問題が起こったら、 ``setserial'' が誤作動することを知るよい機会です。実際、setserial によっ てまったく架空の I/O アドレスや IRQ を割り付けたり、欲しいと思うような UART の種類を設定したりできます。そして次に ``setserial ...'' とタイプす ると、そのインチキな値を文句なしに表示するでしょう。あるポートでそのよ うな設定を使ったとしても、もちろんシリアルポートドライバーはそんなイン チキな値でまともに動いたりしません。だから、``setserial'' にそんなパラ メータを与えたら何かが起ります。設定が不正であっても警告はなく、他と重 なった IRQ や I/O ポートアドレスを作ったりした結果、悲惨なことが起こる でしょう。 setserial で設定した値は PC の電源を切ると失なわれますが、PC が再起動 した時に設定ファイルによって設定値 (あるいは前回の値) をリストアします。 最新のバージョンでは、setserial による変更は自動的に設定ファイルに保存 されます。古いバージョンでは、設定ファイルは変更があったら手で編集され るので、ブートからブートの間の設定は同じものが残されます。 設定スクリプト / ファイルをご覧ください。 検出適切なオプションでは 検出の目的は、UART がそこに存在するのか、もしあるなら IRQ の値はなにか
を知ることです。検出を試みる早い方法として、モデムを検出する
wvdialconf や、ごく早い段階でのブートメッセージ、あるいは
UART の種類を自動で調べる以外にも、setserial は IRQ を自動で検出できま
すが、常に正しく動作するわけではありません。setserial 2.15 以降のバー
ジョンのものは、テスト検出した最後の結果を保存しておいて、次に Linux
が起動するとき使えるように 2 つのシリアルポートの両方共に、同じ IO アドレスがハードウェア上にセッ
トされているかもしれません。もちろん、これは許されるものではありません
が、時々起ります。実際にシリアルポートが 2 つあるのに 1 つだけ検出して
しまいます。しかし、それぞれ違った IRQ が設定されているなら、IRQ の検
出では IRQ = 0 と表示されるかもしれません。筆者の場合、 ブート時の設定カーネルがシリアルモジュールをロードした (あるいは ``モジュールと同等
のもの'' がカーネルに組み込まれた) 時に、 setserial に本当の IRQ (あるいは他の理由) を伝えることで、このような衝
突を避けるために、 設定スクリプト / ファイルあなたの目的は、ブート時に setserial を起動する /etc ツリーのスクリプ トファイルを修正 (または生成) することです。ほとんどのディストリビュー ションがそのようなファイル (でも 始めは /etc ツリーにないかもしれませ ん) を提供しています。さらに、setserial 2.15 以上では上記スクリプトが 使う /etc/serial.conf ファイルがよく用いられるので、setserial を起動す るスクリプトのディレクトリを編集する必要はありません。加えて、単にコマ ンドライン上で setserial を使うなら、この設定ファイルを最終的に変更す ることになります。 バージョン 2.15 以前では、やることは全てスクリプトの編集です。2.15 以
降では 3 つの内どれか 1 つをやる必要があります。1. スクリプトの編集。
2. スクリプトの編集 (バージョン 2.15 以降 : 不正確です)ssetserial 2.15 (1999年現在) 以前では、setserial を設定するための /etc/serial.conf ファイルはまだなかった。それで、ブート時に ``setserial'' を起動するファイルを探して、編集する必要がありました。も しなかったら、作らなければなりません (あるいは、ブート時の早い段階で実 行するファイルにコマンドを書いておく)。そのようなファイルが現在でも使 われているなら、それは /etc ディレクトリツリーのどこかにあるはずです。 でも Redhat 6.0 以前では /usr/doc/setserial/ にありましたが、それを使 う前に /etc ツリーに移動しておく必要があります。そんなファイルを探すの に ``locate'' を使うことができます。例えば、locate "*serial*" とタイプします。 スクリプト そんなファイルが提供されていたら、コメントアウトしたサンプル行を含んで
いるはずです。これらの数行のコメントを外して、そしてまた編集すれば、正
確に設定できることでしょう。 ttyS3 の UART や IRQ を setserial に自動的に決定させたいなら、このよう に追加します。
自動的に実行したいポート毎にこの行を追加します。あなたのシステムに本当 にあるデバイス名を指定するよう注意してください。幾つかの場合では、ハー ドウェアの原因でうまくいかないでしょうから、IRQ や UART の種類を知って いるなら ``setserial'' に明示的に割当ててください。例えばこのように。
バージョン 2.15 以上 (お使いのディストリビューションが対応済であるこ と) の場合、起動時に setserial を実行する /etc/init.d/setserial かその 類のスクリプトファイルがユーザによって編集されると思っていなかったので、 かなりやっかいです。 /etc/serial.conf を使った新しい設定方法 をご覧ください。 /etc/serial.conf を使った新しい設定方法setserial 2.15 以前のバージョンでの設定方法は、起動時に setserial を実
行するシェルスクリプトを手で編集することでした。
スクリプトの編集 (バージョン 2.15 以降 :不 正確です)をご覧ください。 これは、Linux がブートする毎に setserial がちゃんと動作するよう設定す るために、あなたがどんなファイルも編集しなくてすむようにするつもりだっ たのです。でもそこには重大な落し穴があって、なぜなら実際には ``setserial'' が serial.conf を編集していないからなのです。各ディスト リビューションがこのことを違って扱ったために混乱は増しています。加えて 、あなたがそれを編集することでも違った動きとなっています。 これでなにが起きるかというと : PC をシャットダウンした時に、ブート時に
``setserial'' を実行するスクリプトが再び実行しますが、今度は ``stop''
ケースの部分だけを実行するのです。スクリプトは ``setserial'' の現在状
態を知るために ``setserial'' を実行し、 今はあなたはどのような問題が起きるか多分推測できるでしょう。普通にシャ ットダウンしなかったとしたら (誰かが突然電源を切ったりして...)、変更は 保存されません。``setserial'' をいろいろ試していて、最後にオリジナルの 設定に戻すのを忘れた (あるいはオリジナルを戻し間違った) としたら、``試 験的'' な設定が保存されてしまいます。 手で serial.conf を編集しても、シャットダウンの時に setserial の状態に 戻ってしまうので、変更は保存されませんよ。シャットダウンで serial.conf を変更しない方法は、serial.conf の最初の行にある ``###AUTOSAVE###'' あるいはその類の行を削除することです。最近のディストリビューションのな かには、インストール直後の最初のシャットダウンの後に最初の行にある ``# ##AUTOSAVE###'' が削除されるものもあります。serial.conf ファイルには多 分参考になるコメントが含まれています。 ブート時に setserial を実行するもっとも一般的なファイル (設定ファイル に準拠したもの) は、現在のところ /etc/init.d/setserial(Debian) や /etc/init.d/serial (Redhat) などですが、通常は編集すべきではありません。 Redhat 6.0 の setserial 2.15 には /usr/doc/setserial-2.15/rc.serial が ついていますが、ブート時に実行するようにしたいなら /etc/init.d/ に移さ なければなりません。 ポートを無効にするなら バグ : 1999 年 7 月現在、###AUTOSAVE### にしたとき、``setserial -Gg /dev/ttyS?'' で表示するパラメータだけが保存され、他のパラメータが保存さ れないのはバグもしくは問題です。保存できないパラメータのデフォルト値は ほとんどの場合で問題がないので、少数のユーザにだけ影響するでしょう。こ れはバグとして報告され、今頃修正されたかもしれません。 setserial で設定した現在の設定値を設定ファイル (serial.conf) に強制的
に保存するには、通常、シャットダウン時に行なわれているように、
幾つかの場合では、古いのと新しい設定方法の両方がインストールされていま すが、たぶんそのうちの一つだけがブート時に実行されます。 Debian では、 古いファイルには ``...pre-2.15'' などの名前がついています。 IRQsデフォルトでは、ttyS0 と ttyS2 は IRQ 4 を共有し、ttyS1 と ttyS3 は IRQ 4 を共有します。しかし実際は、シリアル用の割込みの共有は以下の条件以 外では許されていません。1. バージョン 2.2 以降のカーネルを使っているこ と。2. 共有をサポートするようカーネルを構築していること。3. シルアルハ ードウェア自身がサポートしていること。Serial-HOWTO の割込みの共有とバ ージョン 2.2 以降のカーネルをご覧ください。 2 つのシリアルポート ttyS0 と ttyS1 だけなら、存在しないデバイスのため の IRQ の競合はありません。 ttyS0 と ttyS1 が使える環境で内蔵モデムを追加する場合、未使用の IRQ を 見つけて、共にシリアルポート (あるいはモデムカード) に設定して、 setserial を使ってデバイスドライバに割当てます。IRQ 5 が音源ボード用で使用 されてないなら、モデム用に使えますよ。ハードウェアで IRQ を設定するに は、isapnp ツールや、PnP BIOS、あるいは PnP をサポートするように Linux にパッチを当てる必要があります。空いてる IRQ のどれを使うかを決めるに は、``man setserial'' とタイプして、``IRQ 11'' を探すことです。 14.4 Sttyはじめに
stty の設定項目を幾つか示します。通信速度 (bit/sec)、パリティ、データ
長、ストップビット数、8 ビット目を落すかどうか、モデム制御信号、フロー
制御、ブレーク信号、行末マーカ、文字ケースの変更、パディング、バッファ
溢れの際にビープ音を鳴らすかどうか、タイプした文字の画面へのエコー、バ
ックグランドタスクに端末への書き込みを許すかどうか ?、特殊 (制御) 文字
の定義 (どのキーを押すと割込みがかかる等) などです。詳しくは 一部の getty の実装 (gety_ps パッケージ) では、stty に通常与えるコマン ドは、getty の設定ファイル (/etc/gettydefs) に含まれます。この設定ファ イルがなくても、getty のコマンドラインは stty を必要としないほど十分な 設定ができます。 stty の設定などを変更する C プログラムを書くこともできます。これに関す る文書をいくつか見れば、stty コマンドの使い方 (およびたくさんある使用 可能な引数) もよく理解できるでしょう。Serial-Programming-HOWTO も役に 立ちます。オンラインマニュアル termios には C 言語の構造体 (termios 型) の説明があります。この構造体は、stty の設定をコンピュータのメモリ に格納します。C 言語の構造体メンバーのフラグ名の多くは、stty コマンド の引数とほぼ同じです (そして同じ動作をします)。 ``よその'' 端末に対しての stty の使用
新しい方法は ``stty -F /dev/ttyS2 ...'' (または F の代りに --file ) です。... のところで -a としたら、stty の全ての設定 を表示します。古いリダイレクションの方法 (最新版においても動作します) では、``stty ... </dev/ttyS2'' とタイプします。新しい方法でうまくいっ て古い方法でハングするなら、モデム制御線の信号が落ちていることを意味し ています。このように古い方法はまだトラブルシューティングで使えます。次 の章をご覧ください。 古いリダイレクションの方法古いリダイレクション演算子には問題があります (新しい -F オプションを使 えば問題はありません)。stty を使おうとすると時々、コマンドがハングし、 何もできなくなるのです(<リターンキー>を押しても、次のコマンドのプロンプ トが出ない)。これは大抵ポートがつまってしまったためで、モデム制御線の いずれかがアサート(肯定)になるのをポートがじっと待っている状態なのです。 例えば、モデム制御線を無視するように ``clocal'' を設定していない場合、 CD 信号がアサートにならなければポートはオープンできませんし、stty はポ ートに対して動作しません (新しい -F オプションを使ってもこうなります)。 同様の状況は、ハードウェアフロー制御でも起こるようです。アサートになら ないとまずい導線がポートにつないだケーブルになければ、ハングするのを防 ぐ簡単な方法はありません。 上記のハングを防ぐ方法の一つは、新しい -F オプションを使って ``clocal'' と ``crtscts'' をセットすることです。もし -F オプションに対応してな ければ、たとえ制御線がオフであってもポートを強制的に動作させるプログラ ムを使うことです。 多分このプログラムは、これ以降ポートをオープンする ために制御線が不要であるようにポートを設定します : すなわち clocal ま たは -crtscts を設定するのです。``minicom'' を使ってこれを行うには、別 の ttyS 等に合わせて minicom を再設定し、それから minicom の終了と再実 行を行わなければなりません。その後再び minicom を再設定しなければなら ないので、単に PC を再起動するだけの方が簡単かもしれません。 古いリダイレクションの方法は、ttyS2 を stty への標準入力にします。これ によって、ttyS2 は stty への標準入力となります。すると、stty プログラ ムは ''ファイル'' である ttyS2 へのリンクを得ることによって、 これを ''読み取る'' ことができます。しかし、ttyS2 に送られたバイトデータを期待 される通り普通に読み取るのではなく、ポートの読み取りや変更が できるよ うに、このリンクを使ってポートの設定を見つけます。 ``stty ... > /dev/ttyS2'' を使って端末を設定しようとする人もいますが、これでは設定できま せん。この場合は設定は行われずに、使っている端末 (例えば tty1) に対す る stty コマンドで普通に表示されるメッセージが得られ、これが ttyS2 に 送られます。しかし、ttyS2 の設定は全く変わりません。 端末での 2 つのインタフェースコマンドライン編集機能を有効にしてシェル (bash など) を使うときには、 2 つの異なる端末インタフェース (stty -a を実行したときに表示されるも の) があります。コマンドラインで入力を行うときには、それぞれの文字を入 力するごとにコマンドラインエディタで読み込まれる一時的な ``raw'' イン タフェース (つまり ``raw'' モード)を使います。<リターン> キーを叩くと、 コマンドラインエディタは終了し、端末インタフェースはその端末の通常の ``cooked'' インタフェース (加工モード) に切り替わります。加工モードは次 のプロンプトが端末に送られるまで続きます。加工モードでは何も入力しませ んが、raw モードで入力された文字は <リターン> キーが押されると加工モー ドになります。 プロンプトが端末に送られると、端末は ``加工'' モードから ``raw'' モー ド に変わります (これはエディタを起動するときとちょうど同じように行わ れます。というのも、コマンドラインエディタを起動しようとしているからで す)。 ``raw'' モードの設定は、``加工'' モードから得た基本設定のみに基 づいて行われます。``raw'' モードはこれらの設定を保持しますが、他のいく つかの設定はモードを ``raw'' に変えるために変更します。前の ``raw'' モ ードで使われた設定には全く依存しません。したがって、stty を使って raw モードの設定を変えると、``設定された'' と思われる端末上で <リターン> キーを叩いた途端にこのような設定は無くなってしまいます。 ここで、stty で端末インタフェースを見るときには、加工モードか raw モー ドのどちらかの状態を表示することができます。その時にどちらを見るのかを はっきりさせる必要があります。コマンドラインを表示している端末を扱う ために別の端末から stty を使う場合には、raw モードでの表示になります。 行われた変更は raw モードにしか適用されず、``設定''しようとした端末上 で誰かが <リターン> を押すと消えてしまいます。しかし、自分のいる端末で (リダイレクトの < を使わずに) stty コマンドを入力し、それから < リターン>を押した場合は話が違ってきます。<リターン> キーによ り端末は加工モードになるからです。行われた変更は保存され、端末が raw モードに戻ったときにも残っています (もちろん raw モードで変更できない 設定は除きます)。 この状況では問題が起こることがあります。例えば、端末インタフェースを腐 らせてしまい、これを戻すために別の端末に行って ``stty -F dev/ttyS1 sane'' (またはこれに類するコマンド) を実行したとしましょう。ところがこの 方法は使えません! もちろん腐ってしまった端末から ``stty sane ...'' の 入力を試 みることはできますが、入力した文字を見ることはできません。上 記の現象はダム端末だけではなく、PC モニタ上で使う仮想端末や X 上の端末 ウィンドウにも当てはまります。言い換えれば、これは Linux を使っている と逃れられない問題なのです。幸運なことに、起動時に stty を実行するファ イルはシェルが動作していない端末 (あるいは端末がつながっていないシリア ルポート) を扱えるので問題はありません。 どこに stty コマンドを置くか ?コンピュータが起動する度に stty コマンドを置く場所の一つは、システムが起動するときに setserial を 実行するファイルと同じところです。この場所はディストリビューションやバ ージョンごとに異なります。低レベルの処理が先に行われるようにするため、 setserial の後に置くのが良いでしょう。 置かれているファイルが起動時に 全て実行されるディレクトリ (System V Init) が、/etc ディレクトリツリー の下にあれば、``stty'' という名前でファイルを作れば良いでしょう。 14.5 Terminfo と Termcap (簡易版)termcap の詳細については Terminfo と Termcap (詳細)をご覧ください。あなたが使うアプリケーションプログラムの多くは terminfo (以前は termcap) データベースを使用します。これには端末の型式 やタイプ (vt100 のような) のエントリ (またはファイル) があり、その端末でどんなことができるか、 各種動作のために送るコードは何か、また初期化のコードな どについて示してくれます。 多くの端末 (PC も同様) は他の端末をエミュレートでき、また各種の操作 `` モード'' があるので、指定した実際の端末を選択できるようにいくつかの端 末エントリがあります。それらは普通、似かよった名前になります。getty の 最後のパラメータ (agetty と getty_ps の両方のための) は使用している端 末 (もしくは端末エミュレータ) の terminfo に登録されている名前 (vt100 のような) にすべきです。 terminfo には、端末が実行可能な能力を指定したり、それらのことを実行さ せるために端末に送るコードを明らかにする以上の役割があります。文字色が 黒やその他の色なら、``ボールド'' の見かけ (反転表示や、高輝度表示など) やカーソルの形状がどのようになるかも指定します。PC の用語では、 ``初 期設定'' と呼んでいます。端末に初期化コードを送ったりもします (モデム に初期化文字を送るのに似ています)。このような文字列は Linux が勝手に送 ったりしません。 初期化文字をご覧ください。もし画面の表示や動 きが気にいらなければ、terminfo (または termcap) ファイルを編集 (そして アップデートも) する必要があります。アップデートの方法は Terminfo コンパイラ (tic)をご覧ください。 14.6 TERM と TERMINFO の設定端末用には TERM と TERMINFO の 2 つの環境変数がありますが、これについ ては何も知る必要ありません。TERM は使用する端末のタイプ (vt100 のよう な) を設定します。もしタイプ (名前) を知らなければ、 私の端末の terminfo の名前は何 ?をご覧ください。TERMINFO は terminfo データベースへのパスを含みますが、データベースがデフォルトの 位置にあるなら (あるいは、あなたの Linux ディストリビューションに含ま れるスクリプトファイルで TERMIFO を自動的に設定するなら) 必要ないかも しれません。 データベースの位置の翻訳 が参考になると思います。 幸い、プログラム getty はログインする前に TERM を設定するのが普通です。 単に getty のコマンドライン (/etc/inittab) で指定した端末タイプを使い ます。これによりアプリケーションプログラムが端末の名前を見つけたり、 t erminfo データベースから端末の能力を探すことが可能になります。TERM の 詳細については TERM 変数をご覧ください。 terminfo データベースを見つからなければ、端末でそれに関するエラーメッ セージを探したほうがよいと思います。もしエラーが起っていたら terminfo が記録されている場所を調べて、必要なら TERMINFO を設定しましょう。 ``l ocate'' コマンドを使って、一般的な terminfo ファイルから ``vt100'' の ような語句を探すことで terminfo データベースがどこにあるか探すことがで きます。お使いの端末がこのデータベースにあるかどうか確認してみてくださ い。例えば TERMINFO の設定は export TERMINFO=/usr/share/terminfo とし ます (/etc/profile かそれに類するファイルに書いておきます)。もしデータ ベース内の端末データがお気に召さなければ、それを編集する必要があります。 Terminfo & Termcap (簡易版)をご覧ください。 私の端末の terminfo の名前は何 ?TERM 環境変数にセットしたり、 見つけるには、/etc/termcap ファイル (もし存在するなら) で探してみてく ださい。もしなければ、terminfo ツリー ( データベースの位置の翻訳をご覧ください) か、terminfo ソースコードファイル ( ソー スコードデータベースの位置をご覧ください) のどちらかをご覧ください。 14.7 めったに必要ない /etc/ttytype ファイル設定ファイル /etc/ttytype は、terminfo 毎の端末名称に /dev/ttySn を割 当てるために使います。tset が使っていますが、TERM 環境変数がすでに正し く設定されているならこのファイルは不要です。Linux の getty は各 tty 毎 に TERM を設定するので、このファイルは不要です。FreeBSD のような Unix ライクな他のシステムでの /etc/ttys ファイルは、適切な getty コマンドや、 接続の種類 (``ダイアルアップ'' のような) などより多くの tty にマップし ます。Linux の ttytype のサンプル行 : vt220 ttyS1 14.8 ログインの制限デフォルトでは、root ユーザは端末からはログインできません。これを許可 するには、man ページの ``securetty'' により /etc/securetty ファイルを 作成しなければなりません。しかしこれを使うには、Suse などは /etc/securetty を使わなかったりするので、ディストリビューションの仕様 によることになります。特定のユーザや端末からのログインを制限するには /etc/login.access (これは古い /etc/usertty ファイルを置き換えたもので す ??) を編集します。/etc/login.def は /etc/securetty が使われるかどう か、編集可能にするかどうかを決めます。つまり /etc/securetty を不要にす るか (あるいは使用しないようにするか) を決めるのです。 /etc/porttime はあるユーザと端末がコンピュータを使える時間を制限します。ユーザが試み たログインが何度も失敗したら、そのユーザは再びログインすることを禁じら れるでしょう。これを設定する方法は man ページ ``faillog'' をご覧ください。 14.9 TERM=my_term_type はコマンドだけを実行する起動時に、特定のタイプの端末だけにコマンドを実行したいことがあります。 stty コマンドの場合は問題ありません。リダイレクション演算子 < を使っ て、コマンドの対象となる端末を指定できるからです。しかしシェルのエイリ アスや関数はどうしましょう ? 例えば ls 用の関数を作って、ディレクトリ 表示のカラー化を、カラー端末・コンソールだけで行いたいような場合もある かもしれません。モノクロの端末では、同じ名前の関数 (しかし実体は違う) で、カラー表示の代わりにシンボルを使うようにさせたいかもしれません。こ のような関数定義を、異なる端末に対して異なるように行うには、どこに置く のが良いのでしょうか ? ログオンする度に起動する /etc/profile の ``if'' 文の中にこれらを書いて おけば良いのです。条件式 ``if'' は端末が指定したタイプのときだけ特定の 関数などを定義します。 コマンド ls の例この if 文が行なうことの多くは dircolors 用の設定ファイル内で実行され ます。以下は bash シェルの場合のサンプルです。 if [ "$TERM" = linux ]; then eval `dircolors`; elif [ "$TERM" = vt220 ]; then ls () { command ls -F $* ; }# to export the function ls(): declare -xf ls else echo "From /etc/profile: Unknown terminal type $TERM" fi 次のページ 前のページ 目次へ |
[ |