知識ベース

Linuxコンソール

Linuxコンソールは、Linuxカーネルの内部にあるシステムコンソールです(システムコンソールは、すべてのカーネルメッセージと警告を受信し、シングルユーザーモードでのログインを許可するデバイスです)。 Linuxコンソールは、カーネルお​​よびその他のプロセスがテキスト出力をユーザーに送信し、ユーザーからテキスト入力を受信する方法を提供します。ユーザーは通常、コンピューターのキーボードでテキストを入力し、コンピューターのモニターで出力テキストを読み取ります。 Linuxカーネルは、仮想コンソール(論理的に分離されているが、同じ物理キーボードとディスプレイにアクセスするコンソール)をサポートしています。 Linuxコンソール(およびLinux仮想コンソール)は、LinuxカーネルのVTサブシステムによって実装され、ユーザースペースソフトウェアに依存しません。これは、端末をエミュレートするユーザー空間プロセスであり、通常はグラフィック表示環境で使用される端末エミュレータとは対照的です。

Linuxコンソールは、カーネルの最初の機能の1つで、1991年にLinus Torvaldsによって最初に作成されました(Linuxの歴史を参照)。主に2つの実装があります:フレームバッファとテキストモード。フレームバッファの実装は、最新のLinuxディストリビューションのデフォルトであり、カーネルモード設定とともに、ディスプレイハードウェアおよびシステムの起動中にグラフィックを表示するなどの機能のカーネルレベルのサポートを提供します。レガシーテキストモードの実装は、CGA、EGA、MDA、およびVGAグラフィックカードを搭載したPC互換システムで使用されていました。非x86アーキテクチャでは、グラフィックカードにテキストモードが実装されていないため、フレームバッファモードが使用されていました。 Linuxコンソールは、固定サイズのビットマップ、モノスペースフォントを使用します。通常、デフォルトは1文字あたり8x16ピクセルです。

Linuxコンソールはオプションのカーネル機能であり、ほとんどの組み込みLinuxシステムでは有効になりません。これらのシステムは通常、代替のユーザーインターフェイス(Webベースなど)を提供するか、すぐに起動してグラフィカルユーザーインターフェイスを起動し、これをユーザーと対話する主要な手段として使用します。 Linuxコンソールの他の実装には、更新可能な点字ディスプレイとシリアルポートコンソールをサポートする点字コンソールが含まれます。

目的

Linuxコンソールは、カーネルお​​よびその他のプロセスがテキストベースのメッセージをユーザーに出力し、ユーザーからテキストベースの入力を受け取る方法を提供します。 Linuxでは、仮想端末、シリアルポート、USBシリアルポート、テキストモードのVGA、フレームバッファーなど、いくつかのデバイスをシステムコンソールとして使用できます。一部の最新のLinuxベースのシステムでは、カーネルベースのテキストモードの入出力が非推奨になり、代わりにシステムの起動中にグラフィカルロゴまたはプログレスバーが表示され、その後にグラフィカルユーザーインターフェイスがすぐに開始されます(X.Orgサーバーなど)デスクトップディストリビューション、またはAndroidのSurfaceFlinger)。

カーネルの起動中、コンソールは一般にカーネルの起動ログを表示するために使用されます。起動ログには、検出されたハードウェアに関する情報と、起動手順のステータスの更新が含まれます。この時点では、カーネルは実行中の唯一のソフトウェアであるため、ユーザー空間(syslogなど)を介したロギングは不可能であるため、コンソールはこの情報を出力する便利な場所を提供します。カーネルの起動が完了すると、カーネルはinitプロセスを実行し(コンソールに出力も送信します)、バックグラウンドデーモンの起動を含む残りのシステムの起動を処理します。

initブートプロセスの完了後、コンソールを使用して複数の仮想端末を多重化します(Ctrl-Alt-F1、Ctrl-Alt-F2など、Ctrl-Alt-LeftArrow、Ctrl-Alt-RightArrowを押すか、 chvt )。各仮想端末でgettyプロセスが実行され、次に/ bin / loginが実行されてユーザーが認証されます。認証後、コマンドシェルが実行されます。コンソールなどの仮想端末は、Linuxカーネルレベルでサポートされています。

Linuxコンソールは「linux」のターミナルタイプを実装し、使用するエスケープシーケンスはconsole_codesのマニュアルページにあります。

仮想コンソール

