

端末エミュレータ、または端末アプリケーションとは、別のディスプレイアーキテクチャ内でビデオ端末をエミュレートするコンピュータプログラムです。一般的にはシェル端末やテキスト端末と同義語として使われますが、端末という用語はグラフィカルインターフェースを含むすべてのリモート端末を包含します。グラフィカルユーザーインターフェース内の端末エミュレータは、しばしば端末ウィンドウと呼ばれます。
ターミナルウィンドウを使用すると、テキストターミナルとそのすべてのアプリケーション(コマンドラインインターフェイス(CLI)やテキストユーザーインターフェイス(TUI)アプリケーションなど)にアクセスできます。これらのアプリケーションは、同じマシン上で実行することも、 Telnet、SSH、ダイヤルアップ、または直接シリアル接続を介して別のマシン上で実行することもできます。Unix系オペレーティングシステムでは、1つ以上のターミナルウィンドウをローカルマシンに接続するのが一般的です。
端末は通常、色やカーソル位置などを制御するためのエスケープシーケンスのセットをサポートしています。例としては、ECMA-48、ANSI X3.64、ISO/IEC 6429などの端末制御シーケンス規格群が挙げられます。
コンピューティングの黎明期、対話型コンピューティングの登場とともに、主流のモデルは中央コンピュータと複数の端末が接続されたものでした。[ 1 ]この構成は、集中型またはメインフレーム型として知られ、強力な中央コンピュータがすべての処理タスクを実行し、端末はユーザーがシステムと対話するための入出力デバイスとして機能しました。これらのシステムは当初、文字ベースでした。

