Firefox unter Ubuntu vernünftige Schriften beibringen

Mit der Freigabe von Freetype 2.7, kam bei mir wieder das Thema Schriftdarstellung unter Linux in den Focus. Ich hatte vor Jahren auf meinem alten, stillgelegten Blog das Thema schon einmal behandelt. Dieser Artikel ist eine Überarbeitung des alten Artikels von 2010:

Vor ein paar Jahren (2009) fragte ein Webdesigner im Forum von ubuntuusers.de nach Screenshots seiner Website (Der Link benötigt einen Account bei Ubuntuusers.de, da der Thread in der „Lounge“ liegt) welche mit Linux-Browsern aufgerufen wurde. In einem anderen Thread wurde vom gleichen Webdesigner nachgefragt welche Schriftarten standardmäßig unter den diversen Linux-Distributionen installiert sind bzw. mit welchen man in Normalfall immer rechnen kann. Daraus entwickelte sich eine Diskussion über gutes Webdesign bzw. die Abhängigkeit eines Webdesigners von den vorhandenen Schriftarten.

Das Problem ist seit der Einführung von Webfonts grundsätzlich nicht mehr so stark ausgeprägt, da ein Webdesigner heutzutage einfach per CSS und/oder Javascript fehlende Schriftarten nachladen lassen kann. Aber nicht jede Webseite bindet Webfonts ein, da viele Webdesigner immer noch davon ausgehen, dass Besucher der Seite entweder Windows oder OSX benutzen (Was oft heißt entweder „Helvetica (Neue)“ oder „Arial“ vorzugeben).

Ich hatte im Forum eine kurze Erklärung verfasst, warum manche Webseiten unter Linux sehr oft recht bescheiden ausschauen (Komische Schrift, zerrissenes Layout usw.) und wie man dieses Problem recht einfach beseitigen kann (Aus Nutzer -und aus Webdesignersicht).

Wie wählt mein Browser die Schriftarten aus?

Zuerst möchte ich die Grundlagen, wie ein Browser unter Linux seine Schriftarten auswählt, erläutern:

Jeder moderne Browser bietet in seinen Konfigurationsdialogen eine Möglichkeit an die Schriften, welche zum Darstellen der Webseiten benutzt werden sollen, auszuwählen. In den meisten Fällen beschränkt sich die Auswahl auf drei Möglichkeiten :

  • Serif
  • Sans Serif
  • Monospace

Ersteres sind Serifenschriften (z.B. Times New Roman, Liberation Serif, Courier, usw.)  des weiteren Schriften ohne („sans“) Serifen (z.B. Arial, Liberation Sans, Helvetica, usw.) und und am Ende Schriften mit fester Buchstabenbreite (z.B. Courier New, Liberation Mono, usw.). Zusätzlich lässt sich noch die Größe der Schriften und die Minimalgröße der Schriften festlegen.

Warum zeigt mir der Browser dann trotz allem einige Seiten mit einer anderen Schrift an?

Hier kommt nun ein Element von HTML bzw. CSS ins Spiel :

Wird im HTML-Code explizit eine bestimmte Schriftart vorgegeben (z.B. „Liberation Sans“ auf ubuntuusers.de), übergeht der Browser die vorgegebenen Schriftarten und benutzt die im HTML-Code angegebenen. Hier ein Beispiel wie ein „font-family“-Eintrag oft ausschaut:

font-family: "Helvetica","Arial",sans-serif;

Zuerst versucht der Browser die Seite mit der Schriftart “Helvetica” anzuzeigen. Falls diese nicht vorhanden ist, soll “Arial” benutzt werden. Falls diese wiederum nicht vorhanden ist soll die im Browser unter “sans-serif” vorgegebene Schriftart benutzt werden.

Warum sieht dann stellenweise die Schrift in meinen Browser immer noch so bescheiden aus?

Jetzt könnte man als Benutzer meinen das alles in Butter ist. In der Regel hat man ja auch unter Linux  bzw. Ubuntu die Windows-Schriftarten und damit “Arial” installiert (z.B. durch das Paket “msttcorefonts” bzw. “ttf-mscorefonts-installer”). Leider ist das nicht immer der Fall. So ist z.B. in der Grundinstallation der meisten Distributionen aus Lizenz-technischen Gründen dieses Paket nicht enthalten. Normalerweise wäre auch das kein Problem, da der Browser im Zweifelsfall einfach die unter “sans-serif” angegebene Schriftart benutzt. In der Auswahl der Schriften im Browser taucht ja kein „Helvetica“ auf, also ist diese auch nicht auf dem System vorhanden.

