GNOMEでターミナルを開くときに得られるテキストモードと、GUIなしでサーバーLinuxディストリビューションと対話するときに得られるテキストモードの違いを知りたいです。
端末と呼ばれるプログラムがエミュレータであることを知っています。私は背後のメカニズムを理解したかったのです。たとえば、scanf()
どちらの場合も、経営陣にどのように電話しますか? 「ターミナル」がGUIベースのテキストモードを実装している場合、代替テキストモードのソースは何ですか? (点滅しているカーソルを表示し、移動するコードなどを意味します。)BIOS?コア?ユーザー空間のプロセス?
答え1
すべての場合において、シェルは、TTY または PTY デバイスと使用する正しい端末制御コード・セットを識別する TERM 環境変数を検査します。
GNOMEのターミナルウィンドウを使用すると、デバイスはUNIX 98スタイルPTY:です/dev/pts/*
。ターミナルウィンドウがアクティブでX11 / Waylandキーボードイベントを受け取ると、GNOMEターミナルプロセスはそれをUTF-8文字に変換してPTYデバイスの「デフォルト」側に入力するので、CLIプロセスはそれを他の側から取得します(伝統的に)PTYデバイスの「スレーブ」側です。
出力は同じ方法で処理されます。 CLIプロセスはUTF-8文字と端末制御コード(TERM環境変数で識別された正しいコードセット)をPTYデバイスに書き込み、GNOME端末プロセスはPTY側でそれを読み取ります。デバイスを端末入力シミュレーションとして使用し、シミュレートされたビューをX11 / Waylandグラフィックとしてレンダリングします。
Linux仮想コンソールデバイス(/dev/tty[1..n]
)では、ターミナルエミュレーションがカーネルで実行されることを除いて、プロセスはほぼ同じであるため、ユーザースペースに表示される「デフォルト」PTYデバイスと同等のものはありません。
シリアルコンソールで作業している場合、CLIプロセスは「実際の」TTYデバイスであるシリアルポート(/dev/ttyS[0..n]
)を取得します。シリアルケーブルのもう一方の端にあるものは何でも残りを処理します。最近では、Linuxを実行しているノートブックminicom
やシリアルポートのサポートを含むかなり新しいPuTTYバージョンなどの他の端末エミュレーターがあります。それとも実際の端末かもしれません。実際のDigital VTシリーズ端末またはHP 700/96です。
またはあなたがいる場合真剣に逆計算を入力すると、1930年代の電気機械モンスターです。
答え2
テレコムの答えプログラムがターミナル(実際またはその他)と話す方法を説明してください。
あなたの質問には、グラフィック端末エミュレータで提供されていないときに端末処理が存在する別の部分があります。現在、3つの可能性があります。
ハードウェアテキストモード、カーネル端末エミュレーション。これは、上部に薄いコンソールレイヤーを持つテキストモードのサポートを提供するハードウェアに依存します(例えば
vgacon
でもmdacon
)。カーネルは実際の文字(属性を含む)をビデオバッファに書き込んでから、ハードウェア文字ジェネレータを使用して画面に表示するピクセルに変換します。カーソルはハードウェアによっても処理されます(点滅を含む、参照)。MS-DOSカーソルはどの文字ですか?詳細はこちら)。この設定では、「グラフィック」出力はできません(フォントをクリエイティブに使用しているにもかかわらず)。端末エミュレーション自体、例えば処理のために、VTエスケープコードを文字移動に変換します。カーネル別。フレームバッファ、カーネル端末エミュレーション。これは共通のフレームバッファ抽象化(
fbcon
)グラフィックフレームバッファを使用してテキストモードコンソールを提供します。この変形では、カーネルは文字をピクセルに変換し、カーソルを処理し、ディスプレイはテキストに限定されない。グラフィックプログラムも実行できます(フレームバッファに固有であるかどうか、例:ポビダまたは、SDLやGtkなどのライブラリでフレームバッファバックエンドを使用してください。端末エミュレーションは、最初のバリアントと同じ方法で処理されます。フレームバッファ、ユーザ空間端末エミュレーション。これは以前のバリエーションと同じグラフィックサポートを使用しますが、ユーザー空間端末エミュレータを追加します。キロメートルスコーン。この場合、テキスト出力を画面上のピクセルに変換する作業は、カーネルではなくプログラム内で行われます。