Wie kann ich das TTF-Rendering in xterm optimieren?

3475
koniiiik

Ich habe in den letzten paar Tagen versucht, Xterm dazu zu bringen, dieselbe Schriftart anzuzeigen, die ich in den letzten Jahren in konsole gewöhnt bin - es funktioniert für mich selbst mit relativ kleiner Gesichtsgröße. xterm scheint die Schrift so wiederzugeben, dass ich sie viel schwieriger lesen kann.

Hier sind ein paar Screenshots zum Vergleich.

xterm:
Xterm-Rendering

konsole:
konsole rendern

Die betreffende Schriftart ist DejaVu Sans Mono 8. Beide sind offensichtlich antialiasiert. Ich habe sogar das Farbschema von konsole auf xterm angewendet, weil ich dachte, dies könnte der Grund für den Unterschied sein, war es aber nicht. In der Konsole habe ich auch das Kontrollkästchen "Intensive Farben in Fettschrift zeichnen" aktiviert, aber der Unterschied ist sowohl in der Fett- als auch in der Normalschriftart deutlich.

Der Unterschied scheint darin zu liegen, wie aggressiv jede Anwendung die Schriftart antialiasiert. In xterm ist der Text viel verschwommener und zumindest für mich erheblich schwieriger zu lesen. Am offensichtlichsten ist es wahrscheinlich mit dem Zeichen m, das in der nicht-fetten Version das erste "Bein" in xterm über zwei Pixel verteilt hat, während es in konsole schön und scharf ist.

Ich bekomme die gleichen Ergebnisse sowohl mit Gentoo als auch mit Ubuntu und sowohl mit dem konservativen Setup /etc/fonts/conf.dauf meinem Gentoo-Laptop als auch mit dem All-In-Setup von Ubuntu.

Bonuspunkte, wenn Sie herausfinden können, warum die Hölle xterm ist, einige der nicht-lateinischen Zeichen nicht anzuzeigen, obwohl mir das nicht so viel ausmacht. Es macht einfach keinen Sinn für mich. Es könnte jedoch ein Hinweis sein ...

Hier ist der relevante Teil von mir .Xresources:

XTerm*faceName: DejaVu Sans Mono XTerm*faceSize: 8 XTerm*background: #000000 XTerm*foreground: #B2B2B2 XTerm*color0: #000000 XTerm*color1: #B21818 XTerm*color2: #18B218 XTerm*color3: #B26818 XTerm*color4: #1818B2 XTerm*color5: #B218B2 XTerm*color6: #18B2B2 XTerm*color7: #B2B2B2 XTerm*color8: #686868 XTerm*color9: #FF5454 XTerm*color10: #54FF54 XTerm*color11: #FFFF54 XTerm*color12: #5454FF XTerm*color13: #FF54FF XTerm*color14: #54FFFF XTerm*color15: #FFFFFF XTerm*boldColors: true 

Update: Um zu klären, ist es trivial, xterm TTF zu verwenden; Was ich suche, ist eine Möglichkeit, die Art und Weise, wie TTF in xterm gerendert wird, an die Einstellungen anzupassen, die von konsole verwendet werden (und so ziemlich jede andere X11-App). Aus irgendeinem Grund scheint xterm alles außer dem Gesichtsnamen und der Gesichtsgröße der TTF-Schriftart zu ignorieren, die ich versuche, entweder in Xresources oder in meinen fontconfig-Einstellungen (die vom Rest des Systems korrekt erfasst werden).

3

3 Antworten auf die Frage

1
Chris Lawrence

In xterm (1) können Sie die Schriftart ändern, indem Sie die STRG-Taste gedrückt halten und mit der rechten Maustaste in das Fenster klicken. Ich sage so, weil man nicht viele Entscheidungen hat. Wenn Sie auf die Option "TrueType" klicken, werden die Ergebnisse den gewünschten Ergebnissen näher gebracht. Sie erhalten mehr Kontrolle, wenn Sie die Xresources-Datei bearbeiten, wie Sie sicher wissen. Weitere Informationen dazu, wie Sie diese an Ihre Anforderungen anpassen können, finden Sie unter https://wiki.archlinux.org/index.php/Xterm .

xterm (1) zeigt standardmäßig die meisten nicht lateinischen Zeichen nicht an. Sie können die Option -u8 oder den Wrapper uxterm (1) verwenden

Probieren Sie diesen Befehl aus. Sie können die Größe an Ihre Bedürfnisse anpassen oder weglassen und STRG-Rechtsklick verwenden, um die Schriftgröße zu ändern

xterm -u8 -fn 7x13 -fa "DejaVu ohne Mono: size = 8: antialias = true"

