Especificación de fuente Xft en Rxvt: ¿es una fuente del lado del cliente o del lado del servidor?

Especificación de fuente Xft en Rxvt: ¿es una fuente del lado del cliente o del lado del servidor?

Tengo una caja Gentoo sin cabeza y me gustaría ejecutar la aplicación X en ella, pero reenviar la pantalla a un servidor Cygwin Xorg que se ejecuta en mi PC con Windows.

Funciona, pero no estoy seguro en este caso si especifico algunas fuentes para usar en la aplicación X, ¿qué fuente se usará realmente? ¿El que está en la caja de Gentoo (donde se ejecuta la aplicación X)? ¿O el instalado en mi Cygwin (donde se muestra la aplicación X)?

Por ejemplo, quiero usar una fuente DejaVu Sans Monoen urxvt, mi ~/.Xresourcescuadro en Gentoo se ve así:

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

En el cuadro de Gentoo tengo la fuente instalada y habilitada. El siguiente es el resultado 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 *

Luego ejecute xrdb en el cuadro Gentoo para habilitar el recurso (esto me hace creer que se usará la fuente en el cuadro Gentoo):

xrdb ~/.Xresources

Cuando inicio urxvt se queja:

urxvt: no se puede cargar el conjunto de fuentes base, especifique uno válido usando -fn, cancelando.

El resultado de ambos xdb -queryy appres URxvtes el mismo (solo las 2 líneas siguientes):

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

Creo que la fuente está instalada sin problemas, salida 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

El resultado de strace urxvtes bastante largo, la siguiente es la parte que parece tener algo que ver con la fuente especificada en ~/.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

Respuesta1

La interfaz tradicional X11 para mostrar fuentes hace que el cliente envíe un mensaje al servidor X que dice, de hecho, "mostrar esta cadena en esta fuente". Entonces la fuente vive en el servidor X. Los servidores X cargan fuentes localmente o desde unServidor de fuentes X(como xfs). Los servidores de fuentes son principalmente útiles para pantallas con poco o ningún espacio en disco; esto se ha convertido en un caso de uso especializado. Rxvt utiliza la interfaz tradicional si especifica una cadena de fuente X11 (con prefijo x:o sin prefijo).

La interfaz tradicional X11 se limita a fuentes de mapa de bits. Los sistemas modernos tienden a utilizar métodos que representan texto en el lado del cliente y envían el mapa de bits resultante al servidor. Cuando usas el prefijo xft:, URxvt usa elxftinterfaz de representación de fuentes. La renderización se realiza en el lado del cliente, a partir de fuentes cargadas en la máquina del cliente.

Ejecute xrdb -querypara comprobar qué recursos están cargados. Ejecute appres URxvty appres urxvtpara ver qué recursos se aplican (los recursos de la instancia urxvttienen prioridad sobre los recursos de la clase URxvt). Una cosa que puede explicar que su configuración de fuente no se use es si alguna otra configuración (quizás para URxvt.fonto urxvt*font) anula la suya.

Es posible que su URxvt haya sido compilado sin soporte Xft (es una opción en tiempo de compilación). Ejecute urxvt --help 2>&1 | grep buffered:para ver si el bufferedrecurso aparece en la lista; solo está presente cuando hay soporte Xft. Sin soporte Xft, urxvt interpreta el valor del fnrecurso como una cadena de fuente X, lo cual no es válido.

Respuesta2

Resolví el problema instalando el paquete xorg-xfd. Leí la respuesta publicada por Gilles y decidí enumerar mis paquetes. libxft se instaló pero no funciona cuando compilé el paquete rxvt-unicode. Entonces, enumeré las dependencias opcionales utilizadas por Xorg asignadas a Xft. El Xfd es responsable de mostrar todas las fuentes usando el protocolo central X11 O usando libxft.

información relacionada