どの端末タイプを使用しますか?

どの端末タイプを使用しますか?

Ubuntu 12.04とDebian 7でこれをテストしました。私がするとき

echo $TERM

わかりました。

xterm

ただし、[ヘルプ]> [情報]ドロップダウンを使用すると表示されますgnome terminal 3.4.1.1

これは gnome-terminal だけを使うという意味ですか?それともxtermですか?それとも、gnome-terminalはxtermの拡張ですか?混乱しています。

答え1

それは何$TERMのためですか。

この$TERM変数は、アプリケーションが端末機能を利用するために使用されます。

たとえば、プログラムがカラーテキストを表示したい場合は、最初に使用している端末がカラーテキストをサポートしていることを確認し、サポートしている場合はカラーテキストを表示する方法を見つける必要があります。

動作方法は、システムが既知の端末とその機能のライブラリを維持することです。これはほとんどのシステムで使用できます/usr/share/terminfo(termcapもありますが、レガシーなので廃止されました)。

赤いテキストを表示したいプログラムがあるとしましょう。基本的に「と言うterminfoライブラリを呼び出します。xterm端末に赤いテキストを送信する必要があるバイトシーケンスを教えてください。その後、適切なバイトを取得して印刷
します。tput setf 4; echo hisetf4


GNOME端末が嘘をつくのはなぜですか?

今すぐリリースされた新しい新しいターミナルエミュレータがありますが、システムのterminfoライブラリにまだ定義されていないと想像してください。アプリケーションがどのような操作を行うかを見つけようとすると、端末が不明なため失敗します。

あなたの端末がこの問題を解決する方法は、それが誰であるかについて嘘をつくことです。したがって、GNOME端末に「私はxtermです」。

XtermはX11が起動して以来使用されてきた非常に基本的な端末なので、ほとんどの端末エミュレータはXtermの機能をサポートしています。したがって、gnome端末を介してxtermと言うと、terminfoライブラリに定義がある可能性が高くなります。

端末タイプについて嘘をつくことの欠点は、端末が実際にxtermよりも多くの機能をサポートできることです(たとえば、多くの新しい端末は256色をサポートしますが、古い端末は16色のみをサポートします)。したがって、より多くの機能を得ることとより多くの互換性を得ることとの間にはバランスがある。ほとんどの端末は、より高い互換性を選択するので、自分自身をxterm

この設定を無視したい場合は、多くの端末でこの動作を構成する方法を提供します。しかし、これもできますexport TERM=gnome-terminal

答え2

環境TERM変数は端末を表します。タイプ、端末ではありませんアプリケーションTERM特定の目的があります。その端末で実行されているアプリケーションに端末と対話する方法を教えてください。

アプリケーションは、印刷できない文字を含み、カーソルの移動、画面の一部の消去、現在の色の変更などの効果のある文字シーケンスであるエスケープシーケンスを作成して端末と対話します。過去には、物理​​端末のブランドごとに機能が異なりました。エスケープシーケンスのセットです。したがって、オペレーティングシステムは、端末タイプとその特性のデータベースを維持します。伝統的なデータベースは用語キャップ(「ターミナル機能」)多くの最新システムとアプリケーション用語情報。両方のデータベースは端末タイプ名で索引付けされ、アプリケーションはTERM環境変数の端末タイプ名を使用してそれらを照会します。

今日のほとんどの端末では標準エスケープシーケンスセットいくつかの共通拡張セットがあるため、さまざまな値は表示されませんTERM。ほとんどのGUI端末エミュレータは互換性があります。xterm、従来のX端末(まだ使用および保守中)です。

xterm以外の端末エミュレータは、独自の名前で端末データベースに独自のエントリを追加できます。しかし、これはリモートシェルではうまく機能しません。プログラムはシステムAで実行されますが、システムBに表示されます。たとえば、sshを介してBからAで始まる場合は、システムAの端末データベースを照会する必要があります。 SSHなどのリモートログイン方法は環境変数を渡しますTERMが、これはBの端末データベースにもAのuser値のエントリがある場合にのみ役立ちます。したがって、多くの端末エミュレータは、ほとんどよく知られてTERM=xtermいる項目に固執する。

一般に、端末間の違いは、アプリケーションが端末と対話する方法ではなく、端末がユーザーと対話して環境に適応する方法にあります。たとえば、Gnome端末はGnomeで見やすく、タブやその他の詳細を提供します。 KonsoleはKDEで見やすく、タブやその他の詳細を提供します。 Console2はWindowsの画面で実行され、tmuxは他の画面に接続できます。親端末など、これらの機能は端末で実行されるアプリケーションには影響しませんので、ほとんどの端末エミュレータはTERM=xterm

シェルがどの端末で実行されているかを調べるには(シェルが端末で直接実行されていると仮定する)、シェルの親を調べます。

ps -p$PPID

答え3

環境変数TERMは、使用している端末を表しません。

gnu.orgの引用:

環境変数 TERM には、テキストウィンドウ機能の識別子が含まれています。参照のために、 'infocmp'コマンドと 'man 5 terminfo'を使用してこれらの機能の詳細なリストを取得できます。

埋め込みカラーディレクティブを使用してテキストを生成すると、msgcatはTERM変数を確認します。今日のテキストウィンドウは通常、少なくとも8つの色をサポートしています。ただし、TERM変数がサポートされている8つの色のみを表す識別子に設定されている場合でも、テキストウィンドウは通常16種類以上の色をサポートします。そのような場合は、TERM変数を別の値に設定することをお勧めします。

xtermほとんどの場合、16色をサポートしています。 88色または256色をサポートすることもできます(どちらもサポートしていません)。 TERMをxterm-16color、xterm-88color、またはxterm-256colorに設定できます。価値を得る

価値を得る通常、16色がサポートされています。 TERMをrxvt-16colorに設定してみてください。コンソール

コンソールあまりにも一般的に16色をサポートしています。 TERMをkonsole-16colorまたはxterm-16colorに設定してみることができます。

TERMを設定したら、 "msgcat --color = test"を呼び出してそれを確認し、出力が適切なカラーマップのように見えることを確認できます。環境変数 TERM には、テキストウィンドウ機能の識別子が含まれています。 「infocmp」コマンドと「man 5 terminfo」を参照として使用して、これらの機能の詳細なリストを取得できます。

答え4

ps -p $$実行によって、プロセスの現在のPIDが何であるかを知っている元の質問に対する答えを見つけることができることは注目に値すると思います。出力例は次のとおりです。

    PID TTY          TIME CMD
3045221 pts/17   00:00:00 bash

それがどの端末であるかはかなり明らかです。

関連情報