Xft-Schriftspezifikation in Rxvt: Handelt es sich um eine clientseitige oder serverseitige Schriftart?

Xft-Schriftspezifikation in Rxvt: Handelt es sich um eine clientseitige oder serverseitige Schriftart?

Ich habe eine Headless-Gentoo-Box und möchte darauf X App ausführen, die Anzeige aber an einen Cygwin-Xorg-Server weiterleiten, der auf meinem Windows-PC läuft.

Es funktioniert, aber ich bin mir in diesem Fall nicht sicher, welche Schriftart tatsächlich verwendet wird, wenn ich einige Schriftarten zur Verwendung in der X-App angebe? Die auf der Gentoo-Box (auf der die X-App ausgeführt wird)? Oder die, die in meinem Cygwin installiert ist (auf dem die X-App angezeigt wird)?

Ich möchte beispielsweise eine Schriftart DejaVu Sans Monoin urxvt verwenden, meine ~/.Xresourcesauf der Gentoo-Box sieht so aus:

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

Auf der Gentoo-Box habe ich die Schriftart installiert und aktiviert. Das Folgende ist die Ausgabe voneselect 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 *

Führen Sie dann xrdb auf der Gentoo-Box aus, um die Ressource zu aktivieren (das lässt mich annehmen, dass die Schriftart auf der Gentoo-Box verwendet wird):

xrdb ~/.Xresources

Wenn ich urxvt starte, beschwert es sich:

urxvt: Basis-Schriftsatz konnte nicht geladen werden. Bitte geben Sie mit -fn einen gültigen an. Abbruch.

Die Ausgabe beider xdb -queryist appres URxvtgleich (nur die beiden Zeilen unten):

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

Ich denke, die Schriftart wurde ohne Probleme installiert, Ausgabe 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

Die Ausgabe von strace urxvtist ziemlich lang. Der folgende Teil scheint etwas mit der in angegebenen Schriftart zu tun zu haben ~/.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

Antwort1

Bei der traditionellen X11-Schnittstelle zum Anzeigen von Schriftarten sendet der Client eine Nachricht an den X-Server, die im Wesentlichen besagt: „Zeige diese Zeichenfolge in dieser Schriftart an.“ Die Schriftart befindet sich also auf dem X-Server. X-Server laden Schriftarten entweder lokal oder von einemX-Font-Server(wie xfs). Font-Server sind vor allem für Displays mit wenig oder keinem Festplattenspeicher nützlich; dies ist zu einem Nischenanwendungsfall geworden. Rxvt verwendet die traditionelle Schnittstelle, wenn Sie eine X11-Font-Zeichenfolge angeben (mit x:oder ohne Präfix).

Die traditionelle X11-Schnittstelle ist auf Bitmap-Schriftarten beschränkt. Moderne Systeme verwenden eher Methoden, die Text auf der Clientseite rendern und die resultierende Bitmap an den Server senden. Wenn Sie das Präfix verwenden xft:, verwendet URxvt dasxftSchnittstelle zur Schriftartenwiedergabe. Die Wiedergabe erfolgt clientseitig anhand der auf dem Client-Rechner geladenen Schriftarten.

Führen Sie aus xrdb -query, um zu prüfen, welche Ressourcen geladen sind. Führen Sie appres URxvtund aus, appres urxvtum zu sehen, welche Ressourcen gelten (Ressourcen für die Instanz urxvthaben Vorrang vor Ressourcen für die Klasse URxvt). Eine mögliche Erklärung dafür, dass Ihre Schriftarteinstellung nicht verwendet wird, ist, wenn eine andere Einstellung (beispielsweise für URxvt.fontoder urxvt*font) Ihre überschreibt.

Möglicherweise wurde Ihr URxvt ohne Xft-Unterstützung kompiliert (dies ist eine Option zur Kompilierungszeit). Führen Sie es aus, urxvt --help 2>&1 | grep buffered:um zu prüfen, ob die bufferedRessource aufgelistet ist – sie ist nur vorhanden, wenn Xft-Unterstützung vorhanden ist. Ohne Xft-Unterstützung interpretiert urxvt den Wert der fnRessource als X-Font-Zeichenfolge, was ungültig ist.

Antwort2

Ich habe das Problem durch die Installation des xorg-xfd-Pakets gelöst. Ich habe die Antwort von Gilles gelesen und beschlossen, meine Pakete aufzulisten. Die libxft wurde installiert, funktioniert aber nicht, wenn ich das rxvt-unicode-Paket erstelle. Daher habe ich die optionalen Abhängigkeiten aufgelistet, die von Xorg verwendet und Xft zugewiesen wurden. Die Xfd ist dafür verantwortlich, alle Schriftarten mit dem X11-Kernprotokoll ODER mit libxft anzuzeigen.

verwandte Informationen