Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1052408
  • 博文数量: 836
  • 博客积分: 43880
  • 博客等级: 大将
  • 技术积分: 5485
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-20 17:36
文章分类

全部博文(836)

文章存档

2011年(1)

2008年(835)

我的朋友

分类: LINUX

2008-08-20 18:26:14


如何使Linux桌面正确显示和输入中文,一直是令Linux初学者头痛的事情.目前有很多汉化的文章,但大多只讲步骤而不谈道理,让初学者云里来雾里去.这篇文章将从X的字体原理入手,帮助大家理解X的字体机制,在汉化中学习。 首先,我们要理解X的字体引擎.X中支持Truetype字体(一种可放缩字体)的主要有四种引擎。freetype,xtt,xfs和Xft.其中freetype和xtt是X的内部模块.使用的都是freetype1渲染引擎。Xfs和xft是外部服务程序.xfs是系统级的字体服务程序,也可以作为X的内部模块,使用的是X内部的freetype2.Xft和其他类库一样,只有被调用的时候才被加载.其中只有xft才有antialias支持。 这里有必要讲讲freetype.Freetype是开源字体渲染引擎,并不只为X设计。它的功能就是读取Truetype字体信息,如大小,分辨率,编码等,然后渲染成所需的位图数据输出.Freetype现在的版本是2.x,与1.0相比,最大的差别就是加入了抗锯齿功能。 有这么多引擎,到底要用哪个好?其实我们目前为止,支持中文最好的还是xtt.因为小字体的时候,用函数描述法算出来的中文字体效果不能让人满意,所以很多中文字体公司就在Truetype字体里嵌入了位图字体.这些位图字体需要用特殊的方式读出来,所有的引擎中就只有xtt能做到这一点。我们下一步就是将字体添加到X中,使xtt可以正确读取,这样就可以了。 首先,由于要配置Linux系统文件,我们需要用root帐号进入,相当于windows下的administrator。X的配置文件是/etc/XF86Config-4(比较新的显卡)或者是XF86Config(比较老的显卡).用你喜欢的文本编辑器打开,如kedit或gedit。打开后我们发现配置文件分成很多个Section,我们首先要配置的就是Section"Files",这个部分描述了X所要调用的文件信息。要加入一个字体目录,只需在里面插入一行FontPath"目录名"就可以了,如:
Section"Files"

#MultipleFontPathentriesareallowed(theyareconcatenatedtogether)

#Bydefault,Mandrake6.0andlaternowuseafontserverindependentof

#theXservertorenderfonts.

FontPath"unix/:-1"

FontPath"/truetype"#插入一个字体目录

EndSection
然后,我们让X加载xtt字体引擎,找到Section"Module",像这样修改:
Section"Module"

#Load"dbe"#Double-BufferingExtension

#Load"v4l"#VideoforLinux

Load"extmod"

Load"glx

#Load"type1"#type1模组是渲染type1字体的,和xtt冲突,必需屏蔽

#Load"freetype"#freetype模组是渲染Truetype字体的,和xtt冲突,必需屏蔽

Load"xtt"#加入xtt模组引擎

EndSection
好了,现在xtt会自动去/truetype里找字体。现在开始拷贝字体到/truetype里去,先要在根目录建一个truetype目录,mkdir/truetype就可以了。从windows分区拷贝要先mount,就是作一个联接,将Linux目录连到windows分区.在根目录下建一个"c"目录。mkdir/c然后mount/dev/hda1/c这样就将windows下的C盘联接到我们Linux下的/c目录了,进入/c,应该可以看到你C盘的文件。然后,进入/c中的字体文件目录,一般在window下面的Fonts里,注意目录名大小写在Linux下面是有区别的。拷贝字体文件到/truetype里:
cpsimsun.ttc/truetype/simsun.ttf

cptahoma*/truetype/
这样就将我们所需要的字体文件拷贝到truetype里了。下一步我们要设置字体文件,Linux中X的字体设置很烦锁,不像windows一拷贝就完事,初级阶段嘛,大家还是忍忍吧,呵呵。建立字体信息文件fonts.dir,如下:
simsun.ttf-misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0

ai=0.3:simsun.ttf-misc-SimSun-medium-i-normal--0-0-0-0-c-0-gb2312.1980-0

