Спецификация шрифта Xft в Rxvt: это клиентский или серверный шрифт?

Спецификация шрифта Xft в Rxvt: это клиентский или серверный шрифт?

У меня есть безэкранный Gentoo-компьютер, и я хотел бы запустить на нем приложение X, но перенаправить дисплей на сервер Cygwin Xorg, работающий на моем ПК с Windows.

Это работает, но я не уверен, какой шрифт будет использоваться в этом случае, если я укажу некоторые шрифты для использования в приложении X? Тот, что на коробке Gentoo (где запущено приложение X)? Или тот, что установлен в моем Cygwin (где отображается приложение X)?

Например, я хочу использовать шрифт DejaVu Sans Monoв urxvt, который ~/.Xresourcesна Gentoo выглядит так:

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

На Gentoo box у меня установлен и включен шрифт. Ниже приведен вывод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 *

Затем запустите xrdb на компьютере Gentoo, чтобы включить ресурс (это позволяет мне предположить, что шрифт на компьютере 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). Серверы шрифтов в основном полезны для дисплеев с небольшим или отсутствующим дисковым пространством; это стало нишевым вариантом использования. Rxvt использует традиционный интерфейс, если вы указываете строку шрифта X11 (с префиксом x:или без префикса).

Традиционный интерфейс X11 ограничен растровыми шрифтами. Современные системы, как правило, используют методы, которые визуализируют текст на клиентских сторонах и отправляют полученное растровое изображение на сервер. Когда вы используете префикс xft:, URxvt используетxftИнтерфейс рендеринга шрифтов. Рендеринг выполняется на стороне клиента из шрифтов, загруженных на клиентскую машину.

Запустите xrdb -query, чтобы проверить, какие ресурсы загружены. Запустите appres URxvtи , appres urxvtчтобы увидеть, какие ресурсы применяются (ресурсы для экземпляра urxvtимеют приоритет над ресурсами для класса URxvt). Одной из причин, по которой ваши настройки шрифта не используются, может быть то, что какие-то другие настройки (возможно, для URxvt.fontили urxvt*font) переопределяют ваши.

Возможно, ваш URxvt был скомпилирован без поддержки Xft (это опция времени компиляции). Запустите, urxvt --help 2>&1 | grep buffered:чтобы проверить, bufferedуказан ли ресурс — он присутствует только при наличии поддержки Xft. Без поддержки Xft urxvt интерпретирует значение ресурса fnкак строку шрифта X, что недопустимо.

решение2

Я решил проблему, установив пакет xorg-xfd. Я прочитал ответ, опубликованный Жилем, и решил составить список своих пакетов. Libxft был установлен, но не работает, когда я собираю пакет rxvt-unicode. Поэтому я составил список необязательных зависимостей, используемых Xorg, назначенных Xft. Xfd отвечает за отображение всех шрифтов с использованием основного протокола X11 ИЛИ с использованием libxft.

Связанный контент