Chapter 7. XFree86中的字体
Chapter 7. XFree86中的字体
Table of Contents
- 7.1. 两个字体系统
- 7.1.1. Xft
- 7.1.2. X11核心字体系统
- 7.2. 参考资料
字体设置在X系统中是一项较复杂而又非常重要的内容,字体是我们一进入X window就必须整天面对的,清晰、美观的字体会使我们工作起来赏心悦目,轻松愉快。XFree86是X系统在X86架构中的免费实现(现在好象不是GPL的了),也是现在Linux系统默认的X系统。为了设置好字体,我们需了解XFree86系统中的字体系统的原理和实现技术。只是照抄网上的设置可能也可配置出一套效果不错的字体,但这样我们只会知其然而不其所以然,不能融会贯通,灵活应用。请随我慢慢进入XFree86中的字体系统,一窥其中的奥秘。
有关X系统和XFree86的资料可参考我整理的X window学习笔记,里面对这两个系统的历史渊源有详细介绍。 |
XFree86系统有两套的字体系统,这也是为什么X window中字体设置较复杂的原因之一。这两套的字体系统分别是:核心X11字体系统和Xft字体系统。核心X11字体系统是应用最广泛的一套字体系统,所有的X系统都支持。Xft字体系统是一个新的字体技术,只能用在基于XFree86系统的X系统上,但该套字体系统配置简单,容易使用,将是未来发展的方向。
7.1.1. Xft
Xft是一个library,它没有自已的配置机制,它依靠fontconfig库来配置和定制字体,Xft负责字体的显示。也就是说,fontconfig是一种让X系统可以找到某种字体的库,而Xft是负责在X系统中把fontconfig库找到的字体如何显示出来的库。所以讨论Xft字体配置其实就是讨论fontconfig。fontconfig包含在XFree86发布版中。
fontconfig的作用:
自动搜索字体路径,发现新拷贝的字体。
当需显示的字体不存在时,会自动选择其它字体代替显示。这也就是我们在美化字体时为什么要调整字体的排列顺序的原因。
配合Xft等X系统的渲染引擎,实现质量的字体输出。
fontconfig的配置文件有三个,一个是系统级的配置文件,位于/etc/fonts/fonts.conf,该目录下还有一个local.conf,一般我们只修改local.conf文件,fonts.conf一般不建议去修改。第三个配置文件是用户主目录下的~/.fonts.conf,它是用户级的字体配置文件,只对当前用户有效。这三个文件的格式是一样的,都是一个XML格式的文件。该XML文件的语法规则在fonts.dtd里定义。详细的配置介绍请参考中国Linux公社中的“Linux高质量字体研究”论坛。
在Xft字体系统中安装新的字体是很简单的,只需把字体文件拷贝到fonts.conf中指定的字体文件目录即可,fontconfig会自动感知新字体。默认的字体目录有四个,分别是:
/usr/share/fonts
/usr/X11R6/lib/X11/fonts/Type1
/usr/local/share/fonts
~/.fonts
把新字体文件拷贝到字体目录后,我们就可用fc-list命令列出新安装的字体,如果没有,可用fc-cache命令手动更新系统字体配置。这样,再运行fc-list就应该可以看到新安装的字体了。使用Xft字体系统是不用配置/etc/X11/XF86config-4的,也不用重启X服务器使配置生效。Xft字体系统比起传统的X11核心字体系统来说真的是方便很多。所以它是未来的发展方向。目前,并不是所有的应用程序都支持Xft字体系统。下面是各类程序对Xft字体系统的支持情况介绍:
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字体显示。
QT程序的默认字体可在KDE的“控制中心”--“外观和主题”--“字体”中设置,也可运行qtconfig图形化配置工具设置。但好象控制中心的设置优先级高于qtconfig工具。
7.1.2. X11核心字体系统
配置X11核心字体有两步,第一步是建立字体目录,在该目录中包含字体文件。第二步是配置X服务器,使它能使用这些字体。下面我以配置simsun.ttc字体为例说明:
X服务器的字体目录一般默认已建好,如/usr/X11R6/lib/X11/fonts/truetype。我们把simsun.ttc拷贝到该目录。
生成字体索引文件,如果是位图字体则只有一个fonts.dir索引文件,如果是像simsun.ttc这样的可缩放字体则还需要一个fonts.scale索引文件。索引文件可通过工具自动生成,如果是TrueType字体,可使用ttmkfdir工具。其它的字体可用mkfontdir和mkfontscale这两个工具来生成。simsun.ttc是TrueType字体,所以我用ttmkfdir工具生成fonts.scale:
debian:/usr/X11R6/lib/X11/fonts/truetype# ttmkfdir
fonts.dir文件和fonts.scale内容是一样的,所以可直接拷贝。如果不用拷贝的方式,用mkfontdir命令也可以,结果是一样的。
设置XF86config-4配置文件,确定包含上述字体路径和正确加载X字体模块。
Section "Files" # FontPath "unix/:7110" # local font server # if the local font server has problems, we can fall back on these FontPath "/usr/X11R6/lib/X11/fonts/truetype" FontPath "/usr/lib/X11/fonts/misc" FontPath "/usr/lib/X11/fonts/cyrillic" FontPath "/usr/lib/X11/fonts/100dpi/:unscaled" FontPath "/usr/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/lib/X11/fonts/Type1" FontPath "/usr/lib/X11/fonts/CID" FontPath "/usr/lib/X11/fonts/Speedo" FontPath "/usr/lib/X11/fonts/100dpi" FontPath "/usr/lib/X11/fonts/75dpi" EndSection Section "Module" # 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" Load "xtt" EndSection
从XFree86转到X.org后,配置文件使用/etc/X11/xorg.conf代替原来的XF86Config-4。在X.org中,使用开源的freetype模块,所以要注释掉xtt模块,重新启用freetype。
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核心字体。
如果你是使用Debian系统,则可使用defoma(Debian Font Manager)工具来帮你完成以上设置。该工具的使用请参考本文“Debian的安装和配置”一章的内容。 |
GTK+1.x程序使用X11核心字体系统。要在GTK+1.x程序中使用simsun字体,需配置/etc/gtk/gtkrc.zh_CN文件,内容如下:
# This file defines the fontsets for Chinese language (zh) using # the simplified chinese standard GuoBiao as in mainland China (CN) # # 1999, Pablo Saratxaga <pablo@mandrakesoft.com> # 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字体。