it-swarm-ja.tech

端末はどのプロトコル/標準を使用していますか?

コマンドラインアプリケーションの「GUI」がネットワークを介してどのように通信されるのかと思っていました。ほとんどの場合、それは非常に単純(プレーンテキスト/入力)ですが、時にはより複雑(適性)です。

誰かが独自の端末を作成できるように、すべての端末の実装が同じように動作するように(色、配置など)、ある種の標準によって定義されていますか?

27
Olivier Lalonde

コンソールプログラムは通常、 curses またはその後継の1つ¹を使用して、話している種類のテキストユーザーインターフェイスを構築します。

これらの ライブラリ は、termcapおよびterminfoと呼ばれる2つのデータベースのいずれかを使用します。²これらのデータベースには マップ が含まれています。 。これらのデータベースで定義されているターミナルタイプの大部分は、 実際のターミナル の時代を生き延びなかったため、現在は歴史的にのみ重要です。

ANSI端末

最新のUnix端末エミュレーター³は、ANSI X3.64プロトコルまたはそれ以降のバリアントの1つを使用します。

  • ANSI X3.64:「ガラス端子」を制御するための標準— テレタイプ とは対照的に—それリモート端末が解釈する文字の特別なシーケンスに基づいています。たとえば、UnixボックスがANSI X3.64互換端末にカーソルを画面の左上隅に移動するように指示する場合は、文字ESC _[_ _1_ _;_を送信します。 _1_ H。最初の2文字は端末に制御シーケンスを期待するように指示します。1は行と列であり、Hは「カーソルの移動」を意味するコマンドです。⁴

    雑学:多くのPC BBSes もANSIコードを使用しました。 (実際には まだやります 。)

  • DEC VT1:最初に本当に人気のあったANSI互換のガラス端末は、Digital Equipment CorporationのVT100でした。 ANSIのde jure標準を市場で実証することにより、今日でも重要なde facto標準を確立しました。

    これがVT102プロトコルと呼ばれることがあります。これは、後でコストが削減された(したがって、より人気のある)バージョンのVT100に加えて、利用可能なすべての拡張オプションが組み込まれています。

    DEC端末プロトコルは下位互換性のあるシリーズで、1978年に導入された最初のANSI互換モデル(VT100)から、DECから端末ビジネスを購入した後の Boundless Technologies によって生成されたVT500シリーズモデルまで続きます。 (Boundlessは現在廃業していますが、その端末はまだ中古市場で時々ポップアップしています。)

  • xterm:ANSIとVT-whatever規格の一種のアマルガム。 xtermまたはその派生物などのGUI端末エミュレーターを使用している場合は常に、通常xterm端末プロトコルも使用します。通常は、より新しい_xterm-color_または_xterm-color256_バリアントです。

  • Linux:Linuxコンソールも、xtermプロトコルと同じ精神で、ANSI端末プロトコルの拡張バリアントを使用します。その拡張機能のほとんどは、PCとガラスターミナルの違いに関係しています。たとえば、IBMキーボードには、DEC VTにはないいくつかのキーがあります。 (およびその逆。)

    一部のUnixシステムにも独自のコンソール端末プロトコルがあります。 SCO Unixesなど)にはscoansi ANSI X3.64バリアントがあります。

典型的なターミナルエミュレータプログラムは雑種のようなものであり、単一のターミナルモデルを正確にエミュレートしません。 VT320までのすべてのDEC VTエスケープシーケンスの96%をサポートする可能性がありますが、ANSIカラー(VT525機能)や任意の数の行と列などの拡張機能もサポートします。プログラムがVT320プロトコルを使用することをcurses(またはその他)に指示したとしても、プログラムがそれらの機能を必要としない場合、理解できないコードの4%は見逃されない可能性があります。このようなプログラムは、VT320互換としてアドバタイズする可能性がありますが、厳密にはそうではありません。⁵

非ANSI端末

