Next Previous Contents

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'。這�堛疑C色選擇是模彷 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;   /* bold white */
        halfcolor       = 0x18;   /* grey */

這邊的十六進位數字是給顯示卡用的: 最左邊的位元(上面範例的 "1")是背景 ; 最右邊的位元是前景。0 = 黑色,1 = 藍色,2 = 綠色,3 = 青色, 4 = 紅色, 5 = 紫色,6 = 棕色/黃色,7 = 白色。把數字加 8 可以得到高亮度的顏色。在大部份的情況下,高亮度的背景色 == 閃爍的字加上普通的背景。 由 sjlam1@mda023.cc.monash.edu.au 所提供

你也可以使用下面的 ANSI 控制碼提供一個執行時期的主控台預設值。(在核心原始碼�塈鋮鴘�)

        ESC [ 8 ]

這個控制碼把預設值設成目前的前景及背景顏色。然後重設屬性的控制碼(ESC [ m)讓這預設值馬上就取代黑白色成為使用中的顏色。

每次你重開機的時侯你都需要再把這些字串送給主控台。依照你的 Linux 主機用途不同,有好幾個檔案可以達成這個目的。

/etc/issue

在 Slackware �堻o就是 "Welcome to Linux xx.yy" 訊息所在的檔案,如果你的主機是個人使用的話,從這個檔案下手是不錯的選擇(但對於用 telnet 遠端登入使用系統的人就可能有點討厭)。 這個檔案在每次開機的時侯都會被製造出來,原來的內容則被覆蓋,所以你必需要修改開機檔案(在 Slackware �堿O /etc/rc.d/rc.S,Redhat�堿O /etc/rc.d/rc.local)�堶悸漱U列幾行:

  echo ""> /etc/issue
  echo Welcome to Linux `/bin/uname -a | /bin/cut -d\  -f3`. >> /etc/issue
改成
  ESCAPE="在這�堜韙J ESC 碼"
  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

這�堛滷惆蹐X會把遊標歸位、設定顏色(在這�堛澈e景是白色而背景是藍色)、把這個設定存起來並且把螢幕上其它部份清除掉。 這�堛漣幭傮|在下次重開機時生效。別忘了在 emacs 要打入 ESC 字元要按 C-q 鍵而在 vi �堶n按 control-v,因為很顯然的執行以上程式的 sh 並不了解 /033 這種用法。

/etc/profile 或 .profile

  if [ "$TERM" = "console" ]; then
      echo "\033[37;44m\033[8]" #
# 或使用 setterm。
      setterm -foreground white -background blue -store
  fi

/etc/login 或 .login

  if ( "$TERM" == "console" ) then
    echo "\033[37;44m\033[8]"  
# 或使用 setterm。
      setterm -foreground white -background blue -store
  endif

[ 譯者注: Linux 的主控台下的 $TERM 環境變數已經是 "linux" 而不是 "console" 了 ]

6.3 遠端登入

你應該可以用上面示範過的 setterm 程式。當然,遠端的機器必需要能夠得到足夠的資訊來操作你的終端機,而且你的終端機模擬程式要能夠支援彩色。 在我的經驗�堥銗戎郊x上最好的 vt100 終端機模擬程式有下列幾種:

關於 kermit 的細節請看 http://www.columbia.edu/kermit/


Next Previous Contents