Rxvt 中的 Xft 字型規範:它是客戶端字型還是伺服器端字型?
我有一個無頭 Gentoo 盒子,想在上面執行 X 應用程序,但將顯示轉發到在我的 Windows PC 上執行的 Cygwin Xorg 伺服器。
它可以工作,但我不確定在這種情況下,如果我在 X 應用程序中指定要使用的一些字型,實際會使用哪種字型?Gentoo 盒子上的那個(執行 X 應用程序的地方)?還是安裝在我的 Cygwin 中的那個(顯示 X 應用程序的地方)?
例如我想
DejaVu Sans Mono
在 urxvt 中使用字型,我~/.Xresources
在 Gentoo 盒子上的樣子是這樣的:URxvt*font: xft:DejaVu Sans Mono:size=12
在 Gentoo 框中,我安裝並啟用了字型。以下是輸出
eselect fontconfig list
[1] 10-autohint.conf [2] 10-no-sub-pixel.conf [3] 10-scale-bitmap-fonts.conf * [4] 10-sub-pixel-bgr.conf [5] 10-sub-pixel-rgb.conf [6] 10-sub-pixel-vbgr.conf [7] 10-sub-pixel-vrgb.conf [8] 10-unhinted.conf [9] 11-lcdfilter-default.conf [10] 11-lcdfilter-legacy.conf [11] 11-lcdfilter-light.conf [12] 20-unhint-small-dejavu-sans.conf [13] 20-unhint-small-dejavu-sans-mono.conf [14] 20-unhint-small-dejavu-serif.conf [15] 20-unhint-small-vera.conf * [16] 25-unhint-nonlatin.conf [17] 30-metric-aliases.conf * [18] 30-urw-aliases.conf * [19] 40-nonlatin.conf * [20] 45-latin.conf * [21] 49-sansserif.conf * [22] 50-user.conf * [23] 51-local.conf * [24] 57-dejavu-sans.conf [25] 57-dejavu-sans-mono.conf *
然後在 Gentoo 盒子上執行 xrdb 以啟用資源(這讓我相信將使用 Gentoo 盒子上的字型):
xrdb ~/.Xresources
當我開始 urxvt 它抱怨:
urxvt: 無法載入基本字型集,請使用 -fn 指定一個有效的字型集,正在中止。
兩者的輸出
xdb -query
是appres URxvt
相同的(只有下面的 2 行):URxvt*font: xft:DejaVu Sans Mono:size=12 URxvt*scrollBar: false
我認為字型安裝沒有問題,輸出
fc-list|grep "DejaVu Sans Mono"
:/usr/share/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf: DejaVu Sans Mono:style=Bold Oblique /usr/share/fonts/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book /usr/share/fonts/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:style=Bold /usr/share/fonts/dejavu/DejaVuSansMono-Oblique.ttf: DejaVu Sans Mono:style=Oblique
的輸出
strace urxvt
很長,以下是似乎與中指定的字型有關的部分~/.Xresources
:poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}]) writev(6, [{"1\1\t\0\240\17\34\0", 8}, {"xft:DejaVu Sans Mono:size=12", 28}, {"", 0}], 3) = 36 poll([{fd=6, events=POLLIN}], 1, -1) = 1 ([{fd=6, revents=POLLIN}]) recv(6, "\1\0=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096, 0) = 32 recv(6, 0x817b310, 4096, 0) = -1 EAGAIN (Resource temporarily unavailable) recv(6, 0x817b310, 4096, 0) = -1 EAGAIN (Resource temporarily unavailable) write(1, "urxvt: ", 7urxvt: ) = 7 write(1, "unable to load base fontset, ple"..., 77unable to load base fontset, please specify a valid one using -fn, aborting. ) = 77
顯示字型的傳統 X11 界面讓客戶端向 X 伺服器發送一條消息,實際上是“以這種字型顯示這個字元串”。所以字型存在於 X 伺服器上。X 伺服器在本地或從X 字型伺服器(例如 xfs)載入字型。字型伺服器主要用於沒有或很少磁碟空間的顯示器;這已成為一個利基案例。如果您指定 X11 字型字元串(帶前綴
x:
或不帶前綴),則 Rxvt 使用傳統界面。傳統的 X11 界面僅限於點陣圖字型。現代系統傾向於使用在客戶端呈現文本並將生成的點陣圖發送到伺服器的方法。使用 prefix
xft:
時,URxvt 使用xft字型渲染界面。渲染是在客戶端執行的,從客戶端機器上傳入的字型。執行
xrdb -query
以檢查載入了哪些資源。執行appres URxvt
並appres urxvt
查看應用了哪些資源(實例urxvt
的資源優先於類的資源URxvt
)。可以解釋未使用您的字型設置的一件事是,如果某些其他設置(可能 forURxvt.font
或urxvt*font
)覆蓋了您的設置。您的 URxvt 可能是在沒有 Xft 支持的情況下編譯的(這是一個編譯時選項)。執行
urxvt --help 2>&1 | grep buffered:
以查看是否buffered
列出了資源——它僅在存在 Xft 支持時出現。如果沒有 Xft 支持,urxvt 會將fn
資源的值解釋為無效的 X 字型字元串。