Jedoch besitzen alle Linux-Distributionen ein Schrift-Konfigurationssystem namens “Fontconfig”, welches dafür sorgt das das System auch bei  nicht vorhandenen Schriftarten eine (mehr oder weniger) fehlerfreie Ausgabe auf dem Bildschirm liefert. Dieses lässt sich sehr flexibel anpassen, hat in der Grundkonfiguration aber eine, gelinde gesagt, hirnrissige Einstellung, welche für die schlechte Darstellung der Schriften sorgt:

Fontconfig substituiert die fehlende Schriftart „Helvetica“ standardmäßig mit der Postscript-Schriftart „Nimbus Sans L„. Da CUPS als Abhängigkeit Ghostscript definiert und letztere diese Schriftart als Abhängigkeit mitbringt, ist die Schrift so gut wie immer installiert (Außer man verzichtet auf CUPS). Da die Schriftart “Helvetica” somit vorhanden ist, gibt es auch kein Ausweichen auf „Arial“ oder “sans-serif”.

Unter Fontconfig ist zusätzlich noch eine Substituierung von „Arial“ eingestellt. Standardmäßig wird beim Nichtvorhandensein diese gegen „DejaVu Sans“ ersetzt. Diese entspricht von der Schrifthöhe -und Breite nicht Arial, wodurch Webseiten die Standardmäßig „Arial“ einsetzen eine größere Darstellung des Inhaltes haben.

Und „Nimbus Sans“ ist nicht gerade für ihr gutes Aussehen auf Bildschirmen bekannt („Nimbus Sans“ ist als Druckerschriftart entwickelt worden). Die meisten Benutzer greifen dann einfach zur Radikalmethode und verbieten dem Browser per Konfigurationsoption das Benutzen aller anderen Schriftarten. Doch es geht auch eleganter:

Fontconfig die “Nimbus Sans”-Schriftart abgewöhnen

Um Fontconfig, Firefox und allen anderen Anwendungen das Ersetzen der Schriftart “Helvetica” gegen “Nimbus Sans” abzugewöhnen, ohne die Schriften löschen oder den Browser umkonfigurieren zu müssen, gibt es eine relativ einfache Methode:

Man ersetzt einfach alle Vorkommen von “Nimbus” in den Dateien unter “/etc/fonts/conf.avail” gegen eine andere Schriftart (z.B. „Liberation Sans“). Unter Ubuntu kommt dieser Name nur in drei Dateien vor (Bei anderen Distributionen sollten die Dateinamen und Vorkommen identisch sein):

  • 30-metric-aliases.conf
  • 45-latin.conf
  • 60-latin.conf

Um die Sache etwas zu vereinfachen, biete ich die geänderten Dateien zum Download an :

fontconfig.tar.bz2

Im TAR-Archiv sind die drei oben genannten Dateien enthalten (Eben nur mit den Liberation Fonts als Fallback) sowie ein kleines Skript, welches mit Root-Rechten ausgeführt werden muss. Dieses legt mit Hilfe von „dpkg-divert“ eine Umleitung der Original-Dateien und und kopiert die neuen Dateien dann nach „/etc/fonts/conf.avail“. Die Umleitung ist deshalb notwendig, da bei jedem möglichen Update des Fontconfig-Pakets ansonsten die Änderungen verloren gehen würden. So schreibt der Paketmanager die Änderungen in die umgeleiteten Original-Dateien und lässt die veränderten Dateien in Ruhe.

Startet man jetzt den Browser neu bzw. loggt sich neu ein, wird die Schriftart “Nimbus Sans” nicht mehr als Ersatz für den Schrifttyp “Helvetica” verwendet, sondern “Liberation Sans”. Die Schrift ist quasi eine Kopie von „Arial“, welches selbst eine (dreiste) Kopie von „Helvetica“ ist und entspricht fast 100% dem Schriftbild (Breite und Höhe) dem Vorbild.

Somit benutzen Firefox und andere Browser endlich vernünftige Bildschirmschriften und man muss sich als Benutzer nicht mehr mit einem schlechten Schriftbild herumärgern.

Firefox 46 unter Linux standardmäßig als Gtk3-Build

Nach Jahren des Wartens wird seit Firefox 46 endlich standardmäßig Gtk3 als Toolkit benutzt. Dadurch passt sich Firefox besser an moderne Oberflächen an und benutzt z.B. die integrierten Scrollbars von Gtk3. Zusätzlich scheint Firefox ein wenig performanter in der Grafikdarstellung geworden zu sein, wobei das ein rein subjektiver Eindruck meinerseits ist.

Neben dem offiziellen Paket von der Mozilla-Seite wird in allen noch unterstützten Ubuntu-Versionen (14.04, 15.10 & 16.04) Firefox 46 ebenfalls als Gtk3-Build ausgeliefert.

Leider hat es die Multiprozess-Architektur noch nicht in Firefox 46 geschafft. Diese soll ab Version 48 dann für alle Benutzer aktiviert werden.