中国网管论坛's Archiver

haoyan800 发表于 2008-1-6 12:00

Linux终端机下的彩色显示

发行版本都附有一个用来把目录的内容列出来,而且可以利用彩色来增强输出在视觉上的效果的'ls'指令,不过要把他设定的合你意却不是件容易的事。这份文件说明了设定一些已经内附在你的

  Linux

  发行版本的软体,来达到这个目地的好几种不同的方法,还有在那□可以找到一些在大部份版本的

  Unix

  □都会用到,但是却常常不被附在

  Slackware

  或

  RedHat

  Linux

  □的软体。这份文件的

  HTML

  版本也可以在我的原始档案这□

  [url]http://www.mip.ou.dk/~ravn/colour-ls[/url]

  找的到。

  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="\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",所以前景是白色而背景是蓝色就成了

  "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;

  /*

  bold

  white

  */

  halfcolor

  =

  0x18;

  /*

  grey

  */

  这边的十六进位数字是给显示卡用的:

  最左边的位元(上面□例的

  "1")是背景

  ;

  最右边的位元是前景。0

  =

  黑色,1

  =

  蓝色,2

  =

  绿色,3

  =

  青色,

  4

  =

  红色,

  5

  =

  紫色,6

  =

  棕色/黄色,7

  =

  白色。把数字加

  8

  可以得到高亮度的颜色。在大部份的情况下,高亮度的背景色

  ==

  闪烁的字加上普通的背景。由

  [email]sjlam1@mda023.cc.monash.edu.au[/email]

  所提供

  你也可以使用下面的

  ANSI

  控制码提供一个执行时期的主控台预设值。(在核心原始码□找到的)

  ESC

  [

  8

  ]

  这个控制码把预设值设成目前的前景及背景颜色。然後重设属性的控制码(ESC

  [

  m)让这预设值马上就取代黑白色成为使用中的颜色。

  每次你重开机的时侯你都需要再把这些字串送给主控台。依照你的

  Linux

  主机用途不同,有好几个档案可以达成这个目的。

  <

  

页: [1]

Powered by Discuz! Archiver 6.1.0  © 1999-2008 bbs.bitsCN.com