仮想コンソールを使用すると、複数のテキストバッファーを保存できるため、異なるコンソールプログラムを同時に実行できますが、異なるコンテキストでユーザーと対話できます。ユーザーの観点からは、これはいくつかの独立したコンソールの錯覚を作成します。

各仮想コンソールには、独自の文字セットとキーボードレイアウトを設定できます。 Linux 2.6では、仮想コンソールごとに異なるフォントをロードする機能が導入されました(2.6より前のカーネルバージョンは、オンデマンドでのみフォントを変更します)。

テキストモードコンソール

テキストモードの実装は、テキストベースのビデオモードを実装するレガシーCGA / EGA / MDA / VGAビデオカードを搭載したPCベースのシステムで使用されます。テキストモードでは、カーネルは文字の2D配列をビデオカードに送信し、ビデオカードは表示のために文字をピクセルに変換します。

フォント、文字セット、キーボードレイアウト

テキストバッファは、コードポイントと文字属性の観点からテキスト画面の内容を記述するVGAメモリの一部です。通常、テキストバッファとフォントのコードポイントは、画面に文字を配置するためにテキスト端末のセマンティクスで使用されるエンコードとは異なります。画面上のグリフのセットは、現在のフォントによって決まります。テキスト画面は、console.cおよびconsolemap.cドライバーによって処理されます。 consolecharsと呼ばれるフォントと端末エンコーディングを変更するためのユーティリティがあります。

Linuxカーネル(keyboard.cドライバー)は、キーボード入力(キーボードレイアウト)をほぼ完全にサポートしていますが、異なる文字セットとの相互作用が悪いため、少し一貫性がありません。レイアウトは、 loadkeysユーティリティによってロードされます。

これら2つのユーティリティと対応するデータファイルは、多くのLinuxディストリビューションに同梱されているLinux コンソールツール http://lct.sourceforge.net/にパックされています。

カーネルレベルでのLinuxの国際化への取り組みは、Markus KuhnとAndries Brouwerによって1994年に始まりました。

テキストモード

Linuxコンソールは、VGAスタイルのテキストモードをサポートできますが、カーネル自体には、これらのモードを設定する手段が非常に限られています。 SVGATextModeは、標準のEGAおよびVGAモードよりも複雑なテキストモードを有効にするのに役立ちます。コンソールツールと完全に互換性がありますが、dosemu、SVGAlib、ディスプレイサーバーとの競合がいくつかあります。

現在、異なる仮想コンソールでの異なるモードのサポートはありません。

WindowsおよびDOSとの比較

(すべてのバージョンの)Microsoft Windowsは、コンソールを完全に機能的にサポートしていません。そこに匹敵する機能は、アプリケーションソフトウェア専用ですが、Win32コンソールです。

特徴 Linux DOS
VGAテキスト属性はいはいはい
カスタムフォント可能可能可能
キャラクターセット最大512個のグリフ(VGAテキスト上)、
任意のコードページまたはUTF-8
223または256文字(アクセス方法に依存)、
任意のコードページ、またはUnicode
実行時の文字セットの切り替え可能不可能な PoVに依存
端末エミュレーションはい、ANSI互換
(TERM = linux)
はい、Windows 10「しきい値2」以降はい、ANSI
(ANSI.SYSを使用)
テキストモードとGUIの実行時切り替え技術的には可能ですが、通常は実用的ではありません GUIに戻る方法はありませんアプリケーションに依存
実行時に変化する行と列の数可能可能アプリケーションに依存
アプリケーションを切り替える可能可能限定
(一部のTSRはアクティブ化される場合があります)
非標準モード可能不可能な可能
マウスのサポートはい(gpmまたは同等のものを使用) アプリケーションに依存システムとアプリケーションに依存
  1. a b Windows NTベースのシステム以降でサポートされているUnicode。コードページの切り替えとUnicodeの使用を許可しますが、ウィンドウモードでのみ使用できます。また、NTシステムはVGAと互換性のない独自のテキストバッファ形式を使用するため、ハードウェアテキストモードでオーバーヘッドが発生します。 NT以外のバージョンのWindowsではUnicodeはサポートされていません
  2. 非ASCIIキーボードレイアウトとしてので、欠陥のある実装を再ロードする必要があります。
  3. 最近のカーネルではカーネルモードの設定は、いくつかのビデオハードウェアのため、これはより実用的にします。

