特別な ANSI エンコーディング設定を使用して、ターミナルコマンドまたは設定ファイルで動的に、あるいはターミナルエミュレータで既製のテーマを使用して、Linux ターミナルに色を追加することができます。 いずれにせよ、黒い画面に緑や琥珀色のテキストが表示されるのは、完全にオプションです。 この記事では、Linux を好きなだけカラフルに (あるいは単色に) できる方法を紹介します。
ターミナル機能
最近のシステムは通常少なくとも xterm-256color がデフォルトですが、もしターミナルに色を追加しようとしたが成功しない場合は TERM 設定を確認すべきです。 これは、リモートでコマンドを発行するためにしばしば使用されたテレタイプマシン (これが今日でも Linux に /dev/tty デバイスがある理由です) とは異なるものでした。 端末にはCRTモニターが内蔵されていたので、ユーザーはオフィスの端末に座ってメインフレームと直接やり取りすることができました。 CRTモニターは、製造も制御も高価でした。アンチエイリアスなど、現代のコンピュータ利用者が当たり前のように使っている技術にこだわるよりも、コンピュータに粗いASCIIテキストを吐き出させる方が簡単だったのです。 たとえば、1978 年に発売された新しい VT100 は ANSI カラーをサポートしていたので、ユーザーが端末タイプを vt100 と識別すれば、コンピュータはカラー出力を提供できましたが、基本的なシリアル デバイスにはそのようなオプションがなかったかもしれません。 同じ原理が今日でも適用され、TERM環境変数によって設定されます。 TERM の定義は echo:
$ echo $TERM
xterm-256color
で確認できます。旧式の (しかし後方互換性のために一部のシステムではまだ維持されている) /etc/termcap ファイルは、端末とプリンタの能力を定義していました。 その現代版は terminfo で、ディストリビューションによって /etc か /usr/share にある。 これらのファイルには、さまざまな種類のターミナルで利用可能な機能が列挙されており、その多くは歴史的なハードウェアによって定義されています: vt100 から vt220 までの定義があり、xterm や Xfce などの最近のソフトウェアエミュレータの定義もあります。 まれに、互換性のある機能をチェックするサーバにログインしたときに、 端末の種類が正しくないという警告やエラーが表示されることがありますが、 ほとんどのソフトウェアでは、使用している端末の種類は気にしません。 もし、使用している端末がほとんど機能を持たないプロファイルに設定されているが、 使用しているエミュレータがもっと多くの機能を持つことを知っている場合、 TERM 環境変数を定義することで設定を変更することができます。 これを行うには、~/.bashrc 設定ファイルで TERM 変数をエクスポートします:
export TERM=xterm-256color
ファイルを保存し、設定を再ロードします:
$ source ~/.bashrc
ANSI カラーコード
現代のターミナルは、「メタ」機能用に ANSI エスケープシーケンスを受け継いでいます。 これは、端末が文字の代わりに動作として解釈する特殊な文字列である。 例えば、このシーケンスは次のプロンプトまで画面をクリアする:
$ printf `3
Or you can use dircolors directly:
$ dircolors --print-database
# image formats
.jpg 01;35
.jpeg 01;35
.mjpg 01;35
.mjpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.tif 01;35
.tiff 01;35
If that looks cryptic, it’s because it is. The first digit after a file type is the attribute code, and it has six options:
- 00 none
- 01 bold
- 04 underscore
- 05 blink
- 07 reverse
- 08 concealed
The next digit is the color code in a simplified form. You can get the color code by taking the final digit of the ANSII code (32 for green foreground, 42 for green background; 31 or 41 for red, and so on).
Your distribution probably sets LS_COLORS globally, so all users on your system inherit the same colors. If you want a customized set of colors, you can use dircolors for that. First, generate a local copy of your color settings:
$ dircolors --print-database > ~/.dircolors
ローカルリストを好きなように編集してください。 選択に満足したら、ファイルを保存してください。 しかし、dircolors を使って LS_COLORS を設定するのに使えるシェルコードを取得することができます:
$ dircolors --bourne-shell ~/.dircolors
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:
pi=40;33:so=01;35:do=01;35:bd=40;33;01:
cd=40;33;01:or=40;31;01:mi=00:su=37;41:
sg=30;43:ca=30;41:tw=30;42:ow=34;
export LS_COLORS
この出力をコピーして ~/.bashrc ファイルに貼り付けて再読み込みしてください。
$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc
$ source ~/.bashrc
また、手動で変換する代わりに、起動時に Bash が .dircolors を解決するようにすることができます。 現実的には、頻繁に色を変更することはないでしょうから、これは過度に強引かもしれませんが、色調を頻繁に変更する予定がある場合には、選択肢のひとつとなるでしょう。 .bashrc ファイルに次のルールを追加します:
] && eval "`dircolors --sh $HOME/.dircolors`"
ホーム ディレクトリに .dircolors ファイルがある場合、Bash は起動時にそれを評価し、それに応じて LS_COLORS を設定します。
Color
ターミナルでの色は、特定の情報を視覚的にすばやく参照するための簡単な方法です。 しかし、色に頼りすぎるのはよくありません。 結局のところ、色は普遍的なものではありませんから、 他の人があなたのシステムを使う場合、あなたと同じように色を見るとは限りません。 さらに、コンピュータと対話するためにさまざまなツールを使用する場合、一部のターミナルまたはリモート接続では、期待する色 (またはまったく色) が提供されないことに気づくかもしれません。