歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 試析FreeBSD桌面系統中利用Fontconfig進行字體配置的運作原理

試析FreeBSD桌面系統中利用Fontconfig進行字體配置的運作原理

日期:2017/2/28 11:18:16   编辑:關於Unix


概要:本文以KDE桌面環境為例,試析Fontconfig的運作機制
一、Fontconfig在桌面系統中的作用
KDE是類Unix系統中建立在X基礎上的一個主流桌面環境,對用戶來說,它提供了良好的圖形界面和語言切換機制,用以滿足來自不同國家、使用不同語言的用戶的使用需求,這種機制簡稱“國際化”。主要包括界面文字的翻譯,多種語言字體的管理、顯示的支持以及輸入法等等。這其中系統層面字體的管理和顯示的支持直接關系到文字的顯示效果,因此顯得尤為重要。在KDE系統中,字體管理、顯示的支持采用的是如下框架。
Fontconfig(字體配置)-------->Freetype(字庫操作)-------------->xft(字體渲染)
Fontconfig : 管理系統安裝的字體,根據應用程序的字體配置,match(匹配)一種字體,填充match字體的各種屬性。
Freetype : 以Fontconfig匹配到的字體為參數,根據應用程序需要讀取相應的字庫。
xft: 對需要顯示的語言文字進行渲染
二、X系統中字體的管理
作為KDE底層支持的X,它使用字體服務器(xfs)對安裝的字體進行管理,也稱之為“核心字庫管理系統”,基本配置原理是xfs使用可維護的字體安裝目錄和fonts.dir文件對字體進行操作。
X為之提供了一些工具來完成管理操作。諸如 :
mkfontdir,mkfontscale 用來生成安裝字體的 fonts.dir和fonts.scale。
xlsfonts 用來顯示安裝的字體。
xfd 用來顯示指定字庫的信息。
xset 用來管理字體服務器。
對於FreeBSD,在安裝了xorg 7.2並且X server運行的情況下,字體安裝目錄可用 xset q來查詢
shell>xset q
Font Path:
/usr/local/lib/X11/fonts/misc/,/usr/local/lib/X11/fonts/TTF/,
/usr/local/lib/X11/fonts/OTF,/usr/local/lib/X11/fonts/Type1/,
/usr/local/lib/X11/fonts/100dpi/,/usr/local/lib/X11/fonts/75dpi/,
/home/dbhrscom/.fonts
上面顯示的是X系統安裝時定義的字體目錄。在這些目錄中,都有利用mkfontdir生成的fonts.dir(對於true type 字體需要使用mkfontscale 生成 fonts.scale,然後拷貝到fonts.dir中)。fonts.dir是個文本文件,裡面保存的是所在目錄的字體信息。關於這些信息的具體含義,可以參見X的man手冊,這裡不再贅述。
如果准備把一個字體安裝到X系統中,並且使用Xfs進行管理,大致需要以下過程:
1、建立一個目錄,並且把字庫文件拷貝到這個目錄下
2、運行mkfontdir或者mkfontscale,生成安裝字庫的fonts.dir文件。
3、運行“mkfontdir -e 系統編碼目錄” 生成encodings.dir 文件(可選)
4、運行 “xset +fp 字體目錄” 或者 “xset fp+ 字體目錄”,把字體目錄添加到xfs的字體目錄列表中。需要注意的是當字體目錄沒有fonts.dir這個文件時,這種添加字體目錄操作會失敗。
5、運行“xset rehash”進行更新,確保新添加的字體可用。
注意:作為一種X系統的約定,安裝字體最方便的做法是把字體文件拷貝到“$HOME/.fonts/“目錄下,這樣省去了添加字體目錄的操作,而且xset +fp 是針對當前會話有效,如果准備系統啟動時有效,還要修改相關的配置文件。
三、Fontconfig的字體管理
簡單的說Fontconfig是使用字體緩存的機制來進行字體管理的。這個Xfs有所不同。fontconfig提供fc-cache來建立這個緩存。
shell >fc-cache -v
/usr/local/lib/X11/fonts: skipping, 0 fonts, 12 dirs
/usr/local/lib/X11/fonts/100dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/75dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/Fonts: skipping, 4 fonts, 0 dirs
/usr/local/lib/X11/fonts/OTF: skipping, 23 fonts, 0 dirs
/usr/local/lib/X11/fonts/TTF: skipping, 13 fonts, 0 dirs
/usr/local/lib/X11/fonts/Type1: skipping, 29 fonts, 0 dirs
/usr/local/lib/X11/fonts/bitstream-vera: skipping, 10 fonts, 0 dirs
/usr/local/lib/X11/fonts/cyrillic: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/encodings: skipping, 0 fonts, 1 dirs
/usr/local/lib/X11/fonts/encodings/large: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/local: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/misc: skipping, 55 fonts, 0 dirs
/usr/local/lib/X11/fonts/util: skipping, 0 fonts, 0 dirs
/home/dbhrscom/.fonts: skipping, 0 fonts, 0 dirs
/var/db/fontconfig: not cleaning unwritable cache directory
/home/dbhrscom/.fontconfig: cleaning cache directory
fc-cache: succeeded

/usr/local/lib/X11/fonts
~/.fonts

/var/db/fontconfig
~/.fontconfig
fc-cache所作的掃描都是基於以上的定義。
這個配置文件在fontconfig最新版本中,默認放在下面的目錄中
/usr/local/etc/fonts/
而生成的字體緩存按照系統和當前用戶,分別存放到
/var/db/fontconfig
~/.fontconfig
這兩個目錄中,諸如下面所看到的
0c3f6abf7a2705d2e8570f7f70e9302d-x86.cache-2
1e99991e6eeb0b3e05d4185c886f4b19-x86.cache-2
2550ddc31d0b62d94bc27b0fea358aba-x86.cache-2
55cbb48b13195d29d336fd465f155e7b-x86.cache-2
75ff5e8ddb5aa19e5f229f72d89c73db-x86.cache-2


30

由此看出,fontconfig和xfs相比,fontconfig提供了更加靈活的字體管理機制,目前系統中保持xfs和fontconfig 並行工作的理由,只能是為必須使用xfs機制的程序提供一種支援。而作為KDE,它使用的就是fontconfig進行字體管理。舉例來說,KDE的控制中心有個“字體安裝”模塊,通過分析可知它進行字體安裝的原理就是自定義一個安裝路徑,放到fontconfig的配置文件中,然後把字體拷貝到自定義的目錄。
四、Fontconfig配置文件的結構
在2.4.2以後的版本中,Fonfconfig的配置文件采用了模塊化的結構。配置文件由以下文件組成
/usr/local/etc/fonts/conf.d/ 目錄下的文件大多數是 conf.avail/ 目錄下的連接,大致是如下這些:

conf.d
分析/usr/local/etc/fonts/conf.d 目錄下的文件,並通過打開Fontconfig的調試功能,可知這些配置文件的執行順序:
Scanning config dir /usr/local/etc/fonts/conf.d
五、Fontconfig所提供的調試功能
Fontconfig提供了調制功能,用來診斷字體配置運行時的信息,使用調制功能非常簡單,在KDE環境下用模擬終端定義 FC_DEBUG 這個環境變量的值即可:
例如:csh環境下
setenv FC_DEBUG 1
在模擬終端中啟動相應的程序,就可以查看設定的調試信息。可以按照下面Fontconfig用戶手冊介紹的說明設定具體顯示的調試信息。
MATCH 1 Brief information about font matching 字體匹配信息
MATCHV 2 Extensive font matching information
EDIT 4 Monitor match/test/edit execution 顯示match/test/edit信息
FONTSET 8 Track loading of font information at startup
CACHE 16 Watch cache files being written
CACHEV 32 Extensive cache file writing information
PARSE 64 (no longer in use)
SCAN 128 Watch font files being scanned to build caches
SCANV 256 Verbose font file scanning information
MEMORY 512 Monitor fontconfig memory usage
CONFIG 1024 Monitor which config files are loaded 顯示配置文件裝載信息
LANGSET 2048 Dump char sets used to construct lang values
OBJTYPES 4096 Display message when value typechecks fail
待續。。。。。。
Copyright © Linux教程網 All Rights Reserved