歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Fedora 24 Linux 環境下實現 Infinality 字體渲染增強及 Java 字體渲染改善的方法

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

日期:2017/2/28 13:48:06   编辑:Linux教程

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

注意,這將會自動安裝很多相關的字體包,特別是 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 優化編譯字體渲染引擎庫的相關配置方法。根據其文檔說明,我們需要執行以下操作:

# 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.autohint 設置為 0,Xft.hinting 設置為 1,將 Xft.hintstyle 設置為 hintfull(好像默認值就是這個),將第 715 行的 USE_STYLE 設置為 INFINALITY(作者推薦設置),將 /etc/X11/xinit/xinitrc.d/infinality-settings.sh 文件中第 35 行的 INFINALITY_FT 設置為 ultimate3(作者推薦的就是 ultimate3,作為默認值 )。這裡注意,之所以將 Xft.hintstyle 設置為 hintfull,是因為 Infinality 優化後的字體渲染引擎內部對 full 級別的微調指令做了更好的優化,特別是搭配 google 官方的 noto cjk 字體(官方是 hinted 過的)能夠達到最好效果,比 hintslight 要好很多!這個情況 Infinality 作者也在 /etc/profile.d/infinality-settings-generic.sh 文件注釋中解釋得比較清楚了。

這裡要注意,Noto Sans CJK 字體基線高度和 DejaVu Sans 字體不同,如果采用混用方式,即拉丁字母采用 DejaVu,中文采用 Noto,會導致文字行間隔太小,影響美觀。所以最好的辦法是,所有字符全都用 Noto Sans CJK 字體來顯示,包括 Mono 等寬字符情況。雖然 Infinality 優化字體渲染軟件包安裝後會自帶一些 fontconfig 配置,但是對於中文字體來說,我們希望 Infinality 提供的 Noto Sans CJK SC 中文字體能夠具有最高優先級,我們可以創建一個名為 65-0-nonlatin-custom.conf 的文本文件,放置於 /etc/fonts/conf.d 目錄下,該文件的內容如下:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match>
    <test name="lang" compare="contains">
      <string>zh-cn</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans Mono CJK SC</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>zh-tw</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans Mono CJK TC</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>jp</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans Mono CJK JP</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>zh-cn</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>zh-tw</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans CJK TC</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>jp</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans CJK JP</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>zh-cn</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>zh-tw</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans CJK TC</string>
    </edit>
  </match>

  <match>
    <test name="lang" compare="contains">
      <string>jp</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans CJK JP</string>
    </edit>
  </match>
</fontconfig>

同時也要注意在 /etc/fonts/conf.d 目錄中將其他 65 開頭含有 nonlatin 字樣的字體配置文件中 Noto Sans CJK 字體或者 Noto Sans Mono CJK 字體優先級排到最高。為了能夠使 hint 設置最終有效,還要在 /etc/fonts 目錄下創建一個 local.conf 文件(如果有則直接修改),具體內容如下:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<edit name="autohint" mode="assign">
<bool>false</bool>
</edit>
<edit name="hinting" mode="assign">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="assign">
<const>hintfull</const>
</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 --allowerasing java-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 來進行當前使用版本的切換操作,很方便。

在安裝完 OpenJDK 後,仍需要進行基本的 Java 內建字體規則配置,這麼做的好處是定義好 Java 內建的 Dialog、DialogInput、Monospace 等邏輯字體與系統真實字體之間的映射關系,以便在 Java Swing 程序使用各種主題的時候,如果采用默認的邏輯字體可以按照我們的要求使用 google noto sans cjk 字體。OpenJDK 仍然采用 JRE 標准的 fontconfig.OS.properties 字體配置文件,其中 OS 為當前操作系統的名字,比如 Fedora、Ubuntu 等。這裡給出一個 Fedora 24 下的參考配置,文件名為 fontconfig.Fedora.properties,必須放置在 jre/lib 目錄下,注意這裡的拉丁字符也采用 Noto Sans CJK 字體顯示,避免 DejaVu Sans 混合顯示導致行間距過小問題,內容如下:


#
#
# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# Version

# Uses Fedora 9 fonts and file paths.
version=1

# Component Font Mappings

dialog.plain.latin-1=Noto Sans CJK SC Regular
dialog.plain.japanese-x0208=Noto Sans CJK JP Regular
dialog.plain.korean=Noto Sans CJK KR Regular
dialog.plain.chinese-big5=Noto Sans CJK TC Regular
dialog.plain.chinese-gb18030=Noto Sans CJK SC Regular

dialog.bold.latin-1=Noto Sans CJK SC Bold
dialog.bold.japanese-x0208=Noto Sans CJK JP Bold
dialog.bold.korean=Noto Sans CJK KR Bold
dialog.bold.chinese-big5=Noto Sans CJK TC Bold
dialog.bold.chinese-gb18030=Noto Sans CJK SC Bold

