歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> 學習Linux

Fedora 24 Linux 環境下實現 Infinality 字體渲染增強及 Java 字體渲染改善的方法,fedorainfinality

Fedora 24 Linux 環境下實現 Infinality 字體渲染增強及 Java 字體渲染改善的方法,fedorainfinality

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 官網(其實是新作者的博客)網址為 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 更黑更平滑一點)。

雖然 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 中的字體渲染已經完全與系統原生字體渲染完全一致,且能夠跟隨系統原生字體渲染調整而變化了。

http://xxxxxx/Linuxjc/1162768.html TechArticle

Copyright © Linux教程網 All Rights Reserved