Le système de font

Honnetement je ne suis pas sûr d'avoir tout compris sur la façon dont sont gérées les fonts sous Linux. Beaucoup de noms sont souvent cités mais à quoi servent-ils vraiment ? Voici les informations que j'ai reussi à glaner :

  • le serveur X (xfree 4.x ou x.org) peut gérer des fonts si on lui indique le(s) chemin(s) où chercher. Ces infos se trouvent dans le fichier de configuration (exemple : /etc/X11/xorg.conf), section Files, directives FontPath.
  • xfs : (X Font Server) fourni des polices à X. Il est lancé à part et peut faire des trucs très fun comme fournir des fonts à un X distant via le reseau. En général il est activé dans le fichier de conf de X via la directive :
    FontPath   "unix/:7100"
    Là se posent les premières questions : à quoi sert xfs si le serveur X peut gérer les fonts tout seul comme je viens de le dire ci-dessus ? Un element de réponse dans l'avant dernier post de ce topic sur HFR. En le virant mon X fonctionne tout aussi bien...
  • xfstt et xfs-xtt sont des alternatives à xfs capables de gérer les polices TrueType à l'époque où, ni xfs, ni X, ne le pouvait. En gros, à oublier.
  • FreeType (actuellement en version 2) est un moteur de rendu pour, entre autres, les fonts TrueType. Il est disponible sous forme de librairie (paquets libfreetype*). D'après ce que j'ai compris, c'est l'avenir (mais l'avenir de quoi ?). Voir le site http://www.freetype.org/
  • fontconfig est un outil permettant aux applications de trouver les fonts et de les configurer correctement. Seules les applications récentes (GTK 2 par exemple) l'utilisent. Voir le site http://www.fontconfig.org/ pour la doc.
  • defoma (DEbian FOnt MAnager) est l'outil magique de Debian pour uniformiser et gérer automatiquement tout ce bazar, et faire surement pleins d'autres trucs cools dont je me secoue le cocotier pour l'instant. Je sais pas comment il fonctionne, mais il fonctionne et c'est l'essentiel :)

Les packages qui vont bien

Voici les packages à installer (si ce n'est pas déjà fait). Tout d'abord, les logiciels/libraires :

  • libfreetype6 et libttf2 pour FreeType
  • fontconfig et libfontconfig1 pour fontconfig
  • defoma et x-ttcidfont-conf, les deux packages magiques de Debian

Ensuite, pour avoir des fonts sympas :

  • Tous les packages xfonts-* que vous voulez pour avoir des fonts sous X (pas TrueType), et surtout :
    • xfonts-100dpi
    • xfonts-100dpi-transcoded
    • xfonts-75dpi
    • xfonts-75dpi-transcoded
    • xfonts-base
    • xfonts-base-transcoded
    • xfonts-scalable
    J'ai déjà eu des problèmes vraiment bizarres (segfault de certaines applications, ou polices illisibles) si ces packages manquent...
  • msttcorefonts (disponible dans contrib), pour avoir les fonts Microsoft standards (Verdana, Arial, Times New Roman, Courier New, ...) Indispensable pour surfer correctement !
  • Tous les packages ttf-* que vous voulez pour avoir des fonts TrueType.

Configuration

Normalement dpkg doit envoyer un mail à l'administrateur avec les informations nécessaires pour la configuration du bousin. Si ce n'est pas le cas, regardez le chapitre "Polices TrueType dans X" dans le guide de référence Debian.

Voir également cet autre site pour plus d'informations.

A partir de cette étape, les polices devraient être gérées "correctement", c'est à dire que, quelque soit l'application (gtk1 ou gtk2 par exemple), vous aurez toujours les mêmes fonts disponibles (dont les fonts TrueType).

Antialias et polices par défaut : fontconfig est ton ami

Première chose qui me semble vital pour avoir un bureau joli : virer les fonts toutes moches fournies par défaut pour les remplacer par leur équivalent Microsoft (je sais, c'est mal), c'est à dire :

Polices par défaut sous Windows
Famille Windows Linux
serif Times New Roman ?
sans-serif Verdana ?
monospace Courier New ?

Pour ce faire, il faut l'expliquer à fontconfig. Créez un fichier /etc/fonts/local.conf contenant :

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Voir la doc de defoma -->
<dir>/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType</dir>

<!-- Alias certaines fonts "connues" par les fonts Microsoft -->
<alias>
<family>Times</family>
<prefer><family>Times New Roman</family></prefer>
<default><family>serif</family></default>
</alias>

<alias>
<family>Helvetica</family>
<prefer><family>Verdana</family></prefer>
<default><family>sans-serif</family></default>
</alias>

<alias>
<family>Courier</family>
<prefer><family>Courier New</family></prefer>
<default><family>monospace</family></default>
</alias>

<!-- Utiliser de preference les fonts Microsoft -->
<alias>
<family>serif</family>
<prefer><family>Times New Roman</family></prefer>
</alias>

<alias>
<family>sans-serif</family>
<prefer><family>Verdana</family></prefer>
</alias>

<alias>
<family>monospace</family>
<prefer><family>Courier New</family></prefer>
</alias>
</fontconfig>

Exemple trouvé dans la doc de fontconfig, par là.

Ensuite, personnellement, je trouve que l'anti-alising (fr, en) sur (certaines) petites fonts (disons celles inférieures à 14 pouces), c'est absolument immonde. Les polices apparaissent "grasses" et visuellement j'aime pas du tout.

Pour vous faire une idée, voici ce que ça donne visuellement (avec un Mozilla Firefox fraichement installé) :

Avec anti-aliasing
Avec anti-aliasing

Sans anti-aliasing
Sans anti-aliasing

Mon réglage de l'anti-aliasing est (toujours dans le fichier /etc/fonts/local.conf) :

<!-- L'anti aliasing sur certaines font c'est une horreur... -->
<match target="font">
<test name="family">
<string>Verdana</string>
<string>Arial</string>
<string>Times New Roman</string>
<string>Courier New</string>
<string>Helvetica</string>
</test>
<test name="size" compare="less">
<int>14</int>
</test>

<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
<!--
et une regle pour firefox, une...
apparement le nom de la regle a change entre size et pixelsize, a voir
-->
<match target="font">
<test name="family">
<string>Verdana</string>
<string>Arial</string>
<string>Times New Roman</string>
<string>Courier New</string>
<string>Helvetica</string>
</test>
<test qual="any" name="pixelsize" compare="less_eq">
<double>18</double>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>

Avec tous ces reglages, j'ai enfin les fonts que j'aime, et surtout je n'ai plus à me casser la tête entre les applis gtk1, gtk2 et compagnie ! Après libre à vous d'adapter ces reglages comme bon vous semble.

Liens annexes