dialog.italic.latin-1=Noto Sans CJK SC Italic
dialog.italic.japanese-x0208=Noto Sans CJK JP Italic
dialog.italic.korean=Noto Sans CJK KR Italic
dialog.italic.chinese-big5=Noto Sans CJK TC Italic
dialog.italic.chinese-gb18030=Noto Sans CJK SC Italic

dialog.bolditalic.latin-1=Noto Sans CJK SC Bold Italic
dialog.bolditalic.japanese-x0208=Noto Sans CJK JP Bold Italic
dialog.bolditalic.korean=Noto Sans CJK KR Bold Italic
dialog.bolditalic.chinese-big5=Noto Sans CJK TC Bold Italic
dialog.bolditalic.chinese-gb18030=Noto Sans CJK SC Bold Italic

sansserif.plain.latin-1=Noto Sans CJK SC Regular
sansserif.plain.japanese-x0208=Noto Sans CJK JP Regular
sansserif.plain.korean=Noto Sans CJK KR Regular
sansserif.plain.chinese-big5=Noto Sans CJK TC Regular
sansserif.plain.chinese-gb18030=Noto Sans CJK SC Regular

sansserif.bold.latin-1=Noto Sans CJK SC Bold
sansserif.bold.japanese-x0208=Noto Sans CJK JP Bold
sansserif.bold.korean=Noto Sans CJK KR Bold
sansserif.bold.chinese-big5=Noto Sans CJK TC Bold
sansserif.bold.chinese-gb18030=Noto Sans CJK SC Bold

sansserif.italic.latin-1=Noto Sans CJK SC Italic
sansserif.italic.japanese-x0208=Noto Sans CJK JP Italic
sansserif.italic.korean=Noto Sans CJK KR Italic
sansserif.italic.chinese-big5=Noto Sans CJK TC Italic
sansserif.italic.chinese-gb18030=Noto Sans CJK SC Italic

sansserif.bolditalic.latin-1=Noto Sans CJK SC Bold Italic
sansserif.bolditalic.japanese-x0208=Noto Sans CJK JP Bold Italic
sansserif.bolditalic.korean=Noto Sans CJK KR Bold Italic
sansserif.bolditalic.chinese-big5=Noto Sans CJK TC Bold Italic
sansserif.bolditalic.chinese-gb18030=Noto Sans CJK SC Bold Italic

serif.plain.latin-1=DejaVu Serif Book
serif.plain.japanese-x0208=Noto Sans CJK JP Regular
serif.plain.korean=Noto Sans CJK KR Regular
serif.plain.chinese-big5=Noto Sans CJK TC Regular
serif.plain.chinese-gb18030=Noto Sans CJK SC Regular

serif.bold.latin-1=DejaVu Serif Bold
serif.bold.japanese-x0208=Noto Sans CJK JP Bold
serif.bold.korean=Noto Sans CJK KR Bold
serif.bold.chinese-big5=Noto Sans CJK TC Bold
serif.bold.chinese-gb18030=Noto Sans CJK SC Bold

serif.italic.latin-1=DejaVu Serif Italic
serif.italic.japanese-x0208=Noto Sans CJK JP Italic
serif.italic.korean=Noto Sans CJK KR Italic
serif.italic.chinese-big5=Noto Sans CJK TC Italic
serif.italic.chinese-gb18030=Noto Sans CJK SC Italic

serif.bolditalic.latin-1=DejaVu Serif Bold Italic
serif.bolditalic.japanese-x0208=Noto Sans CJK JP Bold Italic
serif.bolditalic.korean=Noto Sans CJK KR Bold Italic
serif.bolditalic.chinese-big5=Noto Sans CJK TC Bold Italic
serif.bolditalic.chinese-gb18030=Noto Sans CJK SC Bold Italic

monospaced.plain.latin-1=Noto Sans Mono CJK SC Regular
monospaced.plain.japanese-x0208=Noto Sans Mono CJK JP Regular
monospaced.plain.korean=Noto Sans Mono CJK KR Regular
monospaced.plain.chinese-big5=Noto Sans Mono CJK TC Regular
monospaced.plain.chinese-gb18030=Noto Sans Mono CJK SC Regular

monospaced.bold.latin-1=Noto Sans Mono CJK SC Bold
monospaced.bold.japanese-x0208=Noto Sans Mono CJK JP Bold
monospaced.bold.korean=Noto Sans Mono CJK KR Bold
monospaced.bold.chinese-big5=Noto Sans Mono CJK TC Bold
monospaced.bold.chinese-gb18030=Noto Sans Mono CJK SC Bold

