Skip to main content

Linuxのテキスト端末 - 14.1 Getty(/ etc / inittabで使用)

初心者でも簡単にLinuxのコマンドの練習ができる方法 (六月 2026)

初心者でも簡単にLinuxのコマンドの練習ができる方法 (六月 2026)
Anonim

14.1ゲッティ(/ etc / inittabで使用)

ゲッティの紹介

コンピュータの起動時(または実行レベルの切り替え時)にシリアルポート(およびその端末に接続された端末)でログインプロセスを実行させるには、gettyコマンドを/ etc / inittabファイルに入れる必要があります。コマンドラインからgettyを実行すると問題が発生する可能性があります(gettyをコマンドラインから実行すると、プログラムが停止して理由が分かります)。ゲッティは、TTY(ターミナル)を運営しています。各端末には独自のgettyコマンドが必要です。すべての/ etc / inittabファイルには、コンソール用の少なくとも1つのgettyコマンドもあります。これを見つけて、実際の端末のgettyコマンドをその隣に置きます。このファイルにはコメントアウトされているテキストターミナル用のgetty行のサンプルが含まれているため、コメントアウトを解除して(#を削除して)いくつかの引数を変更するだけで済みます。

許可される引数は、使用するgettyによって異なります。直接接続された端末に最適な2つのgettysは次のとおりです。

  • agetty(ときにはgettyと呼ばれることもある):セットアップがとても簡単です。設定ファイルはありません。 agettyを参照してください
  • getty(getty_psの一部)

ダイヤルインモデムに最適な2つのgettys(直接接続された端末を避ける)は次のとおりです。

  • mgetty:モデムに最適なもの。端末はあまりにも劣るが劣っている
  • uugetty:モデムのみ。 getty_psパッケージの一部

実際のテキスト端末を使用しない場合に使用する単純なgettys。ほとんどのLinuxユーザーは、モニターで次のいずれかを使用します。

  • 混乱
  • fbgetty
  • fgetty
  • ランゲティ

Linuxディストリビューションには、テキスト端末用のps_gettyまたはagettyが付属しています。一部のディストリビューションはどちらも供給しません残念なことに、彼らはしばしば "getty"と呼んでいるので、/ etc / inittabの後に置く引数が異なるので、どれを持っているかを判断する必要があります。 Debianはagettyを使います(util-linuxパッケージ内)。 RedHatとFedoraはps_gettyを使用していました。ps_getty

あなたが持っているgettyを決定する最後の手段として、実行可能コード(通常は/ sbin)をチェックアウトすることができます。 ps_gettyには、このコードに/ etc / gettydefsが埋め込まれています。それを検索するには、/ sbinに移動して次のように入力します。文字列getty | grep getty gettyが実際にagettyの場合、上記の結果は何もありません。しかし、あなたはagettyの入力を持っている場合:ゲッティフオプション-hiLmwが表示されます。

あなたがgettyを持っていないなら、他のディストリビューションをチェックしたい エイリアン RPMとDebianパッケージの間で変換するプログラム。ソースコードはGetty Softwareからダウンロードできます。

モデム制御回線を使用していない場合(たとえば、最低3つの導体(送信、受信、および共通信号グランドのみを使用する場合)は、「ローカル」フラグを使用してgettyに認識させる必要があります。これの形式は、使用するgettyによって異なります。

ゲッティはログイン後に終了します(また再開することもできます)

あなたがログインした後、gettyプロセスがもはや実行されていないことがわかります( "top"、 "ps -ax"、または "ptree"を使用して)。それがどうなったのか?あなたのシェルがkillされた場合、なぜgettyが再び再起動するのですか?理由は次のとおりです。

ユーザー名を入力すると、gettyがその名前を取得し、ユーザー名を示すログインプログラムを呼び出します。 gettyプロセスはログインプロセスに置き換えられます。ログインプロセスはあなたのパスワードを尋ね、それをチェックし、あなたのパスワードファイルで指定されたプロセスを開始します。このプロセスは、しばしばbashシェルです。もしそうなら、bashが起動し、ログインプロセスを置き換えます。あるプロセスが別のプロセスを置き換え、bashシェルプロセスがもともとgettyプロセスとして起動したことに注意してください。これの意味を以下に説明する。

今、/ etc / inittabファイルで、gettyはkillされた場合にrespawn(再起動)されます。それはgettyを呼び出す行でそう言います。しかし、bashシェル(またはログインプロセス)がkillされた場合、gettyは再起動します(再起動します)。どうして?さて、ログインプロセスとbashの両方がgettyとinheritの置き換えです

* テキストターミナルHow-To Index

信号接続はそれらの先行者によって確立される。実際に詳細を確認すると、置換プロセスは元のプロセスと同じプロセスIDになります。したがって、bashは同じプロセスID番号を持つ偽装のgettyのようなものです。 bashが殺された場合、gettyは(たとえgettyがもう動かないにしても)殺されたようなものです。これにより、gettyの再作成が行われます。

ログアウトすると、そのシリアルポート上のすべてのプロセスがbashシェルを含めて強制終了されます。これは、モデムによるDCD電圧の低下によって、ハングアップ信号がシリアルポートに送信された場合にも有効になります(有効になっている場合)。 DCDのログアウトまたはドロップにより、gettyの再作成が行われます。 "top"または "kill"コマンドでkキーを押すなどして、手動でbash(またはlogin)を強制終了することによって、gettyを強制的に再生成させることができます。シグナル9(無視できない)でそれを殺す必要があるでしょう。

コマンド行からgettyを実行すると、プログラムが停止する

通常は、gettyを内部から実行する必要があります / etc / inittab コマンドラインからではなく、ターミナルで実行されているいくつかのプログラムが突然停止(停止)する可能性があります。理由は次のとおりです(理由が重要でない場合は、次のセクションに進んでください)。他の端末のコマンドラインからttyS1と言うgettyを起動すると、tty1と言います。実際の端末がttyS1であっても、tty1は "制御端末"となります。したがって、制御端末が間違っています。しかし、inittabファイルの中で起動していれば、ttyS1が制御端末(正しい)になります。

制御端末が間違っていても、(gettyの引数としてttyS1を与えたので)ttyS1のログインはうまく動作します。制御端末がtty11のままであっても、標準入力と出力はttyS1に設定されます。 ttyS1で実行される他のプログラムは、この標準入力/出力(ttyS1に接続されています)を継承してもよく、すべて正常です。しかし、プログラムによっては、間違っている制御端末(tty1)からの読み込みを間違えることがあります。ここで、tty1は、これらのプログラムがtty1によってバックグラウンドで実行されていると考えるかもしれません。したがって、tty1(ttyS1であったはずです)から読み取ろうとすると、読み取ろうとしたプロセスが停止します。 (バックグラウンドプロセスは制御端末から読み取ることができません)。次のようなメッセージが表示されることがあります:1 +停止あなたが間違った端末を介してあなたと通信しようとしているプロセスと対話できないので、この時点ではあなたは立ち往生しています。これから脱出して、別の端末に行き、プロセスを殺すことができます。 。

agetty(gettyという名前でもよい)

/ etc / inittabの行例:

S1:23:respawn:/ sbin / getty -L 19200 ttyS1 vt102

S1はttyS1からのものです。 23は、実行レベル2または3に入ったときにgettyが実行されることを意味します.respawnは、getty(またはbashなどのプロセスを置き換えたプロセス)が強制終了されると、gettyが自動的に再起動(再起動)します。 / sbin / gettyはgettyコマンドです。 -Lはローカル(モデム制御信号を無視する)を意味します。 -h(この例では示されていません)では、ハードウェアフロー制御が可能です(stty crtsctsと同じ)。 19200はボーレートです。 ttyS1は/ dev / ttyS1(MS-DOSではCOM2)を意味します。 vt102は端末のタイプで、このgettyは環境変数TERMをこの値に設定します。設定ファイルはありません。 gettyを編集した後、コマンドラインで「init q」と入力すると、ログインプロンプトが表示されます。

パリティ問題のAgettyによる自動検出

アガティ プログラムは、端末内部のパリティセット(パリティなしを含む)を自動検出しようとします。 8ビットデータバイトと1ビットパリティをサポートしていません。 8ビットデータバイト(+パリティ)を参照してください。使用する場合 stty パリティを設定するには、 アガティ データビットであるかのように最初にパリティビットが来ることを望むので、自動的に解除されます。これは、パリティを自動検出できるように、ログイン名を入力するときに最後のビット(おそらくパリティビット)を取得する必要があるためです。したがって、パリティを使用する場合は、テキスト端末内でのみ有効にし、 アガティ それを自動検出してコンピュータに設定します。端末が受信パリティをサポートしている場合は、何か入力するまでログインプロンプトが文字化けして表示され、gettyが

パリティ。文字化けしたプロンプトは、訪問者などがログインしようとするのを阻止します。それはちょうどあなたが望むものかもしれません。

パリティの自動検出に問題があることがあります。これは、ログイン名を最初に入力した後、 アガティ 〜を始める ログイン あなたのログインを完了させるためのプログラムです。残念なことに、 ログイン プログラムはパリティを検出できないため、 ゲッティ プログラムがパリティを決定できなかった ログイン それを決定することもできません。最初のログイン試行が失敗した場合、 ログイン もう一度試してみましょう(すべてパリティが間違って設定されています)。最終的に、ログインに失敗した後(またはタイムアウト後に) アガティ 再度起動して、ログインシーケンスをもう一度開始します。 gettyが再び実行されると、2回目の試行でパリティを検出できるため、すべてが正常に機能する可能性があります。

間違ったパリティで、 ログイン プログラムはあなたが入力したものを正しく読み込むことができず、ログインできません。端末が受信したパリティをサポートしている場合、引き続き文字化けした画面が表示されます。 gettyがパリティを検出できない場合、/ etc / issueファイルは通常、プロンプトの直前の画面にダンプされるため、画面に文字化けが発生する可能性があります。

最初の文字が入力されたことで、なぜagettyがパリティを検出できないのですか?例を示します。パリティビット0(上位ビット)と奇数の1ビットを持つ8ビットバイトを検出するとします。どのようなパリティですか?奇数の1ビットは、それが奇数パリティであることを意味します。しかし、パリティを持たない8ビット文字であってもかまいません。これまでに決定する方法はありません。しかしこれまでのところ、我々は偶数パリティの可能性を排除した。従って、パリティの検出は、除去のプロセスによって進行する。

入力された次のバイトが最初のバイトに似ていて、偶数パリティの可能性もなくなった場合、パリティを決めることはまだ不可能です。この状況は無限に続くことがあります。まれに、ログイン名を変更するまでログインが失敗します。もしagettyが1のパリティビットを見つけると、これはパリティビットであり、8ビットキャラクタの上位ビットではないと仮定する。したがって、ユーザー名にメタ文字(上位ビットセット)を使用しない(つまり、名前がASCIIである)ことを前提としています。

1つは、さまざまな方法で "ログインループ"に入るかもしれません。ログイン名に1文字または2文字だけを入力してから、returnキーを押すとします。これらの文字がパリティ検出に十分でない場合、パリティが検出される前にログインが実行されます。この問題は、agettyが最初に起動したときに端末が接続されていない、または接続されていない場合に発生することがあります。

この「ログインループ」に陥った場合、gettyログインプロンプトが表示されるまで、戻りキーを数回押してください。もう1つの方法は、タイムアウトのために1分ほど待つことです。その後、gettyプログラムによってgettyログインプロンプトが画面に表示され、再度ログインしようとする可能性があります。

8ビットデータバイト(プラスパリティ)

残念ながら、agettyはこのパリティを検出できません。1999年後半には、パリティの自動検出を無効にするオプションがないため、誤ったパリティが検出されます。その結果、ログインプロセスが文字化けし、パリティが正しく設定されなくなります。したがって、パリティ付きの8ビットデータバイトを使用しようとするのは実現可能ではないようです。

getty(getty_psの一部)

(これはほとんどがGreg Hankinsの古いSerial-HOWTOからのものです)このgettyの場合は、設定ファイルにエントリを入れ、 / etc / inittab。設定ファイルに入れた端末に使用するエントリの例を以下に示します / etc / gettydefs.

DT38400、DT19200などは単なるラベルであり、使用するものと同じでなければならないことに注意してください / etc / inittab.

あなたが望むなら、あなたは ゲッティ ログインバナーに興味深いものを表示する。私の例では、システム名とシリアルラインが印刷されています。あなたは他のものを加えることができます:blockquote

陰影=はい

編集が終わったら / etc / gettydefs次のようにして、構文が正しいことを確認できます。

他に何もないことを確認する ゲッティ または uugetty あなたの端末が接続されているシリアルポートの設定ファイル/etc/default/{uu}getty.ttySN または /etc/conf.{uu}getty.ttySN)これはおそらく実行に干渉するため ゲッティ 端末上で競合するファイルがあれば削除してください。

あなたの / etc / inittab 実行するファイル ゲッティ シリアルポート上で(ポート、スピード、およびデフォルトの端末タイプのような、あなたの環境に適した情報に置き換えてください):

この時点で、端末にログインプロンプトが表示されます。あなたは、端末の注意を得るためにリターンを打つ必要があるかもしれません。

mgetty

「m」はモデムを表します。このプログラムは主にモデム用であり、2000年半ばには、ハードウェアフロー制御を使用しない限り、テキストターミナル用に再コンパイルする必要があります(通常はハンドメイドケーブルが必要です)。直接接続された端末のドキュメントについては、マニュアルの「直接」セクションを参照してください。 mgetty.texi。

の最後の行を見てください /etc/mgetty/mgetty.config それを端末用に設定する例については、あなたが "toggle-dtr no"と言っていない限り、存在しないモデムをリセットしようとすると、あなたはモデムを持っていてPCのDTRピンを落とす(否定する)と思うでしょう。他のgettysとは対照的に、mgettyは誰かがその端末のキーを押すまで、端末に接続しません。の端末 または ps これが起こるまで。ログイン / var / log / mgetty / 無視できるモデムにのみ適用される警告メッセージが表示されることがあります。

ここにあなたが入れた単純な線の例があります / etc / inittab: