FreeBSDでは、デフォルトのコンソールからは、文字色がカラーで表示させることができます。
そのため、lsコマンドのオプション-Gを指定するとディレクトリなどは、文字色がカラーで出力されます。
しかし、Tera Term を使ってSSHで接続していたら、この文字色の変化がありませんでした。( そもそもTera Termの古いバージョンを使っていたのも一つの原因だったんですけどね)
そこで、どんな接続でも、ちゃんとカラー表示させるための設定を調べてみました。
- 目次
- 履歴
2012年2月7日 初版
カラー表示されない理由
FreeBSDの場合、lsコマンドに-Gオプションを付加されていた場合、端末情報 ( /etc/termcap にテキストによる定義情報が保存してある ) に従って色情報を出力するか否かを判断しています。
つまり、その端末情報にカラー対応端末であることが定義されていない場合には、色情報を付加されないのです。
ある意味、これは、非常に正しいですよね。
また、Linuxのlsコマンドは、FreeBSDを含むBSD系のlsコマンドとは、違います。Linuxのそれは、正確にはGNU lsと呼ばれるもので、–colorオプションを指定すると必ず色情報を出力します。
つまり、接続されている端末が何であれ、色情報とともに出力情報をプリントアウトします。
このため、同じTera Termを使っても、Linuxでは画面にカラー表示されるが、FreeBSDではモノクロ表示される・・という変な現象が発生していたわけです。
結局、理由は簡単で
Tera Term の設定ファイル ( TERATERM.INI : インストール先ディレクトリにある ) の端末タイプを以下のように設定していたためでした。
|
この設定では、vt100 をFreeBSDでもLinuxでもカラー非対応端末と認識します。
この問題を回避するためには、カラー対応の端末タイプにすればOKなわけです。
以降では、カラー対応の端末タイプ ( 例として vt100-color ) を用いて、対処の仕方を簡単に解説してみます。
termcapは、端末タイプを定義するファイルになります。
たとえば、vt100-colorは、以下のように定義されています。
|
pa#64:これは、64色の色の組み合わせが使える端末である・・という意味です。
Co#8:これは、8色の色が使える端末である・・という意味です。
一般的に、Coで定義されている色数(ここでは8)の2乗が、paの値(ここでは64)となります。
つまり、vt100-color という端末タイプは、最大で64色の組み合わせでカラー表示できるということになります。
その他、端末タイプの内容を詳しく知りたい方は、
|
カラー表示されない対処
結局は、先に記述したとおり端末種別の設定誤りなのですが、対処として、大きく2つあると思います。
SSHクライアントソフト( ここでは、Tera Term ) の設定で、端末種別を設定するやり方と
ログインしたところでシェルの設定時に、自動的に端末種別を設定してしまうやり方があります。
ここでは、簡単にその2つのやり方を解説しておきます。
- SSHクライアントソフト( ここでは、Tera Term ) で対応する方法
ここでは、Tera Term の設定例を解説します。
Tera Term では、接続先へ送信する端末種別情報を Tera Term の設定ファイル ( TERATERM.INI : インストール先ディレクトリにある )に持っています。 ここでは、その情報を編集してみます。
[Tera Termインストール先ディレクトリ]\TERATERM.INI 内のTermType情報を以下のように編集すればOKです。
( このファイルは、テキストファイルなので、メモ帳などで編集できます。)
TermType=vt100-color
設定を終えたら、Tera Term を再起動してみましょう。
ls -G コマンドで、ディレクトリ情報がカラー表示されればOKです。
- ログインシェルで対応する方法
いろいろなSSHソフトウェアを使ってログインする可能性がある場合は、ログインユーザの .bashrc , .cshrc に設定することでも対応することができます。
先のvt100-colorを設定する例は、以下のとおりです。
[ .bashrc の場合 ]
$ vi ~/.bashrc ... export TERM=vt100-color
[ .cshrc の場合 ]
$ vi ~/.cshrc ... setenv TERM vt100-color
ls -G コマンドで、ディレクトリ情報がカラー表示されればOKです。
とりあえず、カラー表示できるようになりましたね。
|
これは、あくまで誤った端末タイプvt100を指定していたためのわかり易い対処の例であって、本来の対処は、正しい端末タイプを指定すべきです。
UTF-8対応にするなら、端末タイプは、TeraTermのデフォルト値である xterm を指定しておくことが無難でしょう。
EUC対応なら、端末タイプは、先のvt100-color でも動作すると思います。もちろんxterm でも動作するでしょう。
端末タイプが、今ひとつ理解できていない方やちょっと不安な方は、xterm をおすすめしておきます。
カラー表示の色を変更してみる
FreeBSD系 ls で色を変更してみる
先のTERMの変更だけでカラー表示までできるようになりました。しかし、先の画面のように背景色が黒の場合は、せっかくのカラー表示も見づらくなっていますね。
それを改善するために色を変更してみます。
色を変更する場合、各シェルの設定ファイルを編集することで変更します。
[ .bashrc の場合 ]
|
[ .cshrc の場合 ]
|
編集を終えたら、source コマンドで再読み込みし、ls -Gコマンドで確認してみましょう。
|
ずいぶん見やすくなりましたね。
背景色が白の場合は、LSCOLORS : ‘exfxcxdxbxegedabagacad’
背景色が黒の場合は、LSCOLORS : ‘GxFxDxDxhxDgDxabagacad’
と定義する色を変更すると見やすくなります。
この文字情報は、左から順番に以下の色情報になります。
- ディレクトリ前景色
- ディレクトリ背景色
- シンボリックリンク前景色
- シンボリックリンク背景色
- ソケットファイル前景色
- ソケットファイル背景色
- FIFOファイル前景色
- FIFOファイル背景色
- 実行ファイル前景色
- 実行ファイル背景色
- ブロックスペシャルファイル前景色
- ブロックスペシャルファイル背景色
- キャラクタスペシャルファイル前景色
- キャラクタスペシャルファイル背景色
- setuidつき実行ファイル前景色
- setuidつき実行ファイル背景色
- setgidつき実行ファイル前景色
- setgidつき実行ファイル背景色
- スティッキビットありother書き込み権限つきディレクトリ前景色
- スティッキビットありother書き込み権限つきディレクトリ背景色
- スティッキビットなしother書き込み権限つきディレクトリ前景色
- スティッキビットなしother書き込み権限つきディレクトリ背景色
- a: 黒
- b: 赤
- c: 緑
- d: 茶
- e: 青
- f: マゼンタ
- g: シアン
- h: 白
- x: なし(デフォルト色)
|
Linux系 ls で色を変更してみる
上記と同様に、いわゆる GNU ls で色を変更してみます。
Linux ( CentOS ,Scientific Linux ,Ubutu など )が主だったところなので、ここでは、Bシェル ( bashrc ) についての例のみ解説しておきます。
Linux系 ls の色変更に用いた環境変数は、LS_COLORSであることに注意してください。
[ .bashrc の場合 ]
|
編集を終えたら、source コマンドで再読み込みし、ls –colorコマンドで確認してみましょう。
|
ずいぶん見やすくなりましたね。
背景色が白の場合は、LS_COLORS : ‘di=0;34:fi=0:ln=0;95:so=0;42:pi=0;45:ex=31:bd=0;34;46:cd=0;34:or=1;37:mi=1;37:*.rpm=1;92’
背景色が黒の場合は、LS_COLORS : ‘di=1;36:fi=0:ln=1;95:so=1;91:pi=1;91:ex=93:bd=1;91;46:cd=1;91:or=1;37:mi=1;37:*.rpm=1;92’
と定義する色を変更すると見やすくなります。
また、前景色、背景色の区別がありません。消し線があるものは、FreeBSD ls にあって GNU ls に無いものです。
- di : ディレクトリ色
- ln : シンボリックリンク色
- so : ソケットファイル色
- pi : FIFOファイル色
- ex : 実行ファイル色
- bd : ブロックスペシャルファイル色
- cd : キャラクタスペシャルファイル色
setuidつき実行ファイル色setgidつき実行ファイル色スティッキビットありother書き込み権限つきディレクトリ色スティッキビットなしother書き込み権限つきディレクトリ色
以下は、FreeBSD ls になくて GNU ls にある色種別情報です。
- fi : 通常のファイル色
- or : 存在しないファイルへのシンボリックリンクの色
- mi : シンボリックリンクされた存在しないファイルの色
- 0 : なし(デフォルト)
- 1 : ボールド(太字)
- 4 : 下線
- 5 : 点滅
- 7 : 反転
- 31 : 赤
- 32 : 緑
- 33 : オレンジ
- 34 : 青
- 35 : 紫
- 36 : シアン
- 37 : 灰色
- 40 : 黒(背景色)
- 41 : 赤(背景色)
- 42 : 緑(背景色)
- 43 : オレンジ(背景色)
- 44 : 青(背景色)
- 45 : 紫(背景色)
- 46 : シアン(背景色)
- 47 : 灰色(背景色)
- 90 : 暗い灰色
- 91 : 明るい赤
- 92 : 明るい緑
- 93 : 黄
- 94 : 明るい青
- 95 : 明るい紫
- 96 : ターコイズ(明るいシアン)
- 100 : 暗い灰色(背景色)
- 101 : 明るい赤(背景色)
- 102 : 明るい緑(背景色)
- 103 : 黄(背景色)
- 104 : 明るい青(背景色)
- 105 : 明るい紫(背景色)
- 106 : ターコイズ(明るいシアン)(背景色)
|
GNU ls の色設定例を作成してくれるページを作成してみた を参照してください。
おまけ viでカラー表示してみる
さて、ついでのviのカラー色表示も実施してみましょう。
viは、.vimrc を編集することで色表示を切り替えることができます。
[ 背景色が黒の場合 ]
|
[ 背景色が白の場合 ]
|
set background=[dark/light] : 背景色の設定
上記は、set background=darkを設定した時の例です。
指定できるテーマは、
Linux : /usr/share/vim/vim[バージョン]/colors/
FreeBSD : /usr/local/share/vim/vim[バージョン]/colors/
配下のファイル名になります。
|
|
※テーマ名は、先のファイル名の拡張子(.vim)を除いた名前になります。
[ テーマ適応前 ]
[ テーマ適応後 ]
こんな感じで劇的に変わります。
そもそものカラー表示できなかった原因は、Tera Term をいろいろ別の通信テストでも使った際に、端末タイプの設定までいじっていた・・・ということなんですけど。
ただ、カラー表示は、LinuxのlsコマンドをFreeBSDでも使うことはできます。それによって、どんな端末タイプであっても表示することができることは、先にも記載しました。 でも、結局、Gnu ls を使ったところで、基本的なことを知らないと、他のviなどのカラー表示は使えないわけで、 さらには、Gnu lsは、BSD機能のファイルフラグを出力( オプション : -o )できないので、下手のGnu lsを使い出すと問題を複雑化しかねないと思います。
( もちろん、ちゃんと理解して使う分には何も問題ないと思います。個人的に、すぐ忘れてしまうのでaliasなどで入れ替えてると、戸惑うことがあるんですよね。)
もし、FreeBSDでカラー表示できない・・・とお悩みの方が参考になれば幸いです。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :