美只在像素深处吗?,第一部分

作者:Marcel Gagné

大家好,欢迎回到系统管理员专栏。如果我看起来像是离开了一段时间,那是因为我确实离开了一段时间——在欧洲待了十七天,学习热爱意式浓缩咖啡,并发现古老只是一个视角问题。当他们在欧洲谈论古老的建筑时,他们不是在谈论百年老宅,而是四百年或五百年的老宅。感谢你们的询问;我在那里度过了一段美好的时光(没有什么比得上在倾盆大雨中乘坐贡多拉)。也许我会在某个时候给你们看一些照片。

我在我的服务器上运行着一个安静的邮件列表,人们在其中讨论 Linux、生活、宇宙以及任何听起来可能在其系统上运行的东西。字体是时不时出现的话题之一(并且几天前也出现过),它似乎是 Linux 环境中工作的最大难题之一。字体周围有一种神秘感,仿佛有什么神奇的事情正在发生,最好不要碰它,以免激怒 X 神。即使是经验丰富的 Linux 用户在这个话题上也如履薄冰:警告!此处有怪兽。

Linux 下(实际上是 X 下)字体的真正问题在于处理字体的多种不同方式,更不用说不同的字体类型了。我们有位图字体和轮廓字体;它们进一步细分为 Speedo 字体、可移植编译字体、Type1、TrueType、ghostscript 字体和其他字体。“不止一种方法可以做到”在这里并没有奏效。

在最近的讨论中,有人想从他们的系统中删除一些特别丑陋的字体。虽然这看起来很简单,但这些字体在哪里?它们看起来像什么?你如何添加或删除它们?我们甚至知道我们的系统上已经安装了哪些字体吗?所有这些都是好问题。现在,您可能认为您的系统上没有安装很多字体,但您会惊讶于那里实际上有多少字体。尝试 xlsfonts 命令,您就会知道您的 X 服务器知道什么。

     $ xlsfonts
     -adobe-courier-bold-i-normal--0-0-0-0-m-0-iso8859-1
     -adobe-courier-bold-i-normal--0-0-0-0-m-0-iso8859-2
     -adobe-courier-bold-i-normal--0-0-0-0-m-0-iso8859-3
     -adobe-symbol-medium-r-normal--34-240-100-100-p-191-adobe-fontspecific
     -adobe-symbol-medium-r-normal--8-80-75-75-p-51-adobe-fontspecific
     -adobe-symbol-medium-r-normal--8-80-75-75-p-51-adobe-fontspecific
     -adobe-times-bold-i-normal--0-0-100-100-p-0-iso10646-1
     -adobe-times-bold-i-normal--0-0-100-100-p-0-iso8859-1
     -adobe-times-bold-i-normal--0-0-75-75-p-0-iso10646-1
     -adobe-times-bold-i-normal--0-0-75-75-p-0-iso8859-1

您在上面看到的输出实际上只是在我系统上运行该命令的一小部分摘录。如果我将命令的输出通过管道传输到 wc -lxlsfonts | wc -l),我得到 2907 行。因此,您可能希望将该输出通过管道传输到 moreless。让我们看看第一行并检查它——这一切意味着什么?

这种识别字体的方法称为 X 逻辑字体描述。描述的每个部分都用连字符分隔,使其更容易阅读。第一部分(在本例中为adobe)是铸字厂。本质上,这往往是谁负责创建字体;您可能会在这里看到 bitstream、xfree86、urw、dec 等。下一个是字体系列,例如 times、courier 等。然后我们有字体的粗细。是粗体、细体、半粗体还是其他?后面的单个字母是倾斜度;“i”表示斜体,“r”表示罗马体,或“o”表示倾斜体。它从那里继续延伸到拉伸、样式、像素、点等等。除非这真的是你的菜,否则你可能会开始为此发疯。相反,为什么不启动 xfontsel 程序呢?它是 XFree86 工具包的一部分。

输入

     xfontsel &

会给你

Is Beauty Only Pixel Deep?, Part 1

如果您单击任何字体描述符(fndry、fmly、slant 等),显示将更新以显示符合该配置文件的可用字体数量。然后您可以指定其他参数并进一步缩小列表。窗口的底部部分让您看到字体的外观。除了让您玩弄描述并定制字体外,该实用程序实际上并没有做任何其他事情。尽管如此,它仍然是了解这些描述如何组合在一起的好方法。

