web-dev-qa-db-ja.com

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

私はこれをUbuntu 12.04とDebian 7の両方でテストしました。

echo $TERM

私は得る

xterm

しかし、ドロップダウンメニューの[ヘルプ]> [約]を使用すると、gnome terminal 3.4.1.1

これは私がgnome-terminalだけを使っているということですか?または単にxterm?または、gnome-terminalはxtermの拡張ですか?よくわかりません。

53
mulllhausen

$TERMの目的は何ですか?

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

たとえば、プログラムが色付きのテキストを表示したい場合、まず使用している端末が色付きのテキストをサポートしているかどうかを確認し、次にサポートしている場合は色付きのテキストを表示する方法を見つける必要があります。

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

それでは、赤いテキストを表示したいプログラムがあるとしましょう。基本的には、「xterm端末用の赤いテキスト用に送信する必要のあるバイトシーケンスを指定してください」というterminfoライブラリを呼び出します。次に、それらのバイトを取得して出力します。
tput setf 4; echo hiを実行して、自分で試すことができます。これにより、setf terminfo機能が取得され、必要な色である4のパラメーターが渡されます。


なぜgnomeターミナルがそれ自体についてあるのか:

ここで、リリースされたばかりの光沢のある新しいターミナルエミュレータがあり、システムのterminfoライブラリにはまだその定義がありません。アプリケーションが何かを行う方法を検索しようとすると、ターミナルが不明であるため失敗します。

あなたの端末がこれを回避する方法は、それが誰であるかについて嘘をつくことです。したがって、あなたのgnomeターミナルは "I'm xterm"と言っています。

Xtermは、X11の黎明期から存在している非常に基本的なターミナルであり、したがって、ほとんどのターミナルエミュレータは、サポートするものをサポートしています。したがって、gnomeターミナルがxtermであると言うと、terminfoライブラリに定義がある可能性が高くなります。

端末タイプについて嘘をつくことの欠点は、端末が実際にxtermよりもはるかに多くサポートする可能性があることです(たとえば、多くの新しい端末は256色をサポートしますが、古い端末は16色しかサポートしません)。したがって、トレードオフ、機能の追加、または互換性の向上があります。ほとんどの端末はより多くの互換性を選択するため、xtermとしてアドバタイズすることを選択します。

これをオーバーライドしたい場合は、多くの端末が動作を構成する何らかの方法を提供します。しかし、export TERM=gnome-terminalを実行することもできます。

50
Patrick

TERM環境変数は、ターミナルapplicationではなく、ターミナルtypeを示します。 TERMには特定の目的があります。その端末で実行されているアプリケーションに、端末との対話方法を通知します。

アプリケーションは、エスケープシーケンスを書き込むことで端末とやり取りします—印刷不可能な文字を含み、カーソルの移動、画面の一部の消去、現在の色の変更などの効果を持つ文字のシーケンス。昔は、物理端末の異なるブランドが異なっていましたエスケープシーケンスのセット。したがって、オペレーティングシステムは、端末タイプとその特性のデータベースを維持します。従来のデータベースは termcap (“ TERMinal CAPabilities”);です。最近の多くのシステムとアプリケーションは terminfo に切り替えました。両方のデータベースは端末タイプの名前でインデックスが付けられ、アプリケーションはTERM環境変数からの端末タイプ名を使用してそれらを照会します。

現在、ほとんどの端末は エスケープシーケンスの標準セット をいくつかの一般的な拡張セットとともに使用しているため、TERMの多くの異なる値は表示されません。ほとんどのGUI端末エミュレーターは、従来のX端末である xterm と互換性があります(これは引き続き使用および保守されています)。

Xtermとは異なる端末エミュレータは、独自の名前で独自のエントリを端末データベースに追加する場合があります。ただし、これはリモートシェルとうまく適合しません。マシンAで実行されているが、BからAにsshを介して起動されたなどの理由でマシンBに表示されているプログラムは、マシンAのターミナルデータベースにクエリを実行する必要があります。sshなどのリモートログインメソッドは、TERM環境変数ですが、これはBのターミナルデータベースにもAの値userのエントリがある場合にのみ役立ちます。したがって、多くのターミナルエミュレータは、広く知られているTERM=xtermを使用します。

端末の大まかな違いは、アプリケーションが端末とやり取りする方法ではなく、端末がユーザーとやり取りし、環境に適合する方法にあります。たとえば、GnomeターミナルはGnomeで見栄えがよく、タブやその他の機能を備えています。 KonsoleはKDEで見栄えがよく、タブやその他の便利な機能を提供します。 urxvtには小さなメモリ要件があります。 Console2はWindowsで実行されます。 screenとtmuxは、異なる親端末に接続できるセッションを提供します。等々。これらの機能はいずれも、端末で実行されているアプリケーションに影響を与えないため、ほとんどの端末エミュレータはTERM=xtermを使用します。

シェルが実行しているターミナルを確認するには、シェルの親を調べます。

ps -p$PPID

環境変数TERMは、使用している端末を意味するものではありません。

Quoting gnu.org

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

埋め込まれたカラーディレクティブでテキストを生成するとき、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」コマンドを使用すると、これらの機能の詳細なリストを取得できます。

12
mavillan