ds=y:simsun.ttf-misc-SimSun-bold-r-normal--0-0-0-0-c-0-gb2312.1980-0

ds=y:ai=0.3:simsun.ttf-misc-SimSun-bold-i-normal--0-0-0-0-c-0-gb2312.1980-0

tahoma.ttf-misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1

ai=0.3:tahoma.ttf-misc-SimSun-medium-i-normal--0-0-0-0-p-0-iso8859-1

tahomabd.ttf-misc-SimSun-bold-r-normal--0-0-0-0-p-0-iso8859-1

ai=0.3:tahomabd.ttf-misc-SimSun-bold-i-normal--0-0-0-0-p-0-iso8859-1

simsun.ttf-misc-SimSun-medium-r-normal--0-0-0-0-p-0-gbk-0

ai=0.3:simsun.ttf-misc-SimSun-medium-i-normal--0-0-0-0-p-0-gbk-0

ds=y:simsun.ttf-misc-SimSun-bold-r-normal--0-0-0-0-p-0-gbk-0

ds=y:ai=0.3:simsun.ttf-misc-SimSun-bold-i-normal--0-0-0-0-p-0-gbk-0

simsun.ttf-misc-SimSun-medium-r-normal--0-0-0-0-p-0-fcd8859-15

ai=0.3:simsun.ttf-misc-SimSun-medium-i-normal--0-0-0-0-p-0-fcd8859-15

ds=y:simsun.ttf-misc-SimSun-bold-r-normal--0-0-0-0-p-0-fcd8859-15

ds=y:ai=0.3:simsun.ttf-misc-SimSun-bold-i-normal--0-0-0-0-p-0-fcd8859-15

simsun.ttf-misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-15

ai=0.3:simsun.ttf-misc-SimSun-medium-i-normal--0-0-0-0-p-0-iso8859-15

ds=y:simsun.ttf-misc-SimSun-bold-r-normal--0-0-0-0-p-0-iso8859-15

ds=y:ai=0.3:simsun.ttf-misc-SimSun-bold-i-normal--0-0-0-0-p-0-iso8859-15

simsun.ttf-misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso10646-1

ai=0.3:simsun.ttf-misc-SimSun-medium-i-normal--0-0-0-0-c-0-iso10646-1

ds=y:simsun.ttf-misc-SimSun-bold-r-normal--0-0-0-0-c-0-iso10646-1

ds=y:ai=0.3:simsun.ttf-misc-SimSun-bold-i-normal--0-0-0-0-c-0-iso10646-1
第一行的24表示下面一共有24行设置(好像有点傻),其他的格式都差不多:
ds=y:ai=0.3:simsun.ttf-misc-SimSun-bold-i-normal--0-0-0-0-p-0-gbk-0
说明: simsun.ttf:字体文件名。 ds=[yn]:ds是xtt的功能,设成"y"表示粗体,"n"表示正常。 ai=Real_number:表示倾斜度.不设表示自动。 misc:表示字体的类别。 SimSun:是字体的名称。 bold:bold表示粗体,其他如medium表示正常。 i:表示斜体,r是正常。 p:可变长度,c是正方形,m是固定宽度。 gbk:字体编码。 这里大家发现我们还使用了tahoma英文字体,这样替换,系统读取Simsun英文字体的时候,就会用pp的tahoma替代。好了,现在存盘.然后拷贝一个到fonts.scalecpfonts.dirfonts.scale然后拷贝编码文件encodings.dir到目录里来。
cp/usr/X11R6/lib/X11/fonts/encodings/encodings.dir/truetype
好,重起,把KDE,mozilla,galeon等等所有默认字体都改成simsun,哈哈,是不是比从前漂亮了很多?大家还是把这几个配置文件备份起来,以后安装的时候就不用再设置了。这里顺带说一下其他几个字体引擎的配置: xfs:配置文件是/etc/X11/fs/config xft:配置文件是/etc/X11/Xftconfig xft的配置相对来说比较容易,只要将字体拷到配置文件中dir指定的任何一个目录就可以了.如果要小字体不显示AA,可以在末尾加入:
match

anysize>8

anysize<17

edit

antialias=false;

match

anypixelsize>8

anypixelsize<17

edit

antialias=false;
这样8~17号的字体就不会用抗锯齿功能了。 (T115)


下载本文示例代码
阅读(243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~