FreeBSD 使用手册
上一页 | 第6章 　X Window 系统 | 下一页

# 6.5 在 X11 中使用字体

供稿Murray Stokely.

## 6.5.1 Type1 字体

X11 使用的默认字体不是很理想。 大型的字体显得参差不齐，看起来很不专业， 并且， 在 Netscape® 中， 小字体简直无法看清。 有好几种免费、 高质量的字体可以很方便地用在 X11 中。 例如，URW字体集合 (`x11-fonts/urwfonts`) 就包括了高质量的 标准 type1 字体 (Times Roman®, Helvetica®、 Palatino® 和其他一些)。 在 Freefont 集合中 (`x11-fonts/freefonts`) 也包括更多的字体， 但它们中的绝大部分使用在图形软件中，如 Gimp，在屏幕字体中使用并不完美。另外， 只要花很少的功夫，可以将 XFree86™ 配置成能使用 TrueType® 字体：请参见后面的 TrueType 字体一节。

如果希望使用 Ports Collection 来安装上面的 Type1 字体， 只需运行下面的命令：

    # cd /usr/ports/x11-fonts/urwfonts
    # make install clean

freefont 或其他的字库和上面所说的大体类似。 为了让 X 服务器能够检测到这些字体， 需要在 X 服务器的配置文件 (`/etc/X11/xorg.conf`) 中增加下面的配置：

    FontPath "/usr/local/lib/X11/fonts/URW/"

或者，也可以在命令行运行：

    % xset fp+ /usr/local/lib/X11/fonts/URW
    % xset fp rehash

这样会起作用，但是当 X 会话结束后就会丢失， 除非它被添加到启动文件 (`~/.xinitrc` 中， 针对一个寻常的 `startx` 会话，或者当您通过一个类似 XDM 的图形登录管理器登录时添加到 `~/.xsession` 中)。 第三种方法是使用新的 `/usr/local/etc/fonts/local.conf` 文件： 查看 anti-aliasing 章节。

## 6.5.2 TrueType® 字体

Xorg 已经内建了对 TrueType 字体的支持。有两个不同的模块能够启用这个功能。 在这个例子中使用 freetype 这个模块，因为它与其他的字体描绘后端 是兼容的。要启用 freetype 模块，只需要将下面这行添加到 `/etc/X11/xorg.conf` 文件的 `"Module"` 部分。

    Load "freetype"

现在，为 TrueType 字体创建一个目录 (比如， `/usr/local/lib/X11/fonts/TrueType`) 然后把所有的 TrueType 字体复制到这个目录。记住您不能直接从 Macintosh® 计算机中提取 TrueType 字体； 能被 X11 使用的必须是 UNIX®/MS-DOS®/Windows® 格式的。 一旦您已经将这些文件复制到了这个目录， 就可以用 ttmkfdir 来创建 `fonts.dir` 文件， 以便让X字体引擎知道您已经安装了这些新文件。 `ttmkfdir` 可以在 FreeBSD Ports 套件中的 `x11-fonts/ttmkfdir` 中找到。

    # cd /usr/local/lib/X11/fonts/TrueType
    # ttmkfdir -o fonts.dir

现在把 TrueType 字体目录添加到字体路径中。 这和上面 Type1 字体的步骤是一样的， 那就是，使用

    % xset fp+ /usr/local/lib/X11/fonts/TrueType
    % xset fp rehash

或者把 `FontPath` 这行加到 `xorg.conf` 文件中。

就是这样。现在 Netscape, Gimp, StarOffice™ 和其他所有的 X 应用程序 应该可以认出安装的 TrueType 字体。一些很小的字体(如在 Web 页面上高分辨率显示的文本) 和一些很大的字体(在 StarOffice 下) 现在看起来已经很好了。

## 6.5.3 Anti-Aliased 字体

Updated by Joe Marcus Clarke.

对于所有支持 Xft 的应用程序， 所有放到 X11 `/usr/local/lib/X11/fonts/` 和 `~/.fonts/` 中的字体都自动地被加入反走样支持。 绝大多数较新的程序都提供了 Xft 支持， 包括 KDE、 GNOME 以及 Firefox。

