cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

Où sont stockées les polices de caractères sous Linux Mint ?

Sous Linux, les polices sont stockées dans différents répertoires, les plus communs sont :

  • /usr/share/fonts
  • /usr/local/share/fonts
  • ~/.fonts

Techniquement, vous pouvez mettre vos nouvelles polices dans n’importe lequel de ces dossiers, on peut cependant affiner un peu cela en respectant les normes et les conventions.

Par exemple, sous Linux Mint, les polices True Type Format sont classées un dossier spécifique :

  • /usr/share/fonts/truetype

et les polices pour l’utilisateur courant se trouve :

  • ~/.local/share/fonts

Beaucoup de logiciels embarquent leurs propres polices, c’est le cas de LibreOffice par exemple, les polices étant dessous /opt/libreoffice7.2/share/fonts, mais ce qui nous intéresse c’est plutôt les polices qui sont partagées :

Dessous /var/lib/flatpak/ il y a également des polices, mais là encore, elles sont réservées. Il s’agit des applications au format flatpak, de même dessous /snap/ pour les applications au format snap.

Voici d’autres dossiers notables :

  • /var/lib/dpkg/alternatives
  • /etc/alternatives


Où mettre vos polices ?

Si vous utilisez l’outil de gestion des polices de caractères de Linux Mint, lorsque vous cliquez sur le bouton installer, il utilisera le dossier : ~/.fonts

Cependant, si vous souhaitez que vos polices soient accessibles à tous les utilisateurs, il est plus pertinent de les copier dessous : /usr/local/share/fonts (ce qui nécessitera les droits administrateurs).



Comment rechercher tous les fichiers contenant une police de caractère ?

Pour les plus curieux d’entre vous, je vous propose de partir à l’exploration des polices de caractères en dépliant le texte ci-dessous…

  • Pour ceux qui souhaitent creuser…

    Pour trouver toutes les fonts, vous pouvez utiliser:

    sudo find / -type f -iname '*.otf' -or -iname '*.ttf' 2>/dev/null
    

    -o ou -or sont de synonymes pour find.

    Notez qu’il existe d’autre type de ficher de police de caractère, et certainement que votre système en supporte d’autre, vous adapterez a votre besoin…

    On utilise sudo pour pouvoir atteindre tous les fichiers du disque, on recherche à partir de la racine (/), on se limite aux fichiers (-type f) dont le nom fini par « .otf » (-iname '*.otf') ou (-or) par « .ttf » (-iname '*.ttf') et on masque les erreurs (2>/dev/null). Les erreurs étant dans ce cas normal, find va se heurter à des fichiers appartenant au système qu’il ne peut pas gérer.

    La liste risque déjà très longue et comme le but est de ne connaître que le dossier, on peut réduire considérablement les résultats comme suit :

    sudo find / -type f -iname '*.otf' -or -iname '*.ttf' -exec dirname {} \; 2>/dev/null | sort | uniq
    

    Il est possible d’accélérer un peu l’affichage, en partant du principe que la sortie de la commande find sera déjà triée :

    sudo find / -type f -iname '*.otf' -or -iname '*.ttf' -exec dirname {} \; 2>/dev/null | uniq
    

    Cette recherche risque d’être lente, puisqu’elle va examiner l’ensemble du disque dur. Soit vous aller vous faire un café, soit il faut essayer de limiter raisonnablement son périmètre.

    sudo find / -type d \( -path '/cdrom' \
    -o -path '/lost+found' \
    -o -path '/tmp' \
    -o -path '/run' \
    -o -path '/proc' \
    -o -path '/media' \
    -o -path '/usr/share/fonts' \
    -o -path '/usr/local/share/fonts' \
    -o -path '/var/lib/flatpak' \
    -o -path '/mnt/data/home/claude/sources' \) \
    -prune -or -type f -iname '*.otf' -or -iname '*.ttf' -exec dirname {} \; 2>/dev/null | uniq
    

    Les dossiers exclus :

    • /cdrom – A priori, on ne veut pas explorer un éventuel CD,
    • /lost+found – Dossier système sans intérêt ici,
    • /tmp – Dossier temporaire, les police-de-caractère éventuelles ne résistent pas à un redémarrage,
    • /run – Dossier système sans intérêt ici,
    • /proc – Dossier système sans intérêt ici,
    • /media – A priori, on ne veut pas rechercher sur d’éventuels points de montages,
    • /usr/share/fonts – On sait déjà qu’il y a des fonts ici,
    • /usr/local/share/fonts – On sait déjà qu’il y a des fonts ici,
    • /var/lib/flatpak – Les fonts présentes dans ce dossier sont gérées par flatpak,
    • /mnt/data/home/claude/sources – Et vous pouvez ajouter d’éventuels dossiers perso…

    On peut vouloirs chercher des polices en double, je vous propose pour cela de faire quelque chose du type :

    sudo find / -type d \( -path '/cdrom' \
    -o -path '/lost+found' \
    -o -path '/tmp' \
    -o -path '/run' \
    -o -path '/proc' \
    -o -path '/media' \
    -o -path '/mnt/data/home/claude/sources' \) \
    -prune -or -type f -iname '*.otf' -or -iname '*.ttf' \
    -exec sha512sum {} \; | sort >liste-police-de-caracteres.txt
    

    Pour examiner le résultat, qui sera assez long à produire, je vous conseille de mettre le résultat dans un fichier (ici liste-police-de-caracteres.txt).

    Les fichiers ayant le même code ont le même contenu.

    function show_duplicates {
      local -r file="$1"
    
      local last_key=
      local last_tail=
      local first_match='true'
    
      sort -t, -k1,1 "${file}" | while IFS=' ' read key tail ; do
        if [ "${key}" = "${last_key}" ] ; then
          if [ "${first_match}" = 'true' ] ; then
            echo "${last_key} ${last_tail}"
            first_match='false'
          fi
          echo "${key} ${tail}"
        else
          first_match='true'
        fi
        last_key="${key}"
        last_tail="${tail}"
      done
    }
    
    show_duplicates 'liste-police-de-caracteres.txt' >'liste-police-de-caracteres-en-double.txt'
    

    Une solution basée sur le format JSON me semble plus exploitable, mais je laisse le code intermédiaire à des fins de documentation.

    function show_duplicates_json {
      local -r file="$1"
    
      local last_key=
      local last_tail=
      local first_match='true'
      local json='{}'
    
      while IFS=' ' read key tail ; do
        if [ "${key}" = "${last_key}" ] ; then
          if [ "${first_match}" = 'true' ] ; then
            echo "${last_key} ${last_tail}" >&2
            json="$( jq -c --arg file "${last_tail}" ".[\"$last_key\"] |= .+ [ \$file ]" <<<"${json}" )"
            first_match='false'
          fi
          echo "${key} ${tail}" >&2
          json="$( jq -c --arg file "${tail}" ".[\"$key\"] |= .+ [ \$file ]" <<<"${json}" )"
        else
          first_match='true'
        fi
        last_key="${key}"
        last_tail="${tail}"
      done < <( sort -t, -k1,1 "${file}" )
    
      jq . <<<"${json}"
    }
    
    show_duplicates_json 'liste-police-de-caracteres.txt' >'liste-police-de-caracteres-en-double.json'
    

    Le contenu de ce fichier risque de vous faire peur. Vous constaterez qu'il y a beaucoup de polices de caractères en double sur machine…



Références

ᦿ


ℹ 2006 - 2021 | 🏠 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog