Colours with Linux terminals 日本語版 Thorbjoern Ravn Andersen, ravn@dit.ou.dk v1.4, 7 August 1997 佐藤亮一, GFG02131@niftyserve.or.jp, 鴨澤 眞夫, JCD00743@niftyserve.or.jp 共訳 13 March 1999 Linux ディストリビューションのほとんどには、ディレクトリの内容を表示す る 'ls' コマンドが同梱されています。様々な色を使うことで ls コマンドの 出力を見やすくすることができるのですが、好みの設定にするのは簡単ではな いかもしれません。この文書では、ls のカラー設定の変更について様々な角 度から解説しており、パッケージに含まれる ls の設定変更の他、 Slackware や RedHat には含まれていない ls 風ソフトウェア(これらは大抵のバージョ ンのUnix でも使えます)のありかも記しました。本文書の HTML 版は筆者の WWW ページ からも入手できます。 ______________________________________________________________________ 目次 1. はじめに 2. せっかちな人のための、すぐに使える方法 3. 必要なものを自分は持っているの? 4. どんな色が使えるか? 5. ls のカラー設定法 6. テキストモードのデフォルト表示を白黒以外に設定するには 6.1 xterm 6.2 仮想コンソール 6.2.1 /etc/issue 6.2.2 /etc/profile または .profile 6.2.3 /etc/login または .login 6.3 リモートログイン 7. ソフトウェア ______________________________________________________________________ 1. はじめに 近年はカラーディスプレイが非常に普及し、ユーザもこれを生かして色を利用 するプログラムを使うようになり始めました。このようなプログラムを使え ば、例えばプログラミング言語の予約語を見てすぐ分かるようにしたり、綴り 間違いのある単語をすぐに知ることができます。 Linux のテキストコンソールがカラー表示をサポートしていたので、すぐに GNU ls がカラー情報を出力するように変更され、バージョン 2.0 あたりの Slackware に含まれるようになりました。これらのパッチの改良版は ls の GNU 標準配布に組み込まれたので、現在では新しい Linux ディストリビュー ション全てにカラー対応の ls が入っているはずです。 この改訂版は、初版を全面的に改稿したもので、xterm の情報や、カーネルへ のパッチの情報も入れてあります。 この文書に書かれている情報は RedHat 4.1 で動作確認しました。また、これ は元々、Slackware のリリース 2.0.2 とカーネル 1.1.54 でコンパイルして いました。カーネルパッチの情報は Slackware 2.2.0 とカーネル 1.2.13、 デフォルトのシェルが tcsh という組合せについて調べた情報であり、後でカ ーネル 2.0.27 でも確認しました。読者の皆さんが他の設定や他のバージョン の UNIX を使っておられる場合には、お使いのオペレーティングシステムとそ のバージョン、標準でカラー表示がサポートされているかどうかを知らせてい ただけると幸いです。 2. せっかちな人のための、すぐに使える方法 読者の皆さんが最近の Linux ディストリビューションを使っておられるな ら、ホームディレクトリにある以下のファイルに対して以下に示す変更を加え ましょう。この変更は次回のログイン時から有効になります。 ~/.bashrc: alias ls="ls --color" ~/.cshrc: alias ls 'ls --color' これだけです! 自分専用の色の設定を行うために、``eval `dircolors $HOME/.colourrc`'' も行おうと思われるかもしれません。このファイルは ``dircolors -p >$HOME/.colourrc'' で生成され、後で編集できるように十分なコメントが付 いています。 3. 必要なものを自分は持っているの? まず最初に、正しく色を付けることができる ls を持っているか調べる必要が あります。Linux のテキストコンソールでこのコマンドを試してくださ い(xterm でも大丈夫ですが): % ls --color (% はシェルのプロンプトです): ls がこのオプションを認識できないというエラーメッセージが出たならば、 新しいバージョンの GNU fileutils パッケージをインストールする必要があ ります。お使いのディストリビューション用の適当なアップグレード用パッケ ージが無い場合には、GNU のミラーサイトから最新バージョンを入手し、ソー スから直接インストールしましょう。 エラーメッセージが出なければ、このコマンドを認識する ls を持っていると いうことです。しかし残念なことに、以前 Slackware(他のディストリビュー ションでも可能性があります)に入っていた古いバージョンには、動作がおか しいものもあります。RedHat 4.1 に入っている ls は問題の無いバージョン 3.13 です。 % ls --version ls - GNU fileutils-3.13 Linux のテキストコンソールで ``ls -- color'' コマンドを実行したら、シ ステムのデフォルト値にしたがって色が付いたはずです。ここで変更したいも のがあるかどうかを決めることができます。 このコマンドを xterm で実行した場合、色は変わったかもしれませんし、変 わっていないかもしれません。ls の場合と同様に、オリジナルの xterm プロ グラムは内部で動作するプログラムに対するカラー表示をサポートしていな かったのですが、最近のバージョンの xterm はこれをサポートしています。 お使いの xterm がカラー表示をサポートしていなければ、この文書の最後で 説明に従って新しいバージョンを入手しなければなりません。この場合はとり あえずテキストモードに切り替えて、先に進んでください。 4. どんな色が使えるか? 以下のスクリプトは(bash 用のスクリプトを送付してくださった多くの方々に 感謝します)、使用中のコンソールが表示できる色を全て表示するためのもの です。色が出ない場合、お使いのコンソールは ANSI のカラー選択機能をサポ ートしていません。 #!/bin/bash # Display ANSI colours. # esc="\033[" echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43" echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _" for fore in 30 31 32 33 34 35 36 37; do line1="$fore " line2=" " for back in 40 41 42 43 44 45 46 47; do line1="${line1}${esc}${back};${fore}m Normal ${esc}0m" line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m" done echo -e "$line1\n$line2" done 画面の左側に前景色(文字の色)番号が、枠外上に背景色番号が表示されます。 文字をボールド(高輝度)で表示したい場合、パラメータに "1" を付け加えま す。つまり、白い背景に明るい青の文字を表示する場合、パラメータは "33;47;1m" となります。ANSI 選択全体としては ESC [ 3 7 ; 4 4 ; 1 m となります。 注意: 今のところ、背景を高輝度にすることはできません。これにより、 (高 輝度の茶色である)黄色は、前景色以外では使えません。これはハードウェア の制約です。 色を以下に示します: 0 - 黒 4 - 青 3# は前景色 1 - 赤 5 - マゼンタ 4# は背景色 2 - 緑 6 - シアン 3 - 黄 7 - 白 ;1 はボールド 5. ls のカラー設定法 ls に標準で組み込まれている色の設定を修正したければ、ホームディレクト リに個人用の設定をコピーする必要があります。これは cd ; dircolors -p > .coloursrc で行うことができます。コメントが詳しく付いているこのファイルを変更した 後は、環境変数 LS_COLORS にこの内容を読み込む必要があります。これは次 のコマンドで行います: eval `dircolors .colourrc` ログインする度にこのコマンドを実行させるためには、この行を .bashrc/.cshrc/.tcshrc (お使いのシェルによって変わります)に追加する必 要があります。詳しくはオンラインマニュアルの dircolors(1) をご覧くださ い。 6. テキストモードのデフォルト表示を白黒以外に設定するには 使いたい新たなデフォルト値を端末ドライバに教えてやる必要があります。こ れを行うための標準の方法は存在しないのですが、Linux ならばプログラム setterm があります。 "setterm" は、端末データベースにある情報を使い、端末の属性を設定しま す。選択は以下のように行います: setterm -foreground black -background white -store ここでは、実際の変更に加えて "-store" を指定することにより、これを現在 のコンソールのデフォルト値としても設定しています。この機能を利用するた めには、現在の端末(環境変数 TERM)が termcap データベースにきちんと記述 されている必要があります。setterm が何らかの理由で動作しない場合には、 別の方法もあります: 6.1. xterm 以下の xterm のいずれかが利用できるはずで、少なくともこれらのいずれか はカラー表示をサポートしています。 xterm -fg white -bg blue4 color_xterm -fg white -bg blue4 color-xterm -fg white -bg blue4 nxterm -fg white -bg blue4 このうち、'color_xterm' はカラー対応の 'ls' をサポートしています。ここ で示した例では、SGI みたいなカラー設定にしています。 6.2. 仮想コンソール カーネルをキッパリ書き換えることもできますし、同時にエスケープシーケン スを使って仮想コンソールの実行時デフォルト値を与えることもできます。カ ーネルをコンパイルしたことがある方には、カーネルパッチをお勧めします。 カーネルソースのファイルは /usr/src/linux/drivers/char/console.c で す。このファイルの 1940 行目あたりに、 def_color = 0x07; /* white */ ulcolor = 0x0f; /* bold white */ halfcolor = 0x08; /* grey */ とあるので、これを適当に変更するわけです。私は、 def_color = 0x17; /* white */ ulcolor = 0x1f; /* bold white */ halfcolor = 0x18; /* grey */ として、青地に白文字の設定にしてあります。 上記の数字(16進数)はビデオカードが使う属性コードです。上のケタの数字 (私の設定では 1)は背景色、下のケタの数字は前景色(文字色)です。0=黒, 1= 青, 2=緑, 3=シアン, 4=赤, 5=紫, 6=茶色/黄色, 7=白となっています。「明 るい」色を使う場合は数字に 8 を加えてください。たいていの場合は 高輝度 の背景 == 文字が見にくい なので、良くない背景ということです (sjlam1@mda023.cc.monash.edu.au さんより)。ご注意を。 標準でないエスケープシーケンス(カーネルソースを眺めていて発見しました) を使って、ディスプレイごとに仮想コンソールに対する実行時のデフォルト値 を設定することができます。このシーケンスは ESC [ 8 ] であり、現在の前景色と背景色のデフォルト値を設定します。それから属性再 設定文字列(ESC [ m)を使って白・黒以外の色を選択します。 実際にはマシンを再起動する度に、このシーケンスをコンソールに echo する 必要があります。Linux マシンをどのように使っているかにより、いろいろと やり方があります: 6.2.1. /etc/issue Slackware が "Welcome to Linux xx.yy" の表示を行う部分です。スタンドア ローンのマシンなら、ここで echo をするのも良いでしょう(telnet で login するユーザーには有害かもしれませんが)。このファイルはブート時に自動的 に生成される(Slackware なら /etc/rc.d/rc.S で、RedHat なら /etc/rc.d/rc.local)ファイルで、以下のような部分を echo ""> /etc/issue echo Welcome to Linux `/bin/uname -a | /bin/cut -d\ -f3`. >> /etc/issue から ESCAPE="" echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue echo Welcome to Linux `/bin/uname -a | /bin/cut -d\ -f3`. >> /etc/issue に変更しましょう。 この命令は、カーソルをホームポジションに置き、カラー(青地に白文字)を設 定してセーブし、スクリーンの残りの部分をクリアします。この変更は、再起 動後に有効になります。このスクリプトを実行する sh は、\033 という書き 方を処理できないようなので、実際のエスケープキャラクターを挿入するのを 忘れないようにしてください。emacs なら C-q、vi なら C-v で入力できま す。 6.2.2. /etc/profile または .profile if [ "$TERM" = "console" ]; then echo "\033[37;44m\033[8]" # # or use setterm. setterm -foreground white -background blue -store fi 6.2.3. /etc/login または .login if ( "$TERM" == "console" ) then echo "\033[37;44m\033[8]" # or use setterm. setterm -foreground white -background blue -store endif 6.3. リモートログイン 先に示したように setterm が使えるはずです。繰り返しますが、あなたが 使っている端末のことを、ログイン先のマシンが十分に知っている必要があり ます。また、ログインに使う端末エミュレータも、カラー機能をサポートして いることが必要です。筆者の経験を基に、Linux 以外のプラットフォームで現 在のところもっともうまく VT100 エミュレーションができているものを示し ます: o MS-DOS: MS-Kermit (フリー、Microsoft 製品ではありません) o Windows 95/NT: Kermit/95 (シェアウェア) o OS/2: Kermit/95 (シェアウェア)。ただし、標準の telnet は 色を使うことができ、ローカルでカスタマイズできることに注意してくだ さい。 Kermit の詳しい情報については、 をご 覧ください。 7. ソフトウェア ここに記した情報は、すべて GNU/Linux をインストールしたマシンを想定し ています。別のもの(そうですねぇ、例えば X が走ってる Sun とか)を使って いる場合でも、自分でそれなりのソフトウェアを入手し、コンパイルすればよ いでしょう。 カラー版の 'xterm' は標準的な xterm のソースにパッチを当てたものです。 パッチはそこらの X11R6 サイトから取れます。R6.3 に入っている xterm は ネイティブでカラー表示をサポートしていると言われていますが、筆者はテス トしていません。 ftp://ftp.denet.dk/pub/X11/contrib/utilities/color-xterm-R6pl5-patch.gz 古いバージョンの X を使っている方は、付属の文書を参照してください。注 意:私はテストしてないもん。 `ls' は、GNU の fileutils パッケージに入っています。このパッケージは、 prep.mit.edu や、そのミラーサイトから取れます。少なくとも 3.13 を入手 してください。 ftp://ftp.denet.dk/pub/gnu/fileutils-3.XX.tar.gz 筆者は Solaris, SunOS, Irix でカラー版 ls のコンパイルに成功していま す。 この文書に対するご指摘、感想、その他を大歓迎します。読んだ方はぜひぜひ メール下さい。鴨澤眞夫、 JCD00743@niftyserve.or.jp と、佐藤亮一、 GFG02131@niftyserve.or.jp がメール アドレスです。 英語版文書へのフィードバックを歓迎します。e-mailアドレスは ravn@dit.ou.dk です。 -- Thorbjoern Ravn Andersen, 佐藤亮一、鴨澤眞夫 (原文の更新に合わせ、藤原輝嘉 fujiwara@linux.or.jp が日本語訳を更新しました。)