在 X 中理解字体和颜色可能比在其他平台上更复杂。
X 知道各种字体类型,包括位图、Type 1,以及从 v4.x 开始的 TrueType。X 服务器可以自行处理字体,或者有时这项任务会分派给字体服务器(其中有几种)。xfs (X 字体服务器) 是 Linux 上最常用的字体服务器。
字体服务器不是必需的,因为 X 可以自行处理大多数字体渲染。字体服务器传统上用于为网络上的多台主机提供字体服务,但有时也用于提供增强的功能。此外,字体服务器可以通过将字体渲染卸载到单独的进程来提供适度的性能提升。
X 根据 "FontPath" 中列出的字体来识别字体。这最初在以下文件中设置:XF86Config如果 X 服务器自行处理字体任务(即没有字体服务器),这将是一个包含字体文件的目录列表,例如
FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/Type1" FontPath "/usr/X11R6/lib/X11/fonts/misc" FontPath "/usr/X11R6/lib/X11/fonts/100dpi" FontPath "/usr/X11R6/lib/X11/fonts/75dpi" |
如果正在使用字体服务器,则 "FontPath" 将指向字体服务器正在服务的套接字(这只是一个可能的示例)
FontPath "unix/:7101" |
在后一种情况下,可用的实际字体目录将在字体服务器中配置(请参阅本地文档),它将使用类似于为以下文件显示的目录类型方案XF86Config.
一旦安装了合适的字体,它们必须被 "准备" 好。对于大多数字体,这意味着在字体所在的目录中(以 root 身份)运行 mkfontdir 实用程序(参见 man 页面)。Type 1 和 TrueType 需要额外的步骤(见下文)。您的供应商已经为您发行的任何字体完成了此操作。因此,这只需要对您添加的字体执行。为了使新添加的字体对 X 可见,您需要运行适当的 xset 命令来修改现有的 FontPath,或重新读取它(参见 man 页面)。或者,重新初始化您的字体服务器。
示例:准备字体,并在添加新字体后重新初始化字体服务器
su <password> mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/ /etc/init.d/xfs restart |
在较新的发行版上,第一个命令可能不是必需的(因为在某些情况下它是由 init 脚本完成的)。如果这是一个新目录,则需要修改字体服务器配置。示例:在没有字体服务器的情况下重新初始化
su <password> mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/ xset +fp /usr/X11R6/lib/X11/fonts/my_new_fonts/ xset fp rehash |
如果该目录已经是 FontPath 的一部分,则 "xset +fp" 将不是必需的。
xlsfonts | less 可用于列出 X 及其客户端已知且可用的字体。运行 xlsfonts | less,您还可以了解 X 理解的字体定义。"X 逻辑字体描述" ("XLFD") 是任何给定字体的完整描述。XLFD 看起来像
-adobe-helvetica-medium-r-normal-*-*-120-*-*-p-*-iso10646-1 |
其中从左到右的每个字段是
fndry- 字体制造商,制作字体的公司或个人。 |
fmly- 字体族,字体的常用昵称 |
wght- 字体粗细(粗体、中等,等等) |
slant- 字体倾斜度(斜体、倾斜、罗马体(正常),等等) |
sWdth- 字体宽度(正常、 condensed、 extended,等等) |
adstyl- 附加样式(无衬线、衬线,等等) |
pxlsz- 像素大小,字符垂直方向的像素数 |
ptSz- 文本的大概磅值大小(类似于 pxlsz) |
resx- 水平分辨率,以 dpi 为单位 |
resy- 垂直分辨率,以 dpi 为单位 |
spc- 间距,显然只在 Schumacher 字体中有用 |
avgWidth- 字体的平均字符宽度 |
rgstry- 识别字体列表的注册表 |
encdng- 国籍编码 |
"*" 充当通配符。实际上,如果不是每个字段都指定,X 服务器将采用它在 FontPath 中找到的第一个匹配项。这就是为什么最好按首选字体优先的顺序排列 FontPath,因为某些程序会故意 "宽松地" 指定字体,以便您的系统有一定的自主权。
程序 xfontsel (X 字体选择器) 可能很有用。现在尝试启动它。您最初会在主窗口中看不到任何有用的东西,但尝试按住左键fndry按钮。如果您的所有字体都井然有序,您将看到一个选择菜单,例如adobe和b&h和bitstream等等。选择一个,例如b&h您会注意到下窗口中的字体更改为可理解的内容。这就是使用此程序选择字体的方式;从最左侧(最一般的选择)开始,向右移动到更具体的选项。在选择 foundry(制造商)之前,选择最右端的选项没有多大意义,因为这些选项通常按其相互依赖性排序。
当您从fmly选择时,您将看到大多数选项灰显,只剩下三个。这意味着这三个是此 foundry 制造的唯一字体族。某些字体族出现在多个 foundry 下,例如,Adobe 和 Bitstream 都制作了 Courier 字体的变体。现在您可以选择wght等等。在您进行到足够远之后,您将缩小到您想要的字体。您不一定必须填写所有选项才能选择单个字体,您的系统上没有那么多字体!您未选择的选项将用*表示,指示该位置可以使用任何选项,并给 X 一些回旋余地。
当您对字体选择感到满意时,点击选择按钮,您的选择将被放置在 X 剪贴板中,准备粘贴到您的文档或您正在处理的任何内容中。例如,打开一个 xterm 窗口并键入类似xterm -font后跟一个左引号。然后指向屏幕上的那个位置,并单击鼠标中键(如果您没有中键,则同时单击左右键)。这将从剪贴板粘贴选择,这应该是您刚刚选择的字体。然后输入右引号,并点击Enter。例如,指定 Courier 字体的漂亮的大型 xterm 看起来像这样xterm -font "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*".
如果您找到了您喜欢的字体,可以通过将字体定义放置在相应的配置文件中来永久使用它(见上文)。
请注意,您还可以使用命令行选项 -pattern 限制 xfontsel 要显示的字体数量,后跟一个带引号的字体规范,如上所述。
xfd 实用程序也有助于检查单个字体。如果使用类似 xfd -fn fixed 的命令行启动,它将向您显示该字体的完整字符集。
KDE 和 GNOME 有它们自己不太晦涩的实用程序 ;-)
考虑到您唯一能找到的那种字体类型,在大多数情况下只在 X Window 系统本身中使用,因此 XFree86 提供的字体对我们许多人来说用途有限。不幸的是,许多媒体发烧友、网页设计师和字体狂热者在依赖其他格式的操作系统中工作。而且,某些发行版似乎也没有非常重视充分利用默认字体。
Type 1 字体,最常与 PostScript 文档格式结合使用,是 Unix 和 Linux 环境中的传统标准。您应该已经安装了一个相当不错的入门级选择。或者,可以在互联网上轻松找到更多免费字体,并尝试 ftp://ftp.cdrom.com/pub/os2/fonts/ 作为起点。Type 1 是可缩放字体,并且具有与更知名的 TrueType 字体相同的许多优点。如果您没有安装大量高质量的 TrueType 字体,那么 Type 1 是您大多数 GUI 应用程序所需的字体。但同样,这在其他平台上不是标准,并且在查看以 "其他平台" 为目标设计的文档(例如,网页)时可能会出现问题。
TrueType 字体始于 Apple,后来由 Microsoft 获得许可。因此,从非 Unix 平台迁移过来的人们已经熟悉这些高质量字体。不幸的是,在合适的许可下,高质量的 TrueType 字体并不多,因此 Linux 发行版中包含的字体也不多。而那些包含的字体,通常质量也不高。同样不幸的是,TrueType 已成为 Web 和其他场所的某种标准,而没有良好的 TrueType 字体可能会成为一个缺点。XFree86 似乎也比 Type1 更好地渲染 TrueType。
这是坏消息。好消息是,任何 Windows 版本或任何 Windows 应用程序中包含的任何 TrueType 字体都应该在 Linux 上工作。虽然您必须采取一些额外的步骤来集成它们。这尤其有助于网页浏览,在网页浏览中,X 的位图字体无法很好地缩放。
我们将不在此处详细介绍安装和配置这些字体,因为其他文档中对此进行了深入探讨。有关一般字体信息和 Type 1 提示,请参阅 字体 HOWTO。有关各种 X 相关字体提示,尤其是 TrueType,请参阅 字体去丑化迷你 HOWTO,字体去丑化迷你 HOWTO。
让我们回到终端窗口,尝试一些操作。使用如下命令行打开一个 xterm
xterm -fg DarkSteelBlue1 -bg red3 & |
哎哟!虽然这可能不太漂亮,您可能不会在其中完成很多最好的工作,但它演示了 X 配置的一个有趣的方面——颜色名称。虽然不是特别精确,但这是一种记住各种颜色的好方法。请注意,颜色名称永远不区分大小写。
X 服务器实际上将颜色值作为十六进制红-绿-蓝 (RGB) 颜色表示法来处理。这看起来像十六进制的 "#0aff0a"。不太容易记住。但是 X 提供了一种更容易记忆的有效颜色定义方式。这些定义存储在一个文本表中,通常为/usr/X11R6/lib/X11/rgb.txt,并在XF86Config的 "Files" 部分中定义。
如果您有兴趣,请使用文本编辑器查看一下。其中定义了非常非常多的色调。例如,我在我的文件中数了八十三个蓝色阴影。简短片段
176 226 255 LightSkyBlue1 164 211 238 LightSkyBlue2 141 182 205 LightSkyBlue3 96 123 139 LightSkyBlue4 202 225 255 LightSteelBlue1 188 210 238 LightSteelBlue2 162 181 205 LightSteelBlue3 110 123 139 LightSteelBlue4 191 239 255 LightBlue1 178 223 238 LightBlue2 154 192 205 LightBlue3 104 131 139 LightBlue4 |
如果您愿意,可以自定义此文件,但这对于我们大多数人来说很少需要。但拥有它很重要,因为某些应用程序依赖于它。
桌面环境将具有用于选择颜色的 GUI 实用程序。