Especificação de fonte Xft em Rxvt: é uma fonte do lado do cliente ou do lado do servidor?

Especificação de fonte Xft em Rxvt: é uma fonte do lado do cliente ou do lado do servidor?

Eu tenho uma caixa Gentoo sem cabeça e gostaria de executar o aplicativo X nela, mas encaminhar a exibição para um servidor Cygwin Xorg em execução no meu PC com Windows.

Funciona, mas não tenho certeza, neste caso, se especifico algumas fontes para usar no aplicativo X, qual fonte será realmente usada? aquele na caixa do Gentoo (onde o aplicativo X está rodando)? ou aquele instalado no meu Cygwin (onde o aplicativo X está sendo exibido)?

Por exemplo, eu quero usar fonte DejaVu Sans Monono urxvt, ~/.Xresourcesna caixa do Gentoo fica assim:

URxvt*font: xft:DejaVu Sans Mono:size=12

Na caixa do Gentoo eu tenho a fonte instalada e habilitada. A seguir está a saída deeselect 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 *

Em seguida, execute xrdb na caixa do Gentoo para habilitar o recurso (isso me faz acreditar que a fonte da caixa do Gentoo será usada):

xrdb ~/.Xresources

Quando inicio o urxvt ele reclama:

urxvt: não foi possível carregar o conjunto de fontes base, especifique um válido usando -fn, abortando.

A saída de ambos xdb -querye appres URxvté a mesma (apenas as 2 linhas abaixo):

URxvt*font:     xft:DejaVu Sans Mono:size=12
URxvt*scrollBar:        false

Acho que a fonte está instalada sem problemas, saída de 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

A saída de strace urxvté bastante longa, a seguir está a parte que parece ter algo a ver com a fonte especificada em ~/.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

Responder1

A interface tradicional do X11 para exibir fontes faz com que o cliente envie uma mensagem ao servidor X que diz, na verdade, “exiba esta string nesta fonte”. Portanto, a fonte reside no servidor X. Os servidores X carregam fontes localmente ou de umServidor de fontes X(como xfs). Os servidores de fontes são mais úteis para monitores com pouco ou nenhum espaço em disco; isso se tornou um caso de uso de nicho. Rxvt usa a interface tradicional se você especificar uma string de fonte X11 (com prefixo x:ou sem prefixo).

A interface tradicional do X11 é limitada a fontes bitmap. Os sistemas modernos tendem a usar métodos que renderizam texto no lado do cliente e enviam o bitmap resultante ao servidor. Quando você usa o prefixo xft:, o URxvt usa oxftinterface de renderização de fontes. A renderização é realizada no lado do cliente, a partir de fontes carregadas na máquina cliente.

Execute xrdb -querypara verificar quais recursos estão carregados. Execute appres URxvte appres urxvtveja quais recursos se aplicam (os recursos da instância urxvttêm precedência sobre os recursos da classe URxvt). Uma coisa que pode explicar que sua configuração de fonte não é usada é se alguma outra configuração (talvez for URxvt.fontou urxvt*font) substituir a sua.

É possível que seu URxvt tenha sido compilado sem suporte ao Xft (é uma opção em tempo de compilação). Execute urxvt --help 2>&1 | grep buffered:para ver se o bufferedrecurso está listado — ele só está presente quando o suporte Xft está presente. Sem suporte ao Xft, o urxvt interpreta o valor do fnrecurso como uma string de fonte X, o que não é válido.

Responder2

Resolvi o problema ao instalar o pacote xorg-xfd. Li a resposta postada por Gilles e resolvi listar meus pacotes. O libxft foi instalado, mas não funciona quando eu construo o pacote rxvt-unicode. Então, listei as dependências opcionais usadas pelo Xorg atribuídas ao Xft. O Xfd é responsável por exibir todas as fontes usando o protocolo principal X11 OU usando libxft.

informação relacionada