日历
网志分类
· 所有网志 (4)
· BSD/Unix (2)
· GNU/Linux (2)
· Shell/Script (0)
· Database (0)
站内搜索
友情链接
· 我的歪酷 非非共享界

订阅 RSS

0003169

歪酷博客

BSD/Unix 及其它


« 上一篇: FreeBSD升级 下一篇: fonts.conf详解 »
冷水浴 @ 2008-06-23 06:58

本文讨论Linux环境的字体设置,当然,重点是中文的设置,我用的是Archlinux,但本文所涉及的知识和方法也应该和其他发行版相同或者相似。

一、Linux的字体系统
Linux有两套字体系统

1、X11核心字体系统
配置X11核心字体有两步,第一步是建立字体目录,在该目录中包含字体文件。第二步是配置X服务器,使它能使用这些字体。下面我以配置simsun.ttc字体为例说明:
1)
X服务器的字体目录一般默认已建好,如/usr/share/fonts/TTF。我们把simsun.ttf拷贝到该目录。
 
生成字体索引文件,如果是位图字体则只有一个fonts.dir索引文件,如果是像simsun.ttf这样的可缩放字体则还需要一个fonts.scale索引文件。索引文件可通过工具自动生成,如果是TrueType字体,可使用ttmkfdir工具。其它的字体可用mkfontdir和mkfontscale这两个工具来生成。simsun.ttc是TrueType字体,所以我用ttmkfdir工具生成fonts.scale:
 
$ sudo ttmkfdir

要在字体目录下执行这个命令,会生成一个包含当前目录下所有字体信息的fons.dir文件
你可能还需要拷贝一个encodings.dir文件到当前目录下,这个文件通常在/usr/share/fonts/encodings目录下

 $ sudo cp /usr/share/fonts/encodings/encodings.dir ./

fonts.dir文件和fonts.scale内容是一样的,所以可直接拷贝。如果不用拷贝的方式,用mkfontdir命令也可以,结果是一样的。

$ sudo cp fonts.dir fonts.scale

2)
设置xorg配置文件,确认字体路径和正确加载X字体模块。

配置文件为/etc/X11/xorg.conf
在X.org中,使用开源的freetype模块,所以要注释掉xtt模块,重新启用freetype。
$ sudo nano /etc/X11/xorg.conf

Section "Module"
#       Load    "xtt"
        Load    "GLcore"
        Load    "bitmap"
        Load    "dbe"
        Load    "ddc"
        Load    "dri"
        Load    "extmod"
        Load    "freetype"
        Load    "glx"
        Load    "int10"
        Load    "record"
        Load    "speedo"
        Load    "type1"
        Load    "vbe"
EndSection

 
如果没启用freetype模块,则系统会找不到GB2312和GB18030编码的X11核心中文字体,影响freemind、xmms等要使用X11核心字体程序的中文显示。
 
字体模块列表:
 
bitmap:位图字体,支持的字体文件有*.bdf,*.pcf和*.snf。
 
type1:Type1字体,支持的字体文件有*.pfa和*.pfb,还有CIDFonts。
 
speedo:Bitstream Speedo字体,支持的字体文件有*.spd。
 
freetype:TrueType字体,支持的字体文件有*.ttf和*.ttc。,在X.org系统中,xtt模块功能合并到该模块中。
 
xtt:另一个的TrueType字体模块,支持的字体文件有*.ttf和*.ttc。在X.org系统中,不使该模块,该模块的功能合并到freetype模块中。
 
重启X服务器后就可使用simsun中文字体了,或者使用xset fp rehash命令重新刷新字体。xlsfonts命令可列出系统中已安装的X11核心字体。

2、xft字体系统
Xft是一个library,它没有自已的配置机制,它依靠fontconfig库来配置和定制字体,Xft负责字体的显示。也就是说,fontconfig是一种让X系统可以找到某种字体的库,而Xft是负责在X系统中把fontconfig库找到的字体如何显示出来的库。所以讨论Xft字体配置其实就是讨论fontconfig。fontconfig包含在Xorg发布版中。