继续,这些字体的位置会有所不同,尽管它们中的大多数倾向于位于 /usr/X11R6/lib/X11/fonts 层次结构下。包含字体的每个目录都会告知您的 X Window 系统。过去,XF86Config 文件中有 FontPath 条目,如下所示

     Section "Files"
     FontPath        "/usr/X11R6/lib/X11/fonts/75dpi"

系统上的每个字体目录都有一行。但是,你们中的大多数人将运行带有某个版本的 XFree86 4.X 的较新系统,并且您的 XF86Config 文件可能称为 XF86Config-4。在那里,您可能找到的唯一 FontPath 条目是这个

     FontPath "unix/:7100"

这意味着您正在运行 X 字体服务器。“字体服务器”,您问?“什么是字体服务器?” 在最新的 XFree86 实现中,您会发现包含 xfs 软件包。您很可能在首次设置系统时安装了 X,但是如果您想从 XFree86.org 获取最新最棒的 X 服务器,可以在 Xfsrv.tgz 捆绑包中找到 xfs。该服务器还有另一个非常好的功能。当您启动(或重新启动)服务器时,它会负责重新生成字体列表,并且它会处理所有这些奇怪的字体业务。

要列出服务器已知的字体路径,您可以检查其在 /etc/X11/fs/config 中的配置。这是一个文本文件,可以使用您喜欢的编辑器进行编辑。以下是文件中描述我的系统上可以找到字体的各种位置的示例。

     #
     catalogue = /usr/X11R6/lib/X11/fonts/misc:unscaled,
        /usr/X11R6/lib/X11/fonts/75dpi:unscaled,
        /usr/X11R6/lib/X11/fonts/100dpi:unscaled,
        /usr/X11R6/lib/X11/fonts/Type1,
        /usr/X11R6/lib/X11/fonts/Speedo,

请注意,这只是描述字体“目录”的文件的一部分。您系统上的顺序可能与我的不同(因为我一直在修改我的)。或者,您可以在许多不同的 Linux 发行版(包括 Red Hat、Mandrake、SuSE 等)上使用 chkfontpath 命令。

     $ /usr/sbin/chkfontpath

以下是我在严重滥用的 Red Hat 笔记本电脑上运行它时得到的结果。

     Current directories in font path:
     1: /usr/X11R6/lib/X11/fonts/misc:unscaled
     2: /usr/X11R6/lib/X11/fonts/75dpi:unscaled
     3: /usr/X11R6/lib/X11/fonts/100dpi:unscaled
     4: /usr/X11R6/lib/X11/fonts/misc
     5: /usr/X11R6/lib/X11/fonts/Type1
     6: /usr/X11R6/lib/X11/fonts/Speedo
     7: /usr/X11R6/lib/X11/fonts/CID
     8: /usr/X11R6/lib/X11/fonts/75dpi
     9: /usr/X11R6/lib/X11/fonts/100dpi
     10: /usr/share/fonts/default/Type1
     11: /usr/share/fonts/ja/TrueType
     12: /usr/share/AbiSuite/fonts

您可以使用相同的命令 (chkfontpath) 来删除和添加字体。 具体来说,如果您想删除 AbiSuite 字体路径,您将输入

     chkfontpath  -r  /usr/share/AbiSuite/fonts

在旧版本的 X 上,您将使用 xset 命令添加(或删除)字体路径。假设我想添加一个名为“newfonts”的新字体目录的路径

     xset +fp /path_to/newfonts

然后我们需要让 X 识别新字体。 

     xset fp rehash

您也可以此时重新启动字体服务器。

     service xfs restart

chkfontpath 命令的优点在于它大大简化了整个过程。如果您有它,我建议您使用它。现在,让我们回到我的 AbiWord 字体。如果此时我尝试启动 AbiWord,它会抱怨缺少字体。为了使事情再次正常工作,我在 chkfontpath 上使用 -a 选项重复该命令。AbiWord 现在愉快地启动了。

我今天的电子配额几乎用完了,所以我今天就到此为止。考虑一下最后的想法:如果您像我一样,您有数千个字体文件,这些文件来自您多年来购买的软件包。在您的应用程序中使用其中一些旧字体怎么样?您如何说服您的系统使用一组字体而不是另一组字体?它是如何决定的?所有这些问题以及更多问题将在我们下次在这个专栏见面时得到解决。

与此同时,请记住,美不仅仅在像素深处。

Marcel Gagné的书,Linux 系统管理;用户指南(ISBN 0-201-71934-7,Addison Wesley)现已在商店中出售(包括您最喜欢的在线供应商)。您可以从他的 网站免费下载摘录。

电子邮件:mggagne@salmar.com

加载 Disqus 评论