使いたい新たなデフォルト値を端末ドライバに教えてやる必要があります。こ れを行うための標準の方法は存在しないのですが、Linux ならばプログラム setterm があります。
"setterm" は、端末データベースにある情報を使い、端末の属性を設定します。 選択は以下のように行います:
setterm -foreground black -background white -store
ここでは、実際の変更に加えて "-store" を指定することにより、これを現在 のコンソールのデフォルト値としても設定しています。 この機能を利用するためには、現在の端末(環境変数 TERM)が termcap データ ベースにきちんと記述されている必要があります。setterm が何らかの理由で 動作しない場合には、別の方法もあります:
以下の 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 みたいなカラー設定にしています。
カーネルをキッパリ書き換えることもできますし、同時にエスケープシーケン スを使って仮想コンソールの実行時デフォルト値を与えることもできます。カー ネルをコンパイルしたことがある方には、カーネルパッチをお勧めします。
カーネルソースのファイルは /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 マシンをどのように使っているかにより、いろいろと やり方があります:
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="<replace with a single escape character here>"
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 で入力できます。
if [ "$TERM" = "console" ]; then
echo "\033[37;44m\033[8]" #
# or use setterm.
setterm -foreground white -background blue -store
fi
if ( "$TERM" == "console" ) then
echo "\033[37;44m\033[8]"
# or use setterm.
setterm -foreground white -background blue -store
endif
先に示したように setterm が使えるはずです。繰り返しますが、あなたが使 っている端末のことを、ログイン先のマシンが十分に知っている必要がありま す。また、ログインに使う端末エミュレータも、カラー機能をサポートしてい ることが必要です。筆者の経験を基に、Linux 以外のプラットフォームで現在 のところもっともうまく VT100 エミュレーションができているものを示しま す:
Kermit の詳しい情報については、 http://www.columbia.edu/kermit/ をご覧ください。