あなたがまだ時々遭遇する他のいくつかの注目すべき標準があります:

  • Wyse:ガラス端末の最も初期の独立した生産者の1つであるWyseは、1980年代初頭に ワークステーションコンピューティング はミニコンピューターの置き換えを開始しました。 Wyse端末は、VT100およびその他の一般的な端末プロトコルをエミュレートできましたが、独自のネイティブコードも持っていました。

  • IBM 327:これは厳密には「Unix」端末タイプではありませんが、UnixシステムをIBMメインフレームに接続する必要があるため、 IBM 3270シリーズターミナルエミュレータプログラムの作成。これはまだ使用されています。最近の IBM 5250シリーズ 端末のエミュレータもかなり一般的で、最近は AS/400およびSystem i ミニコンピュータへの接続に最もよく使用されます。

  • Tektronix 4014:PCとワークステーションが大幅にガラスターミナルを置き換え、ビットマップグラフィックを標準機能にする前は、高価なグラフィックターミナルがありました。上記のエスケープシーケンスと同様のテキストコマンドに応じて、画面にグラフィックを描画しました。おそらくこれらの中で最も人気があったのはTektronix 4010シリーズでした。

    彼らは使うのがとても楽しかったです。グラフィックを描画するプログラムを作成することもできますが、ローカル端末で描画するために単に実行する代わりに、その出力をファイルにリダイレクトできます。

    _$ ./my4014program > my-neat-graphic
    _

    次に、そのファイルを他の誰かに送信すると、Tekターミナルでそのファイルをcatして、プログラムがなくてもグラフィックを表示できます。魅力の一部は、これらの端末の描画がどれほど遅いかでした。そのため、グラフィックが数秒に​​わたって作成されるのを見ることができました。

今日のUnixターミナルエミュレーションの使用

curses環境変数を調べると、TERMなどのライブラリに使用するように要求している端末標準を確認できます。

_$ echo $TERM
xterm-color
_

別のシステムにsshすると、TERM変数が一緒に運ばれ、リモートのUnixボックスがローカル端末と通信する方法を認識します。

これらのプロトコルの多くはANSI X3.64バリアントであり、ユビキタスなASCIIおよびUTF-8文字コーディング標準が他の多くの面倒を見るので、誤ったTERM変数は通常壊滅的ではありません。壊れやすいのは、HomeやPage Upなどの拡張キー、Alt-whateverキーの組み合わせ、色や太字などの印刷上の表示機能です。


脚注:

  1. 最も一般的には、 ncurses です。

    curses APIには、 S-Lang などの競合他社も存在します。

  2. AT&Tは BSDのterminfoデータベースの代替としてtermcap を公布し、それを置き換えることに大部分成功しましたが、古いtermcapデータベースをまだ使用しているプログラムがあります。これは、現代のシステムで依然として見られる多くのBSDとAT&Tの違いの1つです。

    私のmacOSボックスには_/etc/termcap_はありませんが、_/usr/share/terminfo_はありますが、これらの2つのOSはコマンドラインレベルでよく似ていますが、FreeBSDの標準インストールは逆です。

  3. minicomxtermminttyGNOMEターミナルTerminal.app など.

  4. 適切に作成されたUnixプログラムは、これらの エスケープシーケンス を直接出力しません。代わりに、上記のライブラリのいずれかを使用して、「カーソルを(1,1)の位置に移動する」などと指示し、libraryが必要な端末制御コードを発行します。 TERM環境変数の設定に基づきます。これにより、プログラムを実行する端末の種類に関係なく、プログラムを適切に機能させることができます。

  5. 古いテキスト端末には、プログラムではあまり使用されない奇妙な機能がたくさんありました。そのため、一般的な端末エミュレータプログラムの多くは、これらの機能を実装していません。一般的な省略は、 sixel graphics およびdouble-width/double-heightテキストモードのサポートです。

    xterm のメンテナは、vttestなどのVT端末エミュレータをテストするための xterm というプログラムを作成しました。他のターミナルエミュレータに対して実行すると、サポートされていない機能を見つけることができます。

47
Warren Young