monospaced.italic.latin-1=Noto Sans Mono CJK SC Italic
monospaced.italic.japanese-x0208=Noto Sans Mono CJK JP Italic
monospaced.italic.korean=Noto Sans Mono CJK KR Italic
monospaced.italic.chinese-big5=Noto Sans Mono CJK TC Italic
monospaced.italic.chinese-gb18030=Noto Sans Mono CJK SC Italic

monospaced.bolditalic.latin-1=Noto Sans Mono CJK SC Bold Italic
monospaced.bolditalic.japanese-x0208=Noto Sans Mono CJK JP Bold Italic
monospaced.bolditalic.korean=Noto Sans Mono CJK KR Bold Italic
monospaced.bolditalic.chinese-big5=Noto Sans Mono CJK TC Bold Italic
monospaced.bolditalic.chinese-gb18030=Noto Sans Mono CJK SC Bold Italic

dialoginput.plain.latin-1=Noto Sans Mono CJK SC Regular
dialoginput.plain.japanese-x0208=Noto Sans Mono CJK JP Regular
dialoginput.plain.korean=Noto Sans Mono CJK KR Regular
dialoginput.plain.chinese-big5=Noto Sans Mono CJK TC Regular
dialoginput.plain.chinese-gb18030=Noto Sans Mono CJK SC Regular

dialoginput.bold.latin-1=Noto Sans Mono CJK SC Bold
dialoginput.bold.japanese-x0208=Noto Sans Mono CJK JP Bold
dialoginput.bold.korean=Noto Sans Mono CJK KR Bold
dialoginput.bold.chinese-big5=Noto Sans Mono CJK TC Bold
dialoginput.bold.chinese-gb18030=Noto Sans Mono CJK SC Bold

dialoginput.italic.latin-1=Noto Sans Mono CJK SC Italic
dialoginput.italic.japanese-x0208=Noto Sans Mono CJK JP Italic
dialoginput.italic.korean=Noto Sans Mono CJK KR Italic
dialoginput.italic.chinese-big5=Noto Sans Mono CJK TC Italic
dialoginput.italic.chinese-gb18030=Noto Sans Mono CJK SC Italic

dialoginput.bolditalic.latin-1=Noto Sans Mono CJK SC Bold Italic
dialoginput.bolditalic.japanese-x0208=Noto Sans Mono CJK JP Bold Italic
dialoginput.bolditalic.korean=Noto Sans Mono CJK KR Bold Italic
dialoginput.bolditalic.chinese-big5=Noto Sans Mono CJK TC Bold Italic
dialoginput.bolditalic.chinese-gb18030=Noto Sans Mono CJK SC Bold Italic

# Search Sequences

sequence.allfonts=latin-1
sequence.allfonts.Big5=chinese-big5,latin-1
sequence.allfonts.x-euc-jp-linux=japanese-x0208,latin-1
sequence.allfonts.EUC-KR=korean,latin-1
sequence.allfonts.GB18030=chinese-gb18030,latin-1
sequence.fallback=chinese-gb18030,chinese-big5,japanese-x0208,korean,bengali,gujarati,hindi,oriya,punjabi,malayalam,tamil,telugu,sinhala

# Font File Names

filename.DejaVu_Sans_Book=/usr/share/fonts/dejavu/DejaVuSans.ttf
filename.DejaVu_Sans_Bold=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf
filename.DejaVu_Sans_Oblique=/usr/share/fonts/dejavu/DejaVuSans-Oblique.ttf
filename.DejaVu_Sans_Bold_Oblique=/usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf

filename.DejaVu_Sans_Mono_Book=/usr/share/fonts/dejavu/DejaVuSansMono.ttf
filename.DejaVu_Sans_Mono_Bold=/usr/share/fonts/dejavu/DejaVuSansMono-Bold.ttf
filename.DejaVu_Sans_Mono_Oblique=/usr/share/fonts/dejavu/DejaVuSansMono-Oblique.ttf
filename.DejaVu_Sans_Mono_Bold_Oblique=/usr/share/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf

filename.DejaVu_Serif_Book=/usr/share/fonts/dejavu/DejaVuSerif.ttf
filename.DejaVu_Serif_Bold=/usr/share/fonts/dejavu/DejaVuSerif-Bold.ttf
filename.DejaVu_Serif_Oblique=/usr/share/fonts/dejavu/DejaVuSerif-Italic.ttf
filename.DejaVu_Serif_Bold_Oblique=/usr/share/fonts/dejavu/DejaVuSerif-BoldItalic.ttf

