Fedora 24 Linux 桌面环境默认字体渲染引擎 freetype 及字体配置工具 fontconfig 采用的是未经优化的编译及设置,字体渲染效果比较差。而某些 Linux 发行版的桌面字体渲染看起来很好,甚至能够接近苹果 Mac OS X 系统的效果,实际上是对 freetype 字体渲染引擎进行了修改的缘故。为此,我们可以通过安装 Infinality 的改版 freetype 及 fontconfig 软件包来实现基于 Infinality 的字体渲染效果。Infinality 是一个致力于改善 Fedora 等主流 Linux 操作系统字体渲染效果的解决方案,包括重新优化编译过的 freetype 库,fontconfig 配置包等。原 Infinality 网站已经很久没有再更新了,但现在又有新的开发人员在 github 上继续进行 Infinality 的开发,并为 Fedora 23/24 提供了打包好的 repo 软件源。新的 Infinality 官网(其实是新作者的博客)网址为 https://danielrenninghoff.com,可以访问其官网了解有关 Infinality 目前的具体开发情况及开发者未来的计划。下面介绍在 Fedora 24 上的 Infinality 安装配置方法:
1、安装 Infinality 的 repo 软件源,使用下面的命令:
# dnf install $(rpm -E %fedora)/noarch/infinality-ultimate-repo-$(rpm -E %fedora)-1.noarch.rpm
2、通过 Infinality 的软件源安装相关优化编译过的字体渲染引擎库,使用下面的命令:
# dnf install --allowerasing cairo-infinality-ultimate fontconfig-infinality-ultimate freetype-infinality-ultimate
注意,这里使用了 dnf 的 --allowerasing 参数,表明你所安装的 Infinality 字体渲染引擎库与系统默认安装的库是相冲突的,通过 --allowerasing 参数可以使 dnf 卸载相应冲突的老库再安装新的 Infinality 库。
3、安装 Infinality 优化过的字体。Infinality 专门提供了一组优化过的字体,配合 Infinality 字体渲染引擎将能达到非常好的效果。这组字体包括 CJK 中日韩字体,且均内置了比较好的 hinting 微调信息,使用下面的命令:
# dnf install --allowerasing ibfonts-meta-base ibfonts-meta-extended-lt ibfonts-meta-extended
注意,这将会自动安装很多相关的字体包,特别是 google-noto-sans 字体包。但是在实际环境中,Infinality 的官方源总是访问很慢,特别是安装字体时 dnf 失败率很高,所以其实也可以不用安装上述字体,只需要确保安装谷歌官方提供的 noto cjk 字体即可,后面会讲到如何从谷歌官方网站去安装 noto cjk 字体。请注意,在安装完后上述字体后,请删除 google-noto-sans 字体包中的 cjk 中日韩字体,因为是以 ttc 方式提供的,对于 Java 程序而言配置上会出现字体识别方面的问题,因此要替换为 google 官方单独提供的 otf 格式的 noto sans cjk 字体。首先,删除 Infinality 提供的 google-noto-sans 中的 cjk 字体,使用下面的命令:
# rm -f -r /usr/share/fonts/google-noto/NotoSansCJK.ttc
然后从 https://www.google.com/get/noto 官方网站下载 Noto Sans CJK JP、Noto Sans CJK KR、Noto Sans CJK SC、Noto Sans CJK TC 四个字体包(分别对应日文、韩文、简体中文、繁体中文)。谷歌官方提供的这几个 CJK 字体包含了完整的字型、语言及区域信息,不过要注意,因为是访问谷歌官方网址,因此可能需要FQ才行。下载后解压缩这些字体包,将会发现这些字体都是按照不同文种和不同字型单独以 otf 格式提供的。将这些字体文件全部复制到 /usr/share/fonts/google-noto 目录下,然后执行下面的命令:
$ rm -f -r ~/.cache/fontconfig/*
# rm -f -r /var/cache/fontconfig/*
# fc-cache -f -v /usr/share/fonts
这样既可完成谷歌官方 otf 格式 noto sans cjk 字体的安装。之后,就可以在系统中将 Noto Sans CJK SC(简体中文)配置为界面字体了。Noto Sans CJK 字体与思源黑体同源,并经过高质量 hinting,配合 Infinality 优化编译过的 freetype 字体渲染引擎和 fontconfig 字体配置会达到非常好的字体渲染效果。
4、删除 VL Gothic 及 naver-nanumgothic(名字可能拼写不准,但大致是这样)日文字体。由于 Infinality 默认的 fontconfig 配置会将日文字体优先级提高排列在中文字体前面,这会导致很多程序特别是 Java 程序默认的中文显示使用日文字体,会导致字型难看且出现方框(日文汉字数量少,导致中文显示不完全)。所以最简单的办法就是删除这两个默认安装的日文字体,使用下面的命令:
# dnf remove vlgothic-fonts naver-nanumgothic-fonts
需要注意的是,Infinality 官网服务器的访问可能比较慢,会导致 dnf 安装软件包时出错,可以多试几次直至安装成功。安装完毕后,可在 /usr/share/doc 目录下找到两个目录:freetype-infinality-ultimate 和 fontconfig-infinality-ultimate。这两个目录中都有 README 等自述文件比较详细地介绍了 Infinality 优化编译字体渲染引擎库的相关配置方法。根据其文档说明,我们需要执行以下操作: