2008年6月7日星期六

Debian 字体配置初步认识

在 Linux 世界里,字体的处理不如 Windows 里面那么统一,历史上流传下来的一些方法,还有后面加入改进的方法,Debian 自己还有一个 defoma。总而言之,如果稍微糊涂一点,基本上最后配置不清楚。这里称为初步认识,也就是了解一个大致的机理,一些更为高级的用法,我们会在后面的讨论中涉及。

传统的 X 程序,都是利用所谓的 X core fonts 来做事情的,这些例子有 GNU Emacs、xterm 还有 gtk1 的程序,如 xmms。X 管理 core fonts 使用的基本技术是在配置文件的 Files 段设置的 FontPath。我们一般会把自己的字体放在特定的目录里面,经过处理,这个目录就能成为 FontPath 需要的目录。让 X 知晓这些目录可以修改 xorg.conf,也可以在运行的 X 里面用 xset 命令(或者 xset -display 指定 X)。如
xset fp+ /usr/local/share/fonts/truetype/chinese,/usr/local/share/fonts/truetype/windows
那么如何建立合适的目录呢,你只需要到上述目录中 mkfontdir 即可,对于矢量字体如 true type 的,在此之前需要 mkfontscale。我们可以通过 xset q 检查 FontPath,之后可以用 xlsfonts 获得 X core fonts 的列表。

另外一种就是依靠 fontconfig,这个也更加简单,如果你完成了上述的 mkfontdir 步骤,就可以直接 fc-cache -fv 更新字体的 cache,这一般在 /usr/share/fonts、/usr/local/share/fonts 和 ~/.fonts,然后可以用 fc-list 获得列表。现在多数程序,如 gtk2、qt 的程序都是利用 fontconfig 提供的字体,还有 xetex,呵呵。

那么 defoma 是用来做什么的呢?它主要提供了一个集中的管理模式,一方面可以为 X 提供 core fonts,通过在 /var/lib/defoma/ 里面提供了一个统一的字体目录(里面是字体的符号连接,这样就只需要在这一个目录里面 mkfontdir 即可,并且 defoma 会帮你完成),也为 fontconfig 提供字体。那么 defoma 是如何知晓字体信息的呢?Debian 自己有很多 ttf 安装程序,它们都带有一个 hints 文件放在 /etc/defoma/hints 内,因此,如果我们需要安装新的字体,那么就需要为它们创建对应的 hints,本来 defoma 的确提供了这样一个脚本 defoma-hints,但是在写这篇短文的时候却不可用,原因是它所依赖的库 libft-perl 已经很长时间没有人维护了,而 perl 已经升级到 5.10 而不是原先的 5.8 版本了,因此我们迫切需要有人用 5.10 里面处理 free type 的库重写 defoma 的很多脚本。

让我们期待这天的早日到来!

2 条评论:

匿名 说...

问题:

1. Debian下到底能否实现看得过去的字体?

2. 一个字体问题就这么麻烦。还叫人敢不敢用Debian了?

Unknown 说...

1. 字体有,如果要 free 的也就只能算还凑合;如果你用 MS 的字体,那就没有任何区别

2. 麻烦?不觉得,呵呵... 真正麻烦的事情你没碰到过吧