萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux 終端機下的彩色顯示

Linux 終端機下的彩色顯示

class="21985"> 作者: Thorbjørn Ravn Andersen, [email protected]
譯者: Chou-Kai Wang, [email protected]
v1.4, 7 August 1997 


--------------------------------------------------------------------------------
雖然大部份的 Linux 發行版本都附有一個用來把目錄的內容列出來,而且可以利用彩色來增強輸出在視覺上的效果的'ls'指令,不過要把他設定的合你意卻不是件容易的事。這份文件說明了設定一些已經內附在你的 Linux 發行版本的軟體,來達到這個目地的好幾種不同的方法,還有在那□可以找到一些在大部份版本的 Unix □都會用到,但是卻常常不被附在 Slackware 或 RedHat Linux □的軟體。這份文件的 HTML 版本也可以在我的原始檔案這□ http://www.mip.ou.dk/~ravn/colour-ls 找的到。 
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

1. 簡介
這些年來彩色的顯示器已經相當普遍,使用者也開始使用一些以彩色來表示例如:程式語言□的保留字,或是拼錯的字,來給使用者一些視覺上的回饋。 

自從 Linux 的文字模式控制台支援彩色後,原來的 GNU ls 也很快的被修改成支援輸出彩色的訊息而且被附在 Slackware 2.0 版□。這些改良原來版本的綴補檔案已經被整合到標准版的 GNU ls 裡,現在也應該是所有新的 Linux 發行版本的一部份了。 

現在這版本的文件是把最初的版本改寫了許多部份後更新而來的,包括了一些關於 xterm 和 如何利用綴補檔來更新核心的資訊。 

這份文件裡的資訊都在 Redhat 4.1 □驗證過,而且主要是在Slackware 2.0.2 版及核心版本 1.1.54 的環境□搜集而來的。核心的綴補檔的資訊是在 slackware 2.2.0,1.2.13 版的核心,並且以 tcsh 為預設的 shell的環境□取得的,而後來也在 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

(這□的 % 是 shell 的提示符號): 

如果你看到了表示你的 ls 不能接受這個選項的錯誤訊息,那你應該安裝新版本的 GNU fileutils 軟體。如果你使用的發行版本沒有提供新的升級軟體,那麽就從 GNU 的映射站台取得這個軟體並且直接從原始碼安裝。 

如果你並沒有看到錯誤訊息,那麽你使用的 ls 便可以接受這個選項。但很不幸的,有一些在 Slackware (其它的發行版本也有可能) □附的早期版本是有臭□的。在 Redhat 4.1 □面附的 3.13 版的 ls 就沒有問題。 


% ls ‐‐version
ls - GNU fileutils-3.13

如果你在 Linux 的文字模式終端機□執行 ``ls ‐‐ color'',那麽它的輸出應該依照系統的預設值而有適當的彩色,而且你現在可以開始決定是不是需要改變任何的設定。 

如果你在 xterm □執行上面的過程,也許你還是沒辦法看到輸出變成彩色。就跟 ls 一樣,原來的 xterm 並不支援應用程式的彩色輸出,而較新的版本有支援。如果你的 xterm 不支援彩色,那麽請參考這個文件的結尾拿到較新版本的 xterm,同時你也只好切換到文字模式並且繼續下面的步驟。 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

4. 有那些顏色可以選擇呢?
下面的 shell 命令稿(感謝許多把 bash 的版本寄給我的人)顯示出現在使用的主控台能夠支援的各種顏色組合。如果沒有顏色出現,那麽你的主控台就不支援 ANSI 的顏色選擇。 


#!/bin/bash
# 顯示 ANSI 的彩色
#
esc="33["
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 "$line1n$line2"
done

前景的顏色號碼是在左邊那一排,背景的則是在上方。如果你要粗體的字元和高亮度就在參數□加一個 "1",所以前景是白色而背景是藍色就成了 "37;44;1"。整個的 ANSI 顏色選擇序列就是 

ESC [ 3 7 ; 4 4 ; 1 m

。 
注: 背景不可以是高亮度,所以黃色(高亮度的棕色)只能用來作前景。這是硬體上的限制。 


顏色代碼:
        0 - 黑色     4 - 藍色           3# 是背景顏色
        1 - 紅色     5 - 粉紅色         4# 是前景顏色
        2 - 綠色     6 - 青色
        3 - 黃色     7 - 白色           ;1 是粗體和高亮度



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

5. 如何設定 ls 的彩色輸出

如果你想要修改 ls 內定的標准顏色,你需要用下面的指令在你的 HOME 目錄下制造這一個檔案 

 cd ; dircolors -p > .coloursrc 

在你編輯完這個注解的很詳細的檔案以後,你必需要把它讀進你的環境變數 LS_COLORS □,通常都是這樣作的 

eval `dircolors .colourrc`

然後你要把前面這一行放進你的 .bashrc 或 .cshrc 或 .tcshrc (依照你使用的 shell 而定)□。更詳細的用法請看 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 虛擬主控台 

你也可以修改核心,這樣就可以一勞永逸的用控制碼來改變虛擬主控台的預設值。如果你自己編譯核心的話,我建議利用 kernel 的綴補檔。 


核心的原始碼是在 /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
copyright © 萬盛學電腦網 all rights reserved