filename.Noto_Sans_CJK_JP_Regular=/usr/share/fonts/google-noto/NotoSansCJKjp-Regular.otf
filename.Noto_Sans_CJK_JP_Bold=/usr/share/fonts/google-noto/NotoSansCJKjp-Bold.otf
filename.Noto_Sans_CJK_JP_Italic=/usr/share/fonts/google-noto/NotoSansCJKjp-Regular.otf
filename.Noto_Sans_CJK_JP_Bold_Italic=/usr/share/fonts/google-noto/NotoSansCJKjp-Bold.otf
filename.Noto_Sans_CJK_KR_Regular=/usr/share/fonts/google-noto/NotoSansCJKkr-Regular.otf
filename.Noto_Sans_CJK_KR_Bold=/usr/share/fonts/google-noto/NotoSansCJKkr-Bold.otf
filename.Noto_Sans_CJK_KR_Italic=/usr/share/fonts/google-noto/NotoSansCJKkr-Regular.otf
filename.Noto_Sans_CJK_KR_Bold_Italic=/usr/share/fonts/google-noto/NotoSansCJKkr-Bold.otf
filename.Noto_Sans_CJK_TC_Regular=/usr/share/fonts/google-noto/NotoSansCJKtc-Regular.otf
filename.Noto_Sans_CJK_TC_Bold=/usr/share/fonts/google-noto/NotoSansCJKtc-Bold.otf
filename.Noto_Sans_CJK_TC_Italic=/usr/share/fonts/google-noto/NotoSansCJKtc-Regular.otf
filename.Noto_Sans_CJK_TC_Bold_Italic=/usr/share/fonts/google-noto/NotoSansCJKtc-Bold.otf
filename.Noto_Sans_CJK_SC_Regular=/usr/share/fonts/google-noto/NotoSansCJKsc-Regular.otf
filename.Noto_Sans_CJK_SC_Bold=/usr/share/fonts/google-noto/NotoSansCJKsc-Bold.otf
filename.Noto_Sans_CJK_SC_Italic=/usr/share/fonts/google-noto/NotoSansCJKsc-Regular.otf
filename.Noto_Sans_CJK_SC_Bold_Italic=/usr/share/fonts/google-noto/NotoSansCJKsc-Bold.otf

filename.Noto_Sans_Mono_CJK_JP_Regular=/usr/share/fonts/google-noto/NotoSansMonoCJKjp-Regular.otf
filename.Noto_Sans_Mono_CJK_JP_Bold=/usr/share/fonts/google-noto/NotoSansMonoCJKjp-Bold.otf
filename.Noto_Sans_Mono_CJK_JP_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKjp-Regular.otf
filename.Noto_Sans_Mono_CJK_JP_Bold_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKjp-Bold.otf
filename.Noto_Sans_Mono_CJK_KR_Regular=/usr/share/fonts/google-noto/NotoSansMonoCJKkr-Regular.otf
filename.Noto_Sans_Mono_CJK_KR_Bold=/usr/share/fonts/google-noto/NotoSansMonoCJKkr-Bold.otf
filename.Noto_Sans_Mono_CJK_KR_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKkr-Regular.otf
filename.Noto_Sans_Mono_CJK_KR_Bold_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKkr-Bold.otf
filename.Noto_Sans_Mono_CJK_TC_Regular=/usr/share/fonts/google-noto/NotoSansMonoCJKtc-Regular.otf
filename.Noto_Sans_Mono_CJK_TC_Bold=/usr/share/fonts/google-noto/NotoSansMonoCJKtc-Bold.otf
filename.Noto_Sans_Mono_CJK_TC_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKtc-Regular.otf
filename.Noto_Sans_Mono_CJK_TC_Bold_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKtc-Bold.otf
filename.Noto_Sans_Mono_CJK_SC_Regular=/usr/share/fonts/google-noto/NotoSansMonoCJKsc-Regular.otf
filename.Noto_Sans_Mono_CJK_SC_Bold=/usr/share/fonts/google-noto/NotoSansMonoCJKsc-Bold.otf
filename.Noto_Sans_Mono_CJK_SC_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKsc-Regular.otf
filename.Noto_Sans_Mono_CJK_SC_Bold_Italic=/usr/share/fonts/google-noto/NotoSansMonoCJKsc-Bold.otf

這裡要注意,Oracle 官方的 JRE 根據優先級規則,可以識別 fontconfig.properties,但 OpenJDK 不能識別,必須是以 fontconfig.OS.properties 這種文件名才行(OS 是當前系統的名字,比如 Fedora、Ubuntu 等)。

在安裝了 Infinality 優化過的 Java 後,運行 Java Swing 程序將會發現 Swing 中的字體渲染已經完全與系統原生字體渲染完全一致,且能夠跟隨系統原生字體渲染調整而變化了。google 的 Noto Sans CJK 字體(官方 hinted 過)在 Infinality 優化過的 OpenJDK 中的顯示效果非常好,字體 hint 微調指令起到了很好的作用。

更多Fedora相關信息見Fedora 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=5

Copyright © Linux教程網 All Rights Reserved