Linux桌面改善简书的阅读效果

本方法仅针对使用FreeType的Linux桌面环境。Windows用户请移步至《用MacType改善简书的阅读效果》

Fedora 24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法,fedorainfinality

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 官网(其实是新作者的博客)网址为 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 更黑更平滑一点)。

虽然 Infinality 优化字体渲染软件包安装后会自带一些 fontconfig 配置,但是对于中文字体来说,我们希望 Infinality 提供的 Noto Sans CJK SC 中文字体能够具有最高优先级,我们可以创建一个名为 65-0-nonlatin-custom.conf 的文本文件,放置于 /etc/fonts/conf.d 目录下,该文件的内容如下:<?xml version="1.0"?>

<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="pattern">
        <test qual="any" name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Sans CJK SC</string>
            <string>Droid Sans Fallback</string>
        </edit>
    </match> 

    <match target="pattern">
        <test qual="any" name="family">
            <string>sans-serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Sans CJK SC</string>
            <string>Droid Sans Fallback</string>
        </edit>
    </match>

    <match target="pattern">
        <test qual="any" name="family">
            <string>monospace</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Dejavu Sans Mono</string>
            <string>Noto Sans CJK SC</string>
            <string>Droid Sans Fallback</string> 
        </edit>
    </match> 
</fontconfig>

对于 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 中的字体渲染已经完全与系统原生字体渲染完全一致,且能够跟随系统原生字体渲染调整而变化了。

24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法,fedorainfinality Fedora 24 Linux 桌面环境默认字体渲染引擎 freetype 及...

如今大多数发行版本要么自带文泉驿字体,要么在软件源里提供,此外也可以自行下载。文泉驿微米黑的软件包名往往是wqy-microhei。Fedora自带了这个字体。

由于方正字库的版权问题,这里不提供方正书宋的下载。不过可以迂回一下,由于WPS for Linux自带一系列方正字体,因此安装WPS也是个不错的办法。现在就连外国人写的Fedora tweak tool,都自带Kingsoft Office(WPS在境外的名字)了。

首先要准备的是infinality插件。有的发行版本,例如红旗(不幸已破产),是预装了这个插件的;还有的版本例如Arch,可以在软件仓库里找到infinality;还有Fedora,默认源没有这个软件包,不过幸好infinality官方网站提供了针对Fedora的源,从这个源里安装freetype-infinality软件包即可。

最后,在浏览器的设置中,将无衬线字体改为文泉驿微米黑,衬线字体改为方正书宋,所有的配置就完成了。重启桌面吧。

美中不足的是在这里宋体还是略显瘦弱。可以告诉我怎么调整特定字体的渲染吗?

最近几天我在几个Linux发行版本之间纠结了好久,因为字体渲染效果对于我这个追求美观的强迫症患者来说,就像喝水一样重要。在参考了各种半拉子教程之后,终于总结出了一套靠谱的办法。本文给出的方法可以在Fedora等大多数发行版本下使用,但是可能在Ubuntu这个非主流发行版本上效果不明显。这里以Fedora的命令为例进行讲解。

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

    <!-- ##Style: linux -->

    <!-- ******************************************************************  -->
    <!-- *************************** ALIASES ******************************  -->
    <!-- ******************************************************************  -->

    <!-- Default fonts - Linux Appearance -->
    <alias>
        <family>sans-serif</family>
        <prefer>
            <family>DejaVu Sans</family>
            <family>WenQuanYi Micro Hei</family>
        </prefer>
    </alias>
    <alias>
        <family>serif</family>
        <prefer>
            <family>Liberation Serif</family>
            <family>FZShuSong-Z01</family>
        </prefer>
    </alias>
    <alias>
        <family>monospace</family>
        <prefer>
            <family>Liberation Mono</family>
            <family>WenQuanYi Micro Hei Mono</family>
        </prefer>
    </alias>

</fontconfig>
rpm -Uvh http://www.infinality.net/fedora/linux/infinality-repo-1.0-1.noarch.rpm
sudo yum install freetype-infinality
sudo sh /etc/fonts/infinality/infctl.sh setstyle

然后用管理员权限执行/etc/fonts/infinality/infctl.sh改变配置文件为linux。

sudo vi /etc/fonts/infinality/styles.conf.avail/linux/20-aliases-default-linux.conf

然后要准备字体。我推荐安装两种字体,文泉驿微米黑和方正书宋。

把它改成像这个样子(注意我在每个西文字体下添加了备选的中文字体):

使用管理员权限编辑/etc/fonts/infinality/styles.conf.avail/linux/20-aliases-default-linux.conf文件。

本文由金沙棋牌游戏官方网站发布于互联网,转载请注明出处:Linux桌面改善简书的阅读效果

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。