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

4

Eu tenho uma caixa do Gentoo sem cabeçalho e gostaria de rodar o X app nele, mas encaminhei a tela para um servidor Cygwin Xorg rodando no meu PC Windows.

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

Por exemplo, eu quero usar a fonte DejaVu Sans Mono no urxvt, meu ~/.Xresources na caixa do Gentoo tem esta aparência:

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

Na caixa do Gentoo, tenho a fonte instalada e ativada. A seguir, a saída de 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 *

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

xrdb ~/.Xresources

Quando eu começo o urxvt ele reclama:

urxvt: unable to load base fontset, please specify a valid one using -fn, aborting.

A saída de ambos os xdb -query e appres URxvt é a mesma (apenas as duas 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 seguinte é 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\t
URxvt*font: xft:DejaVu Sans Mono:size=12
0
  [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 *
", 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, "
xrdb ~/.Xresources
=
URxvt*font:     xft:DejaVu Sans Mono:size=12
URxvt*scrollBar:        false
/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
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"1\t%pre%0%pre%", 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, "%pre%=%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 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
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 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
    
por murphytalk 03.10.2013 / 09:13

3 respostas

1

A interface X11 tradicional para exibir fontes faz o cliente enviar uma mensagem para o servidor X que diz, com efeito, “exibir esta string nesta fonte”. Então a fonte fica no servidor X. Os servidores X carregam fontes localmente ou de um servidor de fontes X (como o xfs). Os servidores de fontes são principalmente úteis para exibições com pouco ou nenhum espaço em disco; isso se tornou um caso de uso de nicho. O Rxvt usa a interface tradicional se você especificar uma string de fonte X11 (com o prefixo x: ou sem prefixo).

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

Execute xrdb -query para verificar quais recursos são carregados. Execute appres URxvt e appres urxvt para ver quais recursos se aplicam (os recursos da instância urxvt tê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 para URxvt.font ou urxvt*font ) substitui a sua.

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

    
por 04.10.2013 / 01:58
0

Os aplicativos usam as fontes (disponíveis para) no seu servidor X, não onde elas são executadas.

    
por 03.10.2013 / 16:49
0

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

    
por 17.01.2014 / 16:09