fontconfig的作用:

自动搜索字体路径,发现新拷贝的字体。

当需显示的字体不存在时,会自动选择其它字体代替显示。这也就是我们在美化字体时为什么要调整字体的排列顺序的原因。

配合Xft等X系统的渲染引擎,实现质量的字体输出。

fontconfig的配置文件有三个,一个是系统级的配置文件,位于/etc/fonts/fonts.conf,该目录下还有一个local.conf,一般我们只修改local.conf文件,fonts.conf一般不建议去修改。第三个配置文件是用户主目录下的~/.fonts.conf,它是用户级的字体配置文件,只对当前用户有效。这三个文件的格式是一样的,都是一个XML格式的文件。该XML文件的语法规则在fonts.dtd里定义。
我的Archlinux中,/etc/fonts/ 下面没有local.conf文件,所以我是修改fonts.conf,这个文件会在fontconfig升级时被回覆成默认设置,所以要拷贝一份。

在Xft字体系统中安装新的字体是很简单的,只需把字体文件拷贝到fonts.conf中指定的字体文件目录即可,fontconfig会自动感知新字体。

把新字体文件拷贝到字体目录后,我们就可用fc-list命令列出新安装的字体,如果没有,可用fc-cache命令手动更新系统字体配置。
$ sudo fc-cahce -f -v
$ fc-list

这样,再运行fc-list就应该可以看到新安装的字体了。使用Xft字体系统是不用配置/etc/X11/xorg.conf的,也不用重启X服务器使配置生效。Xft字体系统比起传统的X11核心字体系统来说真的是方便很多。所以它是未来的发展方向。目前,并不是所有的应用程序都支持Xft字体系统。

所以,正如上面提到,查看X核心字体,用xlsfonts这个命令,查看xft字体系统,用fc-list这个命令。你会发现,同一个字体可能会被两个字体系统所描述,只是描述的方式不同,两个字体系统经常会同时在同一个应用程序中起作用,这的确很令人困惑。

二、GTK中文设置

GTK+2.x和QT程序都可以使用Xft字体系统,但GTK+1.x程序是不支持Xft字体系统的,它只能使用X11核心字体系统。

GTK+2.2版本及以上的程序默认使用Xft字体系统,不用进行配置。GTK+2.0程序如果要使用Xft,则需设置环境变量GDK_USE_XFT=1。

GTK+2.x程序字体配置可通过gnome桌面系统提供的gnome-font-properties工具来配置,该工具可在GNOME桌面环境中的"应用程序"--"桌面首选项"--"字体"中找到。GTK+2.x程序还有一个全局配置文件/etc/gtk-2.0/gtkrc,里面可设置GTK+2.x程序所用字体,该文件的内容如下:

style "gtk-default-zh-cn" {
    font_name = "Bitstream Vera Sans 10,SimSun 10"
    }
    class "GtkWidget" style "gtk-default-zh-cn"

这样GTK+2.x程序的英文会用10号的Bitstream Vera Sans字体显示,中文会用10号的SimSun字体显示。
GTK+1.x程序使用X11核心字体系统。要在GTK+1.x程序中使用simsun字体,需配置/etc/gtk/gtkrc.zh_CN文件,内容如下:


style "gtk-default-zh-cn" {
fontset = "-*-bitstream vera Serif-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252,\
-*-simsun-medium-r-normal-*-12-*-*-*-*-*-gbk-0"
}
class "GtkWidget" style "gtk-default-zh-cn"


这样GTK+1.x程序可显示中文了,中文使用simsun字体,英文使用bitstream vera sans字体。
对比以下你会发现两种字体系统对同一种字体的描述方式的区别。类似-*-simsun-medium-r-normal-*-12-*-*-*-*-*-gbk-0这样的描述是在前面所提到的fonts.dir文件中定义的,它描述了simsun这个字体通过X核心字体系统解释出来的具体细节,而对于xft字体系统,则是在fonts.conf中进行类似解释。所以,同一个字体,你也许会发现在不同的地方显示出来的效果看起来是不一样的。




评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定