私はこれをUbuntu 12.04とDebian 7の両方でテストしました。
echo $TERM
私は得る
xterm
しかし、ドロップダウンメニューの[ヘルプ]> [約]を使用すると、gnome terminal 3.4.1.1
。
これは私がgnome-terminalだけを使っているということですか?または単にxterm?または、gnome-terminalはxtermの拡張ですか?よくわかりません。
$TERM
の目的は何ですか?$TERM
変数は、アプリケーションがその端末の機能を利用するために使用します。
たとえば、プログラムが色付きのテキストを表示したい場合、まず使用している端末が色付きのテキストをサポートしているかどうかを確認し、次にサポートしている場合は色付きのテキストを表示する方法を見つける必要があります。
これが機能する方法は、システムが既知の端末とその機能のライブラリを保持することです。ほとんどのシステムでは、これは/usr/share/terminfo
にあります(termcapもありますが、これはあまり使用されていないレガシーです)。
それでは、赤いテキストを表示したいプログラムがあるとしましょう。基本的には、「xterm端末用の赤いテキスト用に送信する必要のあるバイトシーケンスを指定してください」というterminfoライブラリを呼び出します。次に、それらのバイトを取得して出力します。tput setf 4; echo hi
を実行して、自分で試すことができます。これにより、setf
terminfo機能が取得され、必要な色である4
のパラメーターが渡されます。
ここで、リリースされたばかりの光沢のある新しいターミナルエミュレータがあり、システムのterminfoライブラリにはまだその定義がありません。アプリケーションが何かを行う方法を検索しようとすると、ターミナルが不明であるため失敗します。
あなたの端末がこれを回避する方法は、それが誰であるかについて嘘をつくことです。したがって、あなたのgnomeターミナルは "I'm xterm"と言っています。
Xtermは、X11の黎明期から存在している非常に基本的なターミナルであり、したがって、ほとんどのターミナルエミュレータは、サポートするものをサポートしています。したがって、gnomeターミナルがxtermであると言うと、terminfoライブラリに定義がある可能性が高くなります。
端末タイプについて嘘をつくことの欠点は、端末が実際にxtermよりもはるかに多くサポートする可能性があることです(たとえば、多くの新しい端末は256色をサポートしますが、古い端末は16色しかサポートしません)。したがって、トレードオフ、機能の追加、または互換性の向上があります。ほとんどの端末はより多くの互換性を選択するため、xterm
としてアドバタイズすることを選択します。
これをオーバーライドしたい場合は、多くの端末が動作を構成する何らかの方法を提供します。しかし、export TERM=gnome-terminal
を実行することもできます。
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は、使用している端末を意味するものではありません。
環境変数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」コマンドを使用すると、これらの機能の詳細なリストを取得できます。