要控制哪些字体是 anti-aliased，或者配置 anti-aliased 特性， 创建(或者编辑，如果文件已经存在的话)文件 `/usr/local/etc/fonts/local.conf`。Xft 字体系统的几个 高级特性都可以使用这个文件来调节； 这一部分只描述几种最简单的情况。要了解更多的细节，请查看 fonts-conf(5).

这个文件一定是 XML 格式的。注意确保所有的标签都完全的关闭掉。 这个文件以一个很普通的 XML 头开始， 后跟一个 DOCTYPE 定义， 接下来是 `<fontconfig>` 标签：

          <?xml version="1.0"?>
          <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
          <fontconfig>

像前面所做的那样，在 `/usr/local/lib/X11/fonts/` 和 `~/.fonts/` 目录下的所有字体已经可以被支持 Xft 的 应用程序使用了。如果您想添加这两个目录以外的其他路径， 简单的添加下面这行到 `/usr/local/etc/fonts/local.conf`文件中：

    <dir>/path/to/my/fonts</dir>

添加了新的字体，尤其是添加了新的字体目录后， 您应该运行下面的命令重建字体缓存：

    # fc-cache -f

Anti-aliasing 会让字体边缘有些模糊，这样增加了非常小的文本的可读性， 并从大文本字体中删除 “锯齿”。 但如果使用普通的文本， 则可能引起眼疲劳。 要禁止 14磅 以下字体的反走样， 需要增加如下配置：

            <match target="font">
                <test name="size" compare="less">
                    <double>14</double>
                </test>
                <edit name="antialias" mode="assign">
                    <bool>false</bool>
                </edit>
            </match>
            <match target="font">
                <test name="pixelsize" compare="less" qual="any">
                    <double>14</double>
                </test>
                <edit mode="assign" name="antialias">
                    <bool>false</bool>
                </edit>
            </match>

用 anti-aliasing 来间隔一些等宽字体也是不适当的。 这似乎是 KDE 的一个问题。 要修复这个问题需要确保每个字体之间的间距保持在100。 加入下面这些行：

           <match target="pattern" name="family">
               <test qual="any" name="family">
                   <string>fixed</string>
               </test>
               <edit name="family" mode="assign">
                   <string>mono</string>
               </edit>
            </match>
            <match target="pattern" name="family">
                <test qual="any" name="family">
                    <string>console</string>
                </test>
                <edit name="family" mode="assign">
                    <string>mono</string>
                </edit>
            </match>

(这里把其他普通的修复的字体作为 `"mono"`)，然后加入：

             <match target="pattern" name="family">
                 <test qual="any" name="family">
                     <string>mono</string>
                 </test>
                 <edit name="spacing" mode="assign">
                     <int>100</int>
                 </edit>
             </match>

某些字体，比如 Helvetica，当 anti-aliased 的时候可能存在问题。 通常的表现为字体本身似乎被垂直的切成两半。 糟糕的时候，还可能导致应用程序崩溃。 为了避免这样的现象，考虑添加下面几行到 `local.conf`文件里面：

             <match target="pattern" name="family">
                 <test qual="any" name="family">
                     <string>Helvetica</string>
                 </test>
                 <edit name="family" mode="assign">
                     <string>sans-serif</string>
                 </edit>
             </match>

一旦您完成对 `local.conf` 文件的编辑，确保您使用了 `</fontconfig>` 标签来结束文件。 不这样做将会导致您的更改被忽略。

最后，用户可以通过他们个人的 `.fonts.conf` 文件来添加自己的设定。 要完成此项工作， 用户只需简单地创建 `~/.fonts.conf` 并添加相关配置。 此文件也必须是 XML 格式的。

最后：对于LCD屏幕， 可能希望使用子像素的取样。 简单而言， 这是通过分别控制 (水平方向分开的) 红、绿、蓝 像素， 来改善水平分辨率； 这样做的效果一般会非常明显。 要启用它， 只需在 `local.conf` 文件的某个地方加入：

             <match target="font">
                 <test qual="all" name="rgba">
                     <const>unknown</const>
                 </test>
                 <edit name="rgba" mode="assign">
                     <const>rgb</const>
                 </edit>
             </match>

> 注意: 随您显示器的种类不同， 可能需要把 `rgb` 改为 `bgr`、 `vrgb` 或 `vbgr`： 试验一下看看那个更好。

上一页 | 起始页 | 下一页
配置 X11 | 上一级 | X 显示管理器

本文档和其它文档可从这里下载：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.