Rxvt 中的 Xft 字體規格:它是客戶端字體還是伺服器端字體?

Rxvt 中的 Xft 字體規格:它是客戶端字體還是伺服器端字體?

我有一個無頭 Gentoo 盒子,想在上面運行 X 應用程序,但將顯示轉發到在我的 Windows PC 上運行的 Cygwin Xorg 伺服器。

它可以工作,但我不確定在這種情況下,如果我指定了一些要在 X 應用程式中使用的字體,實際上會使用哪種字體? Gentoo 盒子(運行 X 應用程式的地方)上的那個?或是我的 Cygwin 中安裝的那個(顯示 X 應用程式的地方)?

例如我想DejaVu Sans Mono在 urxvt 中使用字體,我的~/.XresourcesGentoo 盒子看起來像這樣:

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相同(僅下面兩行):

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

答案1

顯示字體的傳統 X11 介面讓客戶端向 X 伺服器發送一條訊息,實際上是「以這種字體顯示此字串」。所以字體位於 X 伺服器上。 X 伺服器在本機或從外部載入字體X字體伺服器(例如 xfs)。字體伺服器主要適用於沒有磁碟空間或磁碟空間很小的顯示器;這已經成為一個利基用例。如果您指定 X11 字體字串(帶前綴x:或不帶前綴),Rxvt 將使用傳統介面。

傳統的 X11 介面僅限於點陣字體。現代系統傾向於使用在客戶端渲染文字並將生成的點陣圖發送到伺服器的方法。當您使用前綴 時xft:,URxvt 使用xft字體渲染介面。渲染是在客戶端根據客戶端電腦上載入的字體執行的。

運行xrdb -query以檢查載入了哪些資源。運行appres URxvtappres urxvt查看應用了哪些資源(實例的資源urxvt優先於類別的資源URxvt)。可能解釋您的字體設定未被使用的一件事是,如果某些其他設定(可能是URxvt.fonturxvt*font)覆蓋了您的字體設定。

您的 URxvt 可能是在沒有 Xft 支援的情況下編譯的(這是一個編譯時選項)。運行urxvt --help 2>&1 | grep buffered:以查看buffered資源是否已列出 - 僅當存在 Xft 支援時才會出現。如果沒有 Xft 支持,urxvt 會將資源的值解釋fn為 X 字體字串,這是無效的。

答案2

我解決了安裝 xorg-xfd 套件的問題。我閱讀了吉爾斯發布的答案,並決定列出我的包裹。當我建立 rxvt-unicode 包時,libxft 已安裝但不起作用。因此,我列出了 Xorg 使用的分配給 Xft 的可選依賴項。 Xfd 負責使用 X11 核心協定或使用 libxft 顯示所有字體。

相關內容