你的位置:首页 > 操作系统

[操作系统]Fedora 24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法


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 http://rpm.danielrenninghoff.com/infinality/fedora/$(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

注意,这将会自动安装很多相关的字体包。

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 优化编译字体渲染引擎库的相关配置方法。根据其文档说明,我们需要执行以下操作:

# cp /usr/share/doc/freetype-infinality-ultimate/infinality-settings-generic /etc/profile.d/infinality-settings-generic.sh# cp /usr/share/doc/freetype-infinality-ultimate/infinality-settings.sh /etc/X11/xinit/xinitrc.d# chmod a+x /etc/X11/xinit/xinitrc.d/infinality-settings.sh

上述两个是关键的字体渲染效果配置文件,具体的配置说明可以打开这两个文件看里面的描述。一般而言,比较合适的配置是将 /etc/profile.d/infinality-settings-generic.sh 文件中第 74 行的 XFT_SETTINGS 变量中的 Xft.hinting 设置为 1,将 Xft.hintstyle 设置为 hintslight,将第 715 行的 USE_STYLE 设置为 INFINALITY(作者推荐设置)或者 UBUNTU。将/etc/X11/xinit/xinitrc.d/infinality-settings.sh 文件中第 35 行的 INFINALITY_FT 设置为 ultimate4(比作者推荐的 ultimate3 更黑更平滑一点)。

对于 Java 程序而言,在 Linux 环境下其字体渲染总是比系统原生字体渲染效果要差。主要原因在于 Oracle 官方的 Java 内建了一套私有的字体渲染引擎,无法使用系统的 freetype 及 fontconfig 配置,且渲染效果比较差,属于和微软 cleartype 相似的渲染效果。OpenJDK 则采用的是 freetype 字体渲染引擎,但是默认并不读取系统 fontconfig 配置,且字体渲染的设置是固定的,也类似于微软 cleartype 效果,所以也不太理想。最好的办法就是,对 OpenJDK 源代码进行必要的修改,使之能够使用系统 freetype 字体渲染引擎的同时,能够读取当前系统 fontconfig 配置,并以此灵活调整 Java 中 freetype 的字体微调效果。如果自己编译 OpenJDK 的话难度较大,而 Infinality 已经提供了针对 freetype 及 fontconfig 优化编译打包好的 OpenJDK 软件包(目前基于 OpenJDK 8u92 版本代码),因此可通过 dnf 直接从 Infinality 软件源下载安装,使用下面的命令:
# dnf install --allowerasingjava-1.8.0-openjdk-infinality-ultimate java-1.8.0-openjdk-infinality-ultimate-headless java-1.8.0-openjdk-infinality-ultimate-devel
其中,前两个软件包是 OpenJDK JRE 的必要软件包,最后一个软件包是 OpenJDK JDK 的必要软件包(如果用来做 Java 开发的话)。注意,不要安装java-1.8.0-openjdk-infinality-ultimate-accessibility 软件包,因为这个软件包是 OpenJDK 为 GTK+/GNOME ATK 组件提供的接口,而 ATK 已经被废弃了,如果安装了 java-1.8.0-openjdk-infinality-ultimate-accessibility 后会导致运行很多大型 Java Swing 程序出现错误(特别是在 Swing 使用 GTK+ 本地主题时)。Infinality 优化过的 OpenJDK 安装后,其具体位置及系统中多个 Java 如何切换当前环境变量的问题,可参考 Linux 下的 alternatives 命令及其使用说明,alternatives 命令是专门用于在 Linux 中为同时安装存在的同名但不同版本的多个软件进行切换使用而设计的,比如系统中同时安装了不同版本的 Java(JDK 或 JRE)就可以使用 alternatives 来进行当前使用版本的切换操作,很方便。

在安装了 Infinality 优化过的 Java 后,运行 Java Swing 程序将会发现 Swing 中的字体渲染已经完全与系统原生字体渲染完全一致,且能够跟随系统原生字体渲染调整而变化了。




几月去泰国旅游最便宜怎样去泰国旅游7月泰国旅游泰国旅游多少钱一人泰国游费用天适从化樱花悠乐园游玩需要多久?天适樱花悠乐园一日游路线? 《奔跑吧兄弟》电影什么时候上映?有哪些演员? 天目湖水世界 水上娱乐王国 从化樱花悠乐园春节樱花开的怎么样?天适樱花悠乐园春节樱花好看吗? 阳朔菩萨水岩网上订票?菩萨水岩预约价格? 佛冈羊角山团购优惠吗?清远羊角山漂流团购门票在哪买? 安徽文化之旅:一场和文化相关的旅行 阳朔菩萨水岩在哪里?菩萨水岩有什么好玩的? 暑假去深圳野生动物园有什么好玩的?深圳野生动物园暑期活动? 深圳海洋天地表演时间?深圳动物园海洋天地有什么表演? 深圳海洋天地在野生动物园里面吗?深圳野生动物园海洋天地门票多少钱? 深圳海洋天地在哪里?深圳动物园海洋天地怎么去? 女性出境最佳旅游目的地盘点_全球最适合女性出游的五大目的地 越南越美,走近诗意西贡,记住的不只是贫穷 跟着《舌尖上的中国2》游走浙江 赴台个人游期限有望延长至30天 MG02-1206Q7YC Datasheet MG02-1206Q7YC Datasheet MG02-1206QBC Datasheet MG02-1206QBC Datasheet MG02-1206QEC Datasheet MG02-1206QEC Datasheet 洛阳桥在哪里 洛阳桥在哪里 洛阳桥在哪里 九寨沟淡季门票 九寨沟淡季门票 九寨沟淡季门票 迪拜是在哪个国家 迪拜是在哪个国家 迪拜是在哪个国家