文字指向端末は、データブロック単位で通信するブロック指向端末とは異なり、ホストと1文字ずつ通信するタイプのコンピュータ端末です。実装やプログラミングが容易なため、最も一般的なデータ端末となっています。メインフレームコンピュータやターミナルサーバへの接続は、RS-232シリアルリンク、イーサネット、またはその他の独自プロトコルを介して行われます。
文字指向端末は「ダム端末」または「スマート端末」に分類されます。ダム端末[ 2 ]は、限られた数の制御コード(CR、LFなど)を解釈できますが、行のクリア、画面のクリア、カーソル位置の制御などの機能を実行する特殊なエスケープシーケンスを処理する機能はありません。この文脈では、ダム端末は、基本的に機械式テレタイプと同じ限られた機能しか持たないため、ガラス製テレタイプと呼ばれることもあります。このタイプのダム端末は、環境変数TERMをに設定することで、最新のUnixライクなシステムでもサポートされていますdumb。スマート端末またはインテリジェント端末は、特にVT52、VT100、またはANSIエスケープシーケンスを処理する機能も備えています。
1980年代にパーソナルコンピュータが普及すると、ユーザーのパーソナルコンピュータ上でソフトウェアを実行できるようになり、高価で場所を取るハードウェア端末を、追加機能を持つものに置き換える機会が生まれました。[ 3 ]すぐに、PC上でハードウェア端末の機能をエミュレートできるソフトウェアが利用可能になりました。DOS用のそのようなソフトウェアの例としては、 1988年に公開され、DEC VT102端末をエミュレートできたTelixやTelemateなどがあります。[ 4 ]
1980年代には、通常Unix系OSを搭載したワークステーションが普及した。Unixシステムは通常、ローカル接続端末またはダイヤルアップ端末を介してコマンドラインへのアクセスを提供した。Unixワークステーションは、主にグラフィカルユーザーインターフェース(GUI)を介して使用されるように設計されており、コマンドラインへのアクセスを提供するために、GUIにはローカル接続端末のように動作する端末エミュレータアプリケーションが含まれていた。
1990年代には、WindowsやOS/2などの新しいオペレーティングシステムが登場し、Windows用のTelix、OS/2用のZOC、1998年にWindows向けに最初にリリースされ、今日でも(派生版とともに)非常に人気のある選択肢となっているPuTTYなどのターミナルエミュレータの技術的基盤を提供しました。 [ 5 ]
特にデータセンターやクラウドサーバー上で動作するLinuxのサーバー上での成功により、[ 6 ]文字ベースの端末エミュレータを介してリモートコンピュータにアクセスする必要性は依然として残っている。
VT52、VT100、VT220、VT320、IBM 3270/8/9/E、IBM 5250、IBM 3179G、Data General D211、Hewlett-Packard HP700/92、Sperry/Unisys 2000シリーズUTS60 、 Burroughs/Unisys Aシリーズ T27/TD830/ET1100、ADDS ViewPoint、AT386、Siemens Nixdorf (SNI) 97801、Televideo 925、Wyse 50/60などの物理ハードウェア端末向けに、多くの端末エミュレータが開発されてきました。
xtermなどの一部の端末エミュレータは、エミュレートされた端末には存在しない追加機能を実装しています。[ 7 ]
さらに、 SunワークステーションコンソールやLinuxコンソールなど、さまざまなシステムコンソール「端末」をエミュレートするプログラムも開発されている。
最後に、一部のエミュレーターは、 ANSIエスケープコードの規格など、一連の規格を参照するだけです。
こうしたプログラムは、 DOS、LinuxやmacOSなどのUnix系システム、Windows、携帯電話や産業用ハードウェアに搭載されている組み込みオペレーティングシステムなど、多くのプラットフォームで利用可能です。
過去には、UnixやUnixライクなシステムはRS-232ポートなどのシリアルポートデバイスを使用し、 それらの/dev/*デバイスファイルを提供していました。 [ 8 ]
ターミナルエミュレータでは、これらのデバイスファイル自体が一対の擬似端末デバイスによってエミュレートされます。これらは、ホストコンピューティングエンドポイントへの物理ポート/接続をエミュレートします。これは、オペレーティングシステムのAPIによって提供されるハードウェア、またはrlogin、telnet、SSHなどのソフトウェアによって提供されます。[ 9 ]例えばLinuxシステムでは、これらはそれぞれ/dev/ptyp0(マスター側)と/dev/ttyp0(スレーブ側)の擬似端末デバイスになります。
また、 のような特別な仮想コンソールファイルもあります/dev/console。テキスト モードでは、 ファイルに書き込むと仮想コンソールにテキストが表示され、ファイルから読み込むとユーザーが仮想コンソールに書き込んだテキストが返されます。他のテキスト ターミナルと同様に、プログラムが使用できる特別なエスケープ シーケンス、制御文字、関数もあり、 ncursesなどのライブラリを介して最も簡単に使用できます。より複雑な操作には、プログラムはコンソールおよびターミナルの特別なioctl/dev/vcs1システム コールを使用できます。やなどの vcs ("仮想コンソール スクリーン") および vcsa ("属性付き仮想コンソール スクリーン") のパターンを使用してデバイスを比較できます/dev/vcsa1。[ 10 ]
一部のターミナルエミュレータには、ターミナルとターミナル内で実行されているプログラム間の良好な相互運用を容易にするために、ターミナルの動作を設定するためのエスケープシーケンスも含まれています。たとえば、ペーストの括弧を設定する場合などです。
仮想コンソールは、 init/etc/inittabが読み込むファイルで設定できます。通常、複数の仮想コンソールに対してテキストモードのログインプロセスgetty が起動されます。X Window System は、ファイルまたはX ディスプレイマネージャで設定できます。多くのLinuxディストリビューションでは、 initの代わりにsystemd を使用しており、systemd でも仮想コンソールの設定が可能です。/etc/inittab
仮想コンソールにアクセスするために使用される代表的なLinuxシステムプログラムには、以下のようなものがあります。
chvt現在の仮想コンソールを切り替えるopenvt新しい仮想コンソールでプログラムを実行するdeallocvt現在使用されていない仮想コンソールを閉じる端末エミュレータはローカルエコー機能を実装している可能性があり、これは誤って「ハーフデュプレックス」またはさらに少し不正確な「エコープレックス」(これは正式には入力表示オプションではなくエラー検出メカニズムです)と呼ばれることがあります。[ 11 ] [ 12 ] [ 13 ] [ 14 ]
端末エミュレータは、ローカル編集、別名「行単位モード」を実装する場合があります。これは誤って「半二重」と呼ばれることもあります。このモードでは、端末エミュレータは入力行全体をホストシステムに送信します。ユーザーは行を入力して編集しますが、編集中は端末エミュレータ内にローカルに保持されます。ユーザーが編集完了を通知するまで送信されません。通常、キーボードのキーまたはユーザーインターフェイスの何らかの「送信」ボタンで通知します。その時点で、行全体が送信されます。行単位モードはローカルエコーを伴います。そうでないと、ユーザーは編集および構築中の行を見ることができないためです。[ 11 ] [ 15 ]ただし、行単位モードはエコーモードとは独立しており、ローカルエコーは必要ありません。たとえば、パスワードを入力する場合、ローカル編集による行単位入力は可能ですが、ローカルエコーは無効になります(そうしないとパスワードが表示されてしまいます)。[ 16 ]↵ Enter
行単位モードの複雑さは、telnet プロトコルの行単位モード オプションによって例示されます。これを正しく実装するには、端末エミュレータ プログラムによって提供されるネットワーク仮想端末の実装が、ローカルで行を編集している最中に到着する「割り込み」および「中止」イベントを認識して適切に処理できる必要があります。[ 17 ]
非同期端末では、データはいつでもどの方向にも流れることができます。同期端末では、プロトコルによって誰がいつデータを送信できるかが制御されます。IBMメインフレームコンピュータで使用されるIBM 3270ベースの端末は、同期端末の一例です。これらは基本的に「画面単位」モード(ブロックモードとも呼ばれる)で動作します。ユーザーは、更新された画面を単一のアクションとしてリモートマシンに送信する前に、ページに多数の変更を加えることができます。
3270プロトコルをシミュレートする端末エミュレータは、ほとんどのオペレーティングシステムで利用可能であり、 z9などのシステムを管理するユーザーだけでなく、 CICSなどの対応するアプリケーションを使用するユーザーも利用できます。
同期端末の他の例としては、IBM 5250、ICL 7561、Honeywell Bull VIP7800、Hewlett-Packard 700/92などが挙げられる。
仮想コンソール(仮想端末とも呼ばれる)は、パーソナルコンピュータやワークステーションのキーボードとモニターを使用してエミュレートされるテキスト端末です。「テキスト」という言葉が重要なポイントです。仮想コンソールはGUI端末ではなく、グラフィカルインターフェース内で動作するわけではありません。仮想コンソールはほとんどのUnix系システムに搭載されています。主にグラフィカルデスクトップ環境を使用せずに、サーバーにアクセスして操作するために使用されます。
の画面の現在の内容は、デバイス/dev/vcsN(`vcs`は`仮想コンソール画面`の略)を使用してアクセスできます。[...] プログラムからは通常、代わりに/dev/vcsaN(`属性付き仮想コンソール画面`)を使用する方が良いでしょう。これは、行数と列数、カーソルの位置を示すヘッダーから始まります。vcs(4)を参照してください。