[OpenBSD]

Kantengeglättete und TrueType-Schriftarten unter OpenBSD

Inhaltsverzeichnis


Screenshot von xterm

xterm(1) mit kantigen und kantengeglätteten Schriftarten nebeneinander:
[standardmäßiger und kantengeglätteter xterm]

Screenshot vom Konqueror

Noch nicht überzeugt? Dann werfe mal einen Blick hierauf.

Der Konqueror-Webbrowser mit kantigen und kantengeglätteten Schriftarten nebeneinander:

[Standard- und kantengeglätteter Konqueror]

Wie funktioniert das?

Die kantenglättenden Berechnungen werden von FreeType durchgeführt, einer freien Font-Engine, die Teil von X.org ist. X.org beinhaltet zusätzlich eine Erweiterung, die Xft(3) genannt wird, die X-FreeType-Erweiterung, die mit FreeType zusammenarbeitet, um das Rendering von Schriftarten durchzuführen. Xft arbeitet ebenfalls mit einer Erweiterung namens Xrender zusammen, der X-Render-Erweiterung, die die Berechnung in digitale Bilder umwandelt.

Was muss dafür getan werden?

OpenBSD wird mit X.org ausgeliefert, das die X-Render-Erweiterung bereits aktiviert hat. Um in der Lage zu sein, diese zu benutzen, muss dein X-Server (Grafikkartentreiber) diese unterstützen. Einige Treiber wurden bisher noch nicht konvertiert, damit sie den ,fb'-Code benutzen, um auf die Render-Erweiterungen zugreifen zu können, was jedoch notwendig ist.

Du kannst deine Karte mit folgendem Aufruf überprüfen:

$ /usr/X11R6/bin/xdpyinfo | grep RENDER
RENDER
Wenn dieser nicht ,RENDER' in seiner Erweiterungsliste aufführt, musst du warten, bis jemand die Erweiterung für diese Karte implementiert.

Der nächste Schritt besteht darin, einige TrueType-Schriftarten zu beziehen und zu installieren. Eine Sammlung beliebter Schriftarten wurde kompiliert, die über den OpenBSD-Ports-Tree verfügbar ist, und zwar unter /usr/ports/x11/msttcorefonts. Sie kann installiert werden, indem Folgendes ausgeführt wird:

# cd /usr/ports/x11/msttcorefonts
# make
# make install
An diesem Punkt angekommen, kannst du die Anweisungen, wie man neue Schriftarten unter X registiert, in einer anderen Sektion finden.

Welche Applikationen können das nutzen?

Jede Applikation, die auf der Xft-Bibliothek aufbaut, kann kantengeglättete Schriftarten anzeigen. Dazu gehören auch QT-3.x- (KDE 3.x) und GTK+2- (Gnome 2.x) -Applikationen. Standardmäßig mitgelieferte X-Programme, die diese Schnittstelle nutzen können, sind xterm(1), xditview(1), xfd(1) und ein paar andere.

xterm

xterm kann mit Argumenten aufgerufen werden, die das Xft-Rendering der Schriftarten aktivieren:
$ xterm -fa 'Andale Mono' -fs 14
Diese Optionen sind:
Option   Ressource        Bedeutung
----------------------------------------------
 -fa     XTerm*faceName   Name vom Schriftsatz
 -fs     XTerm*faceSize   Größe der Schriftart
Daneben könnten auch X-Ressourcen genutzt werden. Standardmäßig werden sie unter $HOME/.Xdefaults abgespeichert und mit dem Programm xrdb(1) verwaltet.

Einige TrueType-Schriftarten (wie zum Beispiel Arial, Georgia und Verdana) funktionieren nicht sonderlich gut mit xterm. Das liegt daran, dass xterm die maximale Breite der Zeichen im angegebenen Schriftart für die Darstellung nutzt. Bei Monospace-Schriftarten ist die Breite aller Zeichen gleich und somit funktioniert auch alles. Mit einem proportionalem Font, wie mit beispielsweise dem zuvor genannten, legt xterm jedes einzelne Zeichen in eine Zelle, die die maximal mögliche Breite hat, was unleserlich große Lücken zwischen den Zeichen erstellt.

QT-3.x-/KDE-3.x-Applikationen