Linuxフレームバッファーコンソール

Linuxフレームバッファー(fbdev)はグラフィックハードウェアに依存しない抽象化レイヤーで、元々はLinuxカーネルがテキストモード表示を持たないApple Macintoshなどのシステムでテキストコンソールをエミュレートできるように実装されました。現在では、任意のプラットフォームでカーネルスペーステキストモードエミュレーションを提供しています。 (現在メンテナンスされていない)SVGATextModeに対する利点は、信頼性と優れたハードウェア互換性です。また、VGAテキストモードのすべての技術的な制限を超えることができます。

Linuxフレームバッファコンソールは、文字を描画する方法のみがVGAコンソールと異なります。キーボードイベントの処理と仮想コンソールのサポートはまったく同じです。

Linuxシリアルポートコンソール

Linuxシリアルコンソールはシリアルポート経由のコンソール実装であり、カーネル構成のオプションCONFIG_SERIAL_CONSOLEによって有効になります。一部の組み込みシステムや、オペレーターとの直接の対話が予期されないサーバーで使用される場合があります。シリアルコンソールを使用すると、システムに対して同じアクセスモードを使用できますが、通常、RS-232の帯域幅が狭いため、速度は遅くなります。シリアルコンソールは、多くの場合、組み込みシステム用のソフトウェアの開発中に使用され、デバッグポートを介してアクセス可能なままになる場合があります。

制御文字

コンソールは、多くの制御文字に応答します。

制御キャラクター ASCII名説明
^ G ベルベル音
^ H BS バックスペース
^ I HT 水平タブ
^ J LF 改行
^ K VT 垂直タブ
^ L FF フォームフィード
^ M CR キャリッジリターン
^ N そうシフトアウト
^ O SI シフトイン
^ X できるエスケープシーケンスをキャンセル
^ Z サブエスケープシーケンスをキャンセル
^ ESC エスケープ/エスケープシーケンスの開始
^? DEL なし
ALT- ^ 該当なし開始コマンドシーケンス
制御シーケンス説明
^ M 逆改行
^ D 改行
^ E キャリッジリターンとラインフィード
^ H タブストップを設定する
^ 7 カーソルを保存
^ 8 カーソルを復元
^> キーパッドを数値モードに切り替えます
^ = キーパッドをアプリケーションモードに切り替える
^ c 端末設定をリセットする
^ Z 端末IDを印刷する

^の場合、エスケープキーを押します。

コンソールは、拡張エスケープシーケンス、ANSI CSIモードシーケンス、およびDECプライベートモードシーケンスもサポートしています。これらの拡張シーケンスは、色、点滅などの視覚効果、下線、強度と反転ビデオ、ベル音の周波数と持続時間、VESA画面のブランキング間隔を制御できます。テキストブランキング以外に、VGAアダプターをスタンバイ状態にする既知の方法はありません。

今後の計画

Kmsconプロジェクトは、Linuxコンソールに代わる最新のユーザー空間の作成を目指しています。開発の優先事項には、マルチモニター設定のサポート、PangoによるUnicodeフォントレンダリング、XKBキーボード処理、GPU OpenGLアクセラレーションが含まれます。現在のカーネル実装に関する苦情には、「カーネル空間のユーザーインターフェースであり、コードのメンテナンスが不十分であり、キーボードの処理が不適切であり、フォントレンダリングが不適切であり、モード設定とマルチヘッドサポートが見当たらず、マルチ座席認識、およびVT102準拠に制限されたホットプラグ処理のみが制限されています。」

コンソールに関連する/ dev /エントリのリスト

名前メジャーマイナー説明
/ dev / tty0 c 4 0 「現在のコンソール」
/ dev / tty1

/ dev / tty63
c 4 1

63
仮想コンソール
(キーボード制御)
/ dev / ttyS0
c 4 64
システムコンソールに適したシリアルポート
/ dev / vcs c 7 0 仮想コンソール画面
/ dev / vcsは、現在の仮想スクリーンのコンテンツです。
/ dev / vcs1

/ dev / vcs63
c 7 1

63
仮想画面のテキスト(文字ポインターテーブル)。
/ dev / vcsa1

/ dev / vcsa63
c 7 129

191
属性付きの仮想コンソール画面
仮想テキストバッファの完全な画像。最初の4バイトには、行数、列数、カーソル位置が含まれます