bogomips.de ::
X11 Fonts
Fonts
Hier habe ich einige Tipps zur Fontkonfiguration zusammengestellt, die erfahrungsgemäß nicht nur Anfängern desöfteren Probleme bereitet. Daher tauchen entsprechende Fragen und Probleme in den einschlägigen Newsgroups und Mailinglisten leider immer wieder regelmäßig auf.
Einige hier beschriebe Dinge sind debianspezifisch aber sollten sich auch ohne größere Probleme analog auf andere Distributionen übertragen lassen, da die grundlegend verwendete Software natürlich immer die gleiche ist. Zudem wird versucht, im konkreten Fall jeweils darauf hinzuweisen.
Einführung
Der Gebrauch von Schriften ist unter Linux bzw. Unix – wie viele andere Dinge auch – historisch gewachsen.
Das macht das Thema leider recht unübersichtlich,
da keine zentrale Schriftenverwaltung und -konfiguration wie unter anderen
Systemen existiert.
Die wäre auch nur schwer zu realisieren, da ein Unixsystem
prinzipiell modular aufgebaut ist. So ist X als grafische Oberfläche z.B. ein
völlig unabhängiges System, dessen Fontkonfiguration auch unabhängig von der der
Textconsolen und anderen Komponenten erfolgt. Schwerpunkt hier soll im Folgenden
die Fontkonfiguration unter X sein.
Zudem ist die Qualität vieler Defaultinstallationen recht mangelhaft, so daß viele Nutzer erst einmal den Eindruck gewinnen, unter Linux sähe die grafische Oberfläche mit ihren Fonts immer so bescheiden aus, wie sie nicht selten angeliefert wird.
Hat man allerdings erst einmal einen groben Überblick gewonnen, wo man überhaupt konfigurieren kann und sollte, dann sind ansprechende Ergebnisse nicht weiter schwer zu erreichen.
Diesen Überblick zu gewinnen ist allerdings nicht unbedingt leicht – noch
dazu ist die zugehörige Dokumentation in der Regel recht gut verteilt und nicht
eben leicht zu finden.
Im Folgenden daher ein paar hoffentlich hilfreiche
Hinweise.
Grundlegendes
Grundlage einer sinnvollen Konfiguration ist die korrekte Ermittlung und
Einstellung der korrekten DPI (dots per inch) Werte der jeweils verwendeten
Hardware.
Im Zweifelsfall helfen einem da ein Zollstock und die Grundrechenarten
weiter.
Das ist die eherne Grundlage – auch wenn gelegentlich daran rumgespielt wird,
um verpfuschte Konfigurationen oberflächlich optisch wieder gradezubiegen, wenn
Schriften allgemein zu groß oder zu klein erscheinen.
Das scheint ein beliebter schneller Workaround zu sein, der von Anfängern gerne genannt wird, aber ist
doch nur Pfusch mit Nebenwirkungen, vor dem man nur nachdrücklich warnen kann.
Falls die grundlegende Konfiguration stimmt, aber Schriften noch in unpassenden
Größen erscheinen, kann man das in der Konfiguration der verwendeten Widgetsets
oder der einzelnen Programme korrigieren. Beispielsweise durch passende
X Ressourcen
oder passende Einträge in ~/.gtkrc o.ä.
Wird der DPI Wert nicht korrekt eingestellt, stimmt ganz einfach die dargestellte
Schriftgröße nicht mehr.
Wird eine Schriftgröße beispielsweise in Points angegeben, sollte sie
normalerweise überall gleich groß erscheinen, unabhängig vom Medium.
Ein Ausdruck erscheint in gleicher Buchstabengröße wie auf dem Monitor. Man kann
den Ausdruck auf die Bildschirmdarstellung legen und Größen sind deckungsgleich.
Ein Point entspricht 1/72 Zoll.
Problematisch ist da eigentlich nur mal wieder Windows, da Windowsrechner praktisch
nie korrekt eingestellt werden. Meist laufen die einfach mit der Windowsdefaulteinstellung
von 96 DPI oder gar 120 DPI, wenn der Anwender dort größere Schriftdarstellung
eingestellt hat – völlig unabhängig von den tatsächlichen Gegebenheiten.
Die unmittelbaren Nebenwirkungen sieht man dann meist auf Webseiten, deren
Schriftgrößen in Points definiert und die unter Windows geschrieben wurden.
Auf einem korrekt eingestelltem System fällt die Schriftgröße dann nicht
selten überraschend anders aus.
Hat man z.B. zwei Rechner, deren Monitordarstellung real mit 72 DPI arbeitet,
so entspräche ein Point logischerweise genau einem Pixel. Ist einer der
Rechner jetzt aber fälschlicherweise auf 96 DPI eingestellt, rechnet dieses
System die Längeneingabe 1 Point in 1,33 Pixel um (96x(1/72)=1,33) und alles
erscheint somit ein sattes Drittel zu groß.
Ein Anwender auf dem fehlkonfigurierten System wählt nun eine in angenehmer Größe dargestellte Schriftgröße für seine Webseite und verwendet als Größenangabe Points.
Der Anwender auf dem anderen, korrekt eingestellten System ruft nun die
Webseite auf und seine Darstellung ist natürlich um ein Drittel
kleiner, was normalerweise auf eine geradezu mikroskopische Schrift hinausläuft.
Folge: Von Größenangaben in Points in Webseiten muß man abraten, weil nicht zuletzt dank eines marktbeherrschenden Softwareherstellers zu viele kaputtkonfigurierte Systeme
existieren.
Dabei wären andernfalls Points als Größenangaben annähernd ideal, da wie gesagt prinzipiell hardwareunabhängig.
Nehmen wir also an wir haben einen Monitor, der mit 1280x1024 Punkten Auflösung betrieben wird und dessen gemessenes sichtbares Bild 33,7x27,0 cm beträgt.
Dann ergibt sich aus 1280/(33,7/2,54)=96,47 und 1024/(27/2,54)=96,33, daß X
offensichtlich mit (diesmal echten) 96x96 DPI betrieben wird.
Nebenbei kann man auch gleich noch erkennen, daß das eingestellte Seitenverhältnis
des Gerätes stimmt (1280/1024=1,25 annähernd 33,7/27=1,248) und die
Darstellung nicht verzerrt ist.
Auf evtle. Verzerrungen sollte man gerade bei einer solchen Auflösung wie 1280x1024 (5:4) achten, die sich nicht mit den Seitenverhältnissen üblicher Monitore deckt (4:3) und die man daher auch nicht bildschirmfüllend einstellen kann.
Mancher neigt dazu, das dennoch bildschirmfüllend und randlos aufzuziehen und wundert sich dann, daß Kreise nicht mehr rund sind und Quadrate zu Rechtecken mutieren.
Wer keine schwarzen Ränder mag, sollte vielleichtdoch besser zu einer 4:3 Auflösung wie 1024x768, 1152x864 o.ä. wechseln oder einen passenden
Monitor mit entsprechendem Seitenverhältnis kaufen.
Entsprechend muß man X starten und die ermittelten korrekten DPI mitgeben.
Entweder, indem man das als Parameter -dpi 96 (siehe auch die Manpages zu startx und xinit) dem X Aufruf mitgibt
(etwa in /etc/X11/xinit/xserverrc) oder der Konfiguration des verwendeten Displaymanagers (xdm, wdm, gdm, usw.), der X startet.
Oder aber auch bei neueren XFree86 Versionen gleich in /etc/X11/XF86Config-4 in der Monitorsection über in diesem Fall DisplaySize 337 270.
Ob X dann auch wirklich mit dem konfigurierten DPI Wert läuft, läßt
sich einfach mittels xdpyinfo herausfinden.
FontPath
Nächster wichtiger Punkt ist die geeignete Anordnung der Fontpfade, die von X
der Reihe nach nach geeigneten Schriften durchsucht werden, wenn eine Schrift
angefordert wird.
Liegt die Auflösung eher bei 100 als bei 75 DPI, könnte das
beispielsweise so aussehen:
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/misc/:unscaled" Fontpath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" FontPath "/usr/local/share/fonts/TrueType" FontPath "/usr/local/share/fonts/Type1/adobe" FontPath "/usr/X11R6/lib/X11/fonts/Type1" FontPath "/usr/X11R6/lib/X11/fonts/Speedo" FontPath "/usr/X11R6/lib/X11/fonts/100dpi" FontPath "/usr/X11R6/lib/X11/fonts/75dpi" FontPath "/usr/X11R6/lib/X11/fonts/misc"
Zuerst die Verzeichnisse mit den mitgelieferten und handoptimierten
100 DPI Bitmapfonts unskaliert an den Anfang.
Dann in diesem Falle bei einem Debian System die über defoma installierten
TrueType Fonts unter /var/lib/[…].
Dann etwaige unter /usr/local selbst installierte TrueType und Type1
Fonts und dann wieder mit X mitgelieferte Type1 und Speedo Fonts. Die sollten
nicht allzu weit nach vorne rücken, da ihre Qualität nicht eben berauschend
ist. Insbesondere die mit X mitgelieferte Type1 Courier ist nicht ebend die
allerbeste.
Zuletzt noch als letzter Notnagel noch einmal die Bitmapfonts, die dann auch
notfalls skaliert werden dürfen, was zwar gruselig aussieht, aber immer noch
besser ist, als gar keine Schrift zu sehen.
Bei aktuellen Xfree86 Versionen ist die separate Angabe von unscaled Varianten bei Bitmapfonts nicht mehr nötig, wodurch sich die Angaben entsprechend verkürzen:
FontPath "/usr/X11R6/lib/X11/fonts/100dpi" FontPath "/usr/X11R6/lib/X11/fonts/75dpi" FontPath "/usr/X11R6/lib/X11/fonts/misc" Fontpath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" FontPath "/usr/local/share/fonts/TrueType" FontPath "/usr/local/share/fonts/Type1/adobe" FontPath "/usr/X11R6/lib/X11/fonts/Type1" FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
Bei eher 75 als 100 DPI vertauscht man die entsprechenden Bitpmapfontpfade jeweils in der Reihenfolge.
Verwendet man einen Fontserver wie xfs, dann wäre der mit analogen Pfadangaben zu konfigurieren und passenden default-resolutions (->man xfs).
Für die klassische XFree86 Grundkonfiguration war es das auch schon.
Da mittlerweile auch noch Antialiasing, fontconfig, usw. Einzug gehalten haben
und recht gängig geworden sind, gibt es aber leider noch ein paar weitere kleine
Baustellen – und natürlich noch das wichtige Thema der Schriftinstallation selber.
Antialiasing
Die native Methode, die X seit einiger Zeit dafür zur Verfügung stellt ist Xft, eine X Erweiterung, die ein geeignetes Protokoll implementiert.
Xft1
Die ältere Variante Xft1 wird für gewöhnlich in /etc/X11/XftConfig
konfiguriert. Dorthin gehören die Pfade zu installierten skalierbaren Schriften
und optional weitere Konfigurationsparameter, etwa wie folgt:
dir "/usr/X11R6/lib/X11/fonts/Type1" dir "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" dir "/usr/local/share/fonts/TrueType" dir "/usr/local/share/fonts/Type1/adobe" # sub-pixel hinting looks better on TFT # depending on the sort of display, the last word may need to be changed # from "rgb" to "bgr", "vrgb" or "vbgr" match edit rgba=rgb; # There's no need for fonts to be anti-aliased at "normal" sizes, # they cause eyestrain and don't really enhance the fonts. Tell Xft # not to anti-alias fonts between 8pt and 14pt sizes match any size < 8 any size < 14 edit antialias = false; # Same again, but enforced for KDE (specifically Konqueror/KHTML) match any pixelsize > 8 any pixelsize > 14 edit antialias = false; # alias 'fixed' for 'mono' match any family == "fixed" edit family =+ "mono"; # Check users config file includeif "~/.xftconfig" # Alias between XLFD families and font file family name, prefer local # fonts match any family == "charter" edit family += "bitstream charter"; match any family == "bitstream charter" edit family =+ "charter";
Wie man sehen kann, wurden hier im Beispiel noch die Fontpfade passend ergänzt
und für den Betrieb eines TFT Display statt normalem Antialiasing Subpixel-Rendering
aktiviert, da normales Antialiasing auf TFTs nicht funktioniert. (Unter Windows
nennt sich eine analoge Technologie nebenbei Cleartype.)
Zudem wurden Fonts zwischen 8 und 14 Punkten Größe vom Antialiasing ausgenommen, da das bei solchen Fontgrößen
relativ wenig Sinn macht.
Aber sowas ist Geschmackssache und sollte jeder für sich selber testen.
Xft1 ist aber mittlerweile schon wieder überholt und wird von aktuellen Programmen und Widgetsets kaum mehr verwendet, obwohl es normalerweise noch zur Standardinstallation
gehört.
Xft1 kann nur mit skalierbaren Vektorfonts (TrueType, Type1) Antialiasing.
Xft2 bzw. freetype2
Aktuellere Methode ist nun freetype2 bzw. Xft2, das nun vornehmlich Verwendung
findet.
Es verwendet wiederum fontconfig und wird im Allgemeinen in /etc/fonts/ configuriert.
Hier sind im Prinzip zu Xft1 analoge Einstellungen zu machen.
Also Fontpfade ergänzen, falls nötig, und evtl. Subpixel-Rendering anschalten.
Hier kann man nach Wunsch auch Bitmapfonts beim Antialiasing mit einschließen, indem man sie in den Pfad mit aufnimmt (z.B. indem man durch Angabe von
<dir>/usr/X11R6/lib/X11/fonts</dir> das gesamte X Oberverzeichnis für Fonts und damit implizit auch die mit X mitgelieferten Bitmapfonts einträgt).
Weiterhin kann man das Freetype Autohintermodul aktivieren, wobei man wiederum
ausprobieren sollte, ob einem das besser oder schlechter gefällt, was auch von den
verwendeten Schriften und vom Monitor abhängen kann.
Die Konfiguration erfolgt dabei üblicherweise in /etc/fonts/local.conf.
Unter Debian kann man zur Konfiguration auch dpkg-reconfigure -plow fontconfig aufrufen, das die wesentlichen Einstellungen tätigt.
/etc/fonts/local.conf könnte beispielsweise wie folgt konfiguriert werden, wobei das Includieren weiterer Konfigurationsdaten unter /var/lib/defoma/[…] wiederum lediglich eine weitere Debianbesonderheit darstellt:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<include ignore_missing="yes">/var/lib/defoma/fontconfig.d/fonts.conf</include>
<dir>/usr/X11R6/lib/X11/fonts</dir>
<match target="font">
<test qual="all" name="rgba">
<const>unknown</const>
</test>
<edit name="rgba" mode="assign"><const>rgb</const></edit>
</match>
<!-- Uncomment below to enable the freetype autohinter module -->
<!--
<match target="font">
<edit name="autohint" mode="assign">
<bool>true</bool>
</edit>
</match>
-->
</fontconfig>
Besonderheiten
Gtk
Ob Gtk Programme Antialiasing verwenden, ist abhängig von der Gtk Version
und der Umgebungsvariablen GDK_USE_XFT.
Gtk 1.2 Programme nutzen nur Antialiasing, wenn sie auf 1 gesetzt ist.
Bei GTK 2 Programmen kann man das defaultmäßig aktivierte Antialiasing umgekehrt mittles GDK_USE_XFT=0 abschalten.
Also sollte man nach Wunsch die Umgebungsvariable setzen (z.B. in /etc/environment oder den passenden Shell Profile-Dateien oder evtl. in
der jeweiligen Konfiguration der Xsession).
Mozilla
Mozilla kann Antialiasing selbständig über die libfreetype, wenn man das
entsprechend in /etc/mozilla/prefs.js bzw. der Konfiguration des jeweiligen Users
freischaltet und die Fontpfade entsprechend ergänzt, wovon aber abzuraten ist.
Stattdessen sollte man einen mozilla mit einkompilierter Xft Unterstützung verwenden.
Unter Debian (unstable) kann man auch einfach das Paket mozilla-xft ergänzend
nachinstallieren.
Zum einen erspart man sich eine weitere Baustelle an der man Fonts konfigurieren muß und zum anderen produziert Mozilla als Nebeneffekt beim Ausdruck dann Postscript Level 2 statt Postscript Level 3, wie es Mozilla mit Freetype erzeugt.
Mit letzterm hat so macher Postscriptdrucker noch Probleme und auch ghostscript kommt mit PS Level 2 normalerweise besser klar.
Falls man also Probleme mit dem Drucken aus Mozilla heraus hat, sollte
man sich vielleicht mal näher anschauen, ob nicht vielleicht aktivierter Freetype
Support daran schuld ist.
Fontinstallation
Hat man erst einmal die Grundkonfiguration erledigt, kommt sehr schnell
die Frage auf, wie man eigene Schriften ins System integrieren kann.
Sei es, weil der Umfang der mit X mitgelieferten Schriften nur recht spartanisch ist,
ihre Qualität teilweise zu wünschen übrig läßt, oder man ganz einfach gängige
Schriften auch verwenden will.
Die meisten fertigen Linuxdistributionen bringen noch optionale Schriftpakete mit, bei denen sich der Installationsaufwand dank Packagemanagement normalerweise in Grenzen hält. Man sollte nur etwas darauf achten, ob die Distributionspakete lediglich die klassische Installation rein für X beinhalten oder aber auch schon die Integration für andere Systembereiche gleich miterledigen, so daß man weniger nacharbeiten muß.
Klassische Installation für X
Type1 Fonts
Type1 Fonts sind das traditionelle Format für skalierbare Schriften unter X.
Entsprechend verbreitet ist ihre Nutzung. Leider werden mit XFree86 nur sehr
wenige Type1 Fonts mitgeliefert und zudem ist ihre Qualität teilweise zweifelhaft.
Es bietet sich hier also gleich ein erfolgversprechender Ansatzpunkt, die allgemeine
Schriftqualität unter X nachdrücklich zu verbessern.
Empfehlenswert ist in jedem Falle die Installation hochwertigerer Schriften.
Die Installation einer besseren Courier als der mitgelieferten bringt normalerweise gleich merklichen Erfolg. Gute Schriften sind leider rar, insbesondere, wenn man sie nicht für viel Geld kaufen will oder kann.
Aber man findet beispielsweise einige wenige mitgeliefert mit dem Acrobat Reader. Die qualitativ sehr hochwertigen URW Schriften, die mit ghostscript ausgeliefert werden, machen sich auch sehr gut unter X.
Letztere decken mit entsprechenden Aliasen versehen sogar den Bereich der 35 Postscript Standardfonts in bester Qualität ab.
Zur Installation kopiert man neue Type1 Fonts in ein geeignetes Verzeichnis
und nimmt dieses in den FontPath von X auf.
Die von X benötigten Katalogdateien fonts.dir und fonts.scale kann man z.B. mit type1inst erzeugen oder bei neueren X Versionen auch mit mkfontscale und anschließendem mkfontdir.
Dabei muß man allerdings im Falle des alten type1inst beachten, daß das Skript unixuntypisch Type1 Fontdateien nur anhand der Dateiendung erkennt und nach .pfa und .pfb Dateien sucht.
Nach Ausführung von xset fp rehash stehen die neuen Fonts dann unter X zur Verfügung.
Die professionellen URW Type1 Fonts von ghostscript machen sich wie gesagt unter X sehr gut, wenn man sie mit entsprechenden Aliasen auf die Namen der Standardfonts trimmt.
TrueType Fonts
Die Installation von TrueType Fonts erfolgt mittlerweile annähernd analog
zu Type1 Fonts.
Während man bei früheren XFree86 Versionen noch extra einen geeigneten Fontserver einsetzen mußte (was hier nicht weiter behandelt werden soll, da
es auf einer Vielzahl von Webseiten bereits thematisiert wurde) um TTF
zugänglich zu machen, kann X in hinreichend aktuellen Versionen auch selber
damit umgehen.
Dazu muß in der Module Sektion der X Konfiguration lediglich
die Unterstützung von freetype aktiviert sein, was es defaultmäßig ist.
Man kopiert die Fonts wiederum in ein Verzeichnis, nimmt das in den FontPath
auf und erzeugt geeignete Schriftkataloge.
Gut geeignet ist dafür ttmkfdir, das sich in jeder Distribution finden dürfte.
Auch hier gibt es wieder die kleine Stolperfalle, daß Schriftdateien nur aufgrund des Suffix .ttf erkannt werden.
Nach Ausführung von xset fp rehash stehen auch hier die
Fonts zur Verfügung.
Weitere Installationsschritte
Die soeben beschriebene Installation ist leider noch nicht alles.
Damit kennt zwar X die neuen Schriften und jedes normale X Programm kann
sie nutzen – aber es gibt leider noch einige Sonderfälle, die man vielleicht
beachten sollte.
Sie werden im Folgenden überwiegend nur kurz angeschnitten,
da der Schwerpunkt dieser Beschreibung zunächst einmal nur auf X selber liegt.
Antialiasing
Antialiasing funktioniert wie beschrieben leider nicht mit dem traditionellen
Fontmechanismus von X sondern über Xft.
Hat man neue Fontverzeichnisse angelegt, muß man die daher auch Xft beibringen, also
entsprechend in die dortige Konfiguration eintragen, wenn X auch Antialiasing mit
ihnen können soll.
Da Xft2 auf fontconfig aufsetzt, muß man noch fc-cache aufrufen, damit
fontconfig die neuen Schriften in seinen Bestand übernimmt.
Ausdruck
Viele Anwendungen betten die benötigten Schriften zwar in den Postscript
Code für den Druck ein, aber das muß nicht zwingend so sein.
Möchte man also die neu installierten Schriften auch ausdrucken können, so muß man sie auch noch ghostscript beibringen, das bei den meisten Installationen für die Druckausgabe zuständig sein dürfte.
Für Type1 Schriften erzeugt type1inst bereits passende Fontmaps für ghostscript, die man nur noch in den Pfad aufnehmen muß. Bei TTF muß man sich eine passende Fontmap nach meinem Kenntnisstand bisher selber schreiben. Da es sich um einfache Zuweisungen von Schriftnahmen zu Schriftdateien handelt, hält sich der Aufwand glücklicherweise auch noch in Grenzen.
OpenOffice
Die Office Suite OpenOffice kümmert sich ganz untraditionell völlig eigenständig um alle Fontbelange. Es tut sich hier also weitere Baustelle auf, an der man alle Fonts noch einmal separat konfigurieren muß. Die Vorgehensweise hierzu ist durch die mitgelieferte Dokumentation oder auf den OpenOffice.org Webseiten hinreichend dokumentiert.
Update: Aktuelle Versionen von OpenOffice verwenden nun auch fontconfig, um die verfügbaren Fonts zu lokalieren. D.h. Fonts, die durch fontconfig erfasst sind, sind nun auch automatisch unter OpenOffice nutzbar.
Mozilla
Mozilla und seine Ableger kümmern sich mit aktivierter TrueType Unterstützung
auch eigenständig um den Fontzugriff. Entspechend muß man auch hier neue Schriftpfade
in die Konfiguration mit aufnehmen.
Man kann hier nur wiederholt dazu raten, eine Mozilla Version einzusetzen,
die stattdessen auf Xft aufsetzt.