Applikationen, die QT 3.x verwenden, wie beispielsweise jede KDE-3.x-Applikation, einschließlich Konqueror, können das Xft-Rendering benutzen, nachdem der folgende Wert in $HOME/.qt/qtrc unter der Sektion [General] eingetragen wurde.
useXft=true
Das GUI-Qt-Konfigurationsprogram qtconfig (oder qtconfig-mt, falls die ,multi-threaded' Variante von QT installiert wurde) kann diesen Wert über die Enable Anti-aliased Font Support-Auswahlbox unter dem Fonts-Karteireiter setzen.

GTK+2-Applikationen

GTK+2-Applikationen setzen voraus, dass die Umgebungsvariable GDK_USE_XFT gesetzt ist. GDK ist das ,backend', das GTK nutzt, um die Details der Zeichenoperationen zu isolieren, was wiederum bedeutet, dass das Schriftart-Rendering über Xft gemacht wird, wenn die Umgebungsvariable gesetzt ist.

Das Folgende wird das auf GTK+2 basierende ,instant messenging'-Programm Gaim starten, das unter dem Verzeichnis /usr/ports/net/gaim verfügbar ist:

$ env GDK_USE_XFT=1 gaim

Wie kann ich Schriftarten manuell hinzufügen?

Eine TrueType-Schriftart ,zu X' hinzuzufügen, setzt das Registrieren der Schriftart mit sowohl dem X-Server als auch fontconfig(3) voraus, da beide die Schriftarten separat verwalten. Es ist tatsächlich so, dass einige Schriftarten nur vom regulären X-Server erkannt werden, andere hingegen nur mit fontconfig. TrueType-Schriftarten sind die einzigen Schriftarten, die von beiden erkannt werden.

Der X-Server

Die Pfade für die Schriftarten (z.B. die Verzeichnisse, in denen die Schriftarten liegen) werden entweder direkt über X mit der Datei /etc/X11/xorg.conf oder mit einem separaten Programm wie zum Beispiel xfs(1) verwaltet. Um eine Schriftart hinzuzufügen, füge das Verzeichnis in /etc/X11/xorg.conf ein, in dem sich diese Schriftart befindet:
Section "Files"
	FontPath	"/usr/X11R6/lib/X11/fonts/TTF/"
	FontPath	"/usr/local/lib/X11/fonts/myfonts/"
	...
EndSection
Oder, falls du xfs verwendest, füge das Verzeichnis in /etc/X11/fs/config ein:
catalogue = /usr/X11R6/lib/X11/fonts/TTF/,
	    /usr/local/lib/X11/fonts/myfonts/
Als nächstes müssen die Schriftarten dem X-Server bekanntgegeben werden, z.B. über die Datei fonts.dir. Bisher war es so, dass alle verfügbaren Größen der Schriftarten im Font-Index aufgelistet wurden, der über das Kommando mkfontdir(1) erstellt wurde. Aber da TrueType-Schriftarten auf jede beliebige Größe skaliert werden können, ist das Auflisten jeder möglichen Größe nicht mehr erforderlich. Stattdessen werden die skalierbaren Schriftarten in der Datei fonts.scale aufgelistet, die von mkfontdir berücksichtigt wird, wenn die fonts.dir-Indexe erstellt werden.

Um eine fonts.scale-Datei zu erstellen, kann das Programm mkfontscale(1) genutzt werden:

# cd /usr/local/lib/X11/fonts/myfonts
# /usr/X11R6/bin/mkfontscale
# /usr/X11R6/bin/mkfontdir
Zum Schluss, damit die Änderungen der aktuellen X-Sitzung bekanntgegeben werden, muss man nicht X neustarten, sondern kann folgendes Kommando verwenden, damit die aktuell registierten Schriftartpfade auf Änderungen hin untersucht werden:
$ xset fp rehash
Oder aber, falls ein neuer Schriftartpfad hinzugefügt wurde:
$ xset +fp /usr/local/lib/X11/fonts/myfonts
Wenn xfs genutzt wird, sollte stattdessen Folgendes genutzt werden:
# pkill -HUP xfs

fontconfig

Eine andere Komponente von X, der die Existenz einer neuen Schriftart mitgeteilt werden muss, ist fontconfig, die Xft nutzt, um Schriftarten zu finden. fontconfig verwendet die Datei /etc/fonts/fonts.conf für die hauptsächliche systemweite Konfiguration, aber da diese Datei bei X-Upgrades ersetzt wird, sollte /etc/fonts/local.conf verwendet werden, um systemweite Änderungen zu verwalten.

Füge das Verzeichnis, in dem sich die Schriftarten befinden, in diese Konfigurationsdatei ein:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "/etc/fonts/fonts.dtd">
<fontconfig>
  <dir>/usr/local/lib/X11/fonts/myfonts</dir>
</fontconfig>
Oder, wenn nur ein Benutzer Schriftarten für seine Sitzungen verwenden möchte, könnte das obrige in seine $HOME/.fonts.conf-Datei eingetragen werden.

Beachte, dass fontconfig rekursiv alle Unterverzeichnisse nach verfügbaren Schriftarten untersuchen wird, während der reguläre X-Server das nicht macht.

Nachdem das Verzeichnis hinzugefügt wurde, muss der ,font cache' für das Verzeichnis neu generiert werden. Das folgende Kommando veranlasst fontconfig dazu, die ,font caches' für alle angegebenen Verzeichnissen in seiner Konfiguration neu zu generieren.

# /usr/X11R6/bin/fc-cache -v
Diese Änderungen werden Auswirkung auf die aktuelle X-Sitzung haben, so dass X selbst nicht neugestartet werden muss, laufende Applikationen jedoch schon.
[back] www@openbsd.org
$OpenBSD: truetype.html,v 1.5 2005/09/20 07:30:02 saad Exp $