使用している端末の種類は何ですか?

使用している端末の種類は何ですか?

私はこれを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 hi。これにより、terminfo 機能が取得されsetf、必要な色である のパラメータが渡されます4


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 から A への ssh を介して起動されたためにマシン B に表示されるプログラムは、マシン A の端末データベースを照会する必要があります。ssh などのリモート ログイン方法は環境TERM変数を引き継ぎますが、これは B の端末データベースに A の user 値のエントリもある場合にのみ役立ちます。そのため、多くの端末エミュレーターは、TERM=xtermほぼ普遍的に知られている に固執しています。

ターミナル間の差別化は、概して、アプリケーションがターミナルと対話する方法ではなく、ターミナルがユーザーと対話し、その環境に適合する方法によって決まります。たとえば、Gnome Terminal は Gnome 上で見栄えがよく、タブやその他の便利な機能を提供します。Konsole は KDE 上で見栄えがよく、タブやその他の便利な機能を提供します。urxvt はメモリ要件が小さく、Console2 は Windows 上で動作します。screen と 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 に設定してみてください。rxvt

rxvt多くの場合、16色をサポートするように構築されています。TERMをrxvt-16colorに設定してみてください。konsole

コンソール多くの場合、16 色をサポートするようにビルドされています。TERM を konsole-16color または xterm-16color に設定してみてください。

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

答え4

を実行することで最初の質問に対する答えps -p $$、つまり現在の pid を持つプロセスが何であるかを知ることができることは注目に値すると思います。サンプル出力は次のとおりです。

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

どの端末であるかは明らかです。

関連情報