Wie Sie im Screenshot sehen können, verwendet xterm bereits TTF und Unicode ist ebenfalls aktiviert. Der Screenshot zeigt eine Reihe von Unicode-Zeichen, die meines Wissens nicht in eine einzige 8-Bit-Kodierung passen (kyrillisch) , Griechische, mitteleuropäische Akzente und ein paar Skripte (ich habe keine Ahnung, was sie sind). Es werden nur einige bestimmte Skripts angezeigt. Das Strg + RMB-Menü stellt nur einige zusätzliche Schriftartkonfigurationen zur Verfügung, die von den Ressourcen "font1" bis "font6" festgelegt werden können. koniiiik vor 9 Jahren 0
0
Jens

Dies liegt daran, dass GTK-Apps und Xterm sehr unterschiedliche Möglichkeiten zum Konfigurieren von Schriftarten verwenden. GTK verwendet font-config, während xterm / Xft X-Ressourcen verwendet.

Um Xft-Schriftarten mit X-Ressourcen zu konfigurieren, fügen Sie dies zu Ihrem hinzu ~/.Xresources:

 Xft.rgba: rgb 

Diese Einstellung ändert die Art des Antialiasing. Hier sind einige Beispiele xterm Screenshots genommen mit xmag, ohne rgba Einstellung, und rgb, grb, vrgb. Sie alle haben unterschiedliche Schärfe, Farbtreue und scheinbare Helligkeit.

enter image description here enter image description here enter image description here enter image description here

Es gibt Knöpfe auch für Xft.antialias, Xft.hinting, Xft.hintstyle, Xft.lcdfilterund andere. Einzelheiten finden Sie in der Dokumentation zu fontconfig .

Danke, aber ... Zum einen glaube ich, dass xterm tatsächlich fontconfig verwendet, weil ich beim Starten von xterm einige Meldungen von fontconfig auf stderr bekomme. Bei der Verwendung von Xft-Ressourcen ignoriert xterm hartnäckig alle Xft-Ressourcen sowie alle zusätzlichen Optionen, die in der Ressource `faceName` übergeben werden. (In `faceName` erkennt es nur` size`.) koniiiik vor 9 Jahren 0
@koniiiik Dies könnte auf unterschiedliche `. / configure`-Optionen zurückzuführen sein. Ich kompiliere xterm immer aus dem Quellcode (meine Screenshots stammen aus xterm-314). Es gibt einige Konfigurationsoptionen für Freetype, mit denen Sie herumspielen können. Ich habe die Standardeinstellungen für diese verwendet (dh "--disable-freetype") nicht verwendet. Ich bin bei FreeBSD 10 und 11. Jens vor 9 Jahren 0
0
Cliff L. Biffle

Der Unterschied beim Rendern zwischen Konsole und xterm ist auf die Einstellungen für fontconfig-Hinweise zurückzuführen. Sie können erkennen, dass es sich um Hinweisen handelt, wenn Sie die Formen der Glyphen zwischen den beiden Screenshots vergleichen. Die Null ist in Konsole etwas anders geformt, weil sie an das Pixelraster gefixt wurde (was unter anderem das Zeichnen von Hinweisen ist).

Konsole übernimmt wahrscheinlich Einstellungen von einigen zusätzlichen Ebenen der KDE-Konfiguration, während xterm nur die einfachen fontconfig-Einstellungen berücksichtigt.

Ich habe in letzter Zeit daran mit meinem Arch-System gearbeitet, und die Kombination von Einstellungen, die das, was Sie in Konsole sehen, am ehesten reproduziert, ist (fügen Sie dies in Ihre .Xresources) ein:

Xft.antialias: 1 Xft.autohint: 1 Xft.hintstyle: hintslight 

Einige Schriftarten enthalten Hinweisinformationen von den Designern der Schrift. Manche tun es nicht. Der Freetype-Autohinter ( Xft.autohint: 1) generiert Hinweise für die Schriftart und die Hinweisebene hintslightwird auf die enthaltenen Hinweise zurückgesetzt, sofern vorhanden. Es ist wahrscheinlich auch einen Versuch wert hintfull; Es hängt von Ihrer Präferenz ab, sowie von der Qualität der Hinweise in der verwendeten Schriftart.

(Sie verwenden kein Subpixel-Antialiasing in diesen Screenshots, und ein anderer Kommentator hat bereits erklärt, wie Sie es verwenden können, wenn Sie möchten.)

Hier sind meine Vorher- und Nachher-Screenshots auf jeder Hinweisebene. (7pt Anonymous Pro auf einer 192-dpi-Anzeige.)

Voreinstellungen:

ASCII-Zeichensatz mit Standardhinweisen

Config oben:

ASCII-Zeichensatz mit leichten Andeutungen