Migliorare l'aspetto dei font

Versione del 28 lug 2014 alle 17:58 di BubuXP (discussione | contributi) (→‎Jessie: correzione percorso errato)
Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Molti nuovi utenti di Debian, subito dopo l'installazione, si lamentano del brutto aspetto che hanno i caratteri (mentre alcuni invece piacciono, de gustibus). Il problema risiede principalmente nella configurazione predefinita di Debian, che non imposta il rendering dei caratteri adeguatamente.

Ci sono vari modi e tanti parametri per migliorare il rendering, di seguito si farà una carrellata quanto più esplicativa possibile (spero). Ulteriori approfondimenti sull'argomento si possono leggere nell'ultimo capitolo "Riferimenti". Se invece non vi interessano i particolari dettagliati e volete prendere la strada più breve allora leggete quest'altra guida.

Prima di cominciare bisognerebbe controllare che siano installati i pacchetti responsabili della gestione dei font, e cioè fontconfig, libfreetype6, libcairo2 e libxft2, ma è un controllo superfluo, dato che questi pacchetti sono dipendenze di tutti i principali ambienti desktop (senza un interfaccia grafica ci sarebbero solo caratteri bitmap, e in tal caso questa guida potrebbe essere utile solo per il paragrafo che riguarda la console Linux).

Volendo fare una similitudine, FreeType è come la "mano" che disegna i caratteri sullo schermo, mentre Cairo è la "matita" usata da FreeType per disegnare. Fontconfig gestisce, configura e personalizza i caratteri, e infine Xft è un componente del server grafico X che usa e "coordina" FreeType e Fontconfig (in quanto questi ultimi sono pensati per essere universali e non dipendenti da X).

Fontconfig

Tra le varie funzioni di Fontconfig c'è anche quella di indicare a FreeType come disegnare i caratteri. Ad esempio può essere configurato per usare l'antialiasing su tutti i font tranne che su quelli di lingua orientale, oppure può disabilitare l'hinting su un determinato font quando questo è di dimensioni inferiori a 8 punti.

La configurazione di Fontconfig si trova in /etc/fonts/conf.d/ ed è composta da tanti file, ognuno con una sua funzione specifica, intuibile dal nome stesso del file. In realtà tutti i file di configurazione si trovano in /etc/fonts/conf.avail/ nota e vengono creati (o rimossi) dei link simbolici in /etc/fonts/conf.d/ in base alla caratteristica che si vuole abilitare (o disabilitare).
Ad esempio se si esegue

# dpkg-reconfigure fontconfig-config

in base alle risposte date nella procedura guidata verranno creati dei link in conf.d/
Però si sconsiglia di cambiare la configurazione in questo modo perché in conf.avail/ non sono presenti tutte le opzioni che è possibile usare per migliorare l'aspetto del font (per esempio, grossa mancanza, non c'è il file per attivare l'antialiasing). Invece di creare i file mancanti in conf.avail/ per poi linkarli in conf.d/ diventa molto più pratico ricorrere ad un altro metodo, illustrato di seguito.

Dopo aver letto la configurazione in conf.d/, Fontconfig cerca altre configurazioni nel file /etc/fonts/local.conf e poi in ~/.fonts.conf nota. Entrambi i file servono proprio per personalizzare Fontconfig e non esistono inizialmente, a meno che non vengano creati dall'utente o da qualche software. Le impostazioni contenute in /etc/fonts/local.conf sono applicate a tutti gli utenti del sistema mentre quelle in ~/.fonts.conf nota, risiedendo nella home dell'utente sono applicate solo a quel singolo utente. La sintassi dei due file è identica (come quella dei file in conf.d/) e possono convivere insieme.
In caso un'opzione fosse presente in più file di configurazione, Fontconfig dovrebbe usare quest'ordine di lettura, dove la priorità spetta all'ultima configurazione letta:

  1. /etc/fonts/conf.d/
  2. /etc/fonts/local.conf
  3. ~/.fonts.conf nota
  4. impostazioni font degli ambienti desktop GTK (che usano Xft)

A seconda di come sono impostati i parametri all'interno delle configurazioni, ciò potrebbe rendere nulla la priorità dell'ordine di lettura. Per esempio usando mode="assign" per impostare un valore, questo rimarrà tale anche se ne verrà impostato uno diverso successivamente (ma alcune applicazioni potrebbero anche usare l'ultimo valore letto a prescindere*; per informazioni man fonts-conf).

Ecco il modello di configurazione da usare nel file /etc/fonts/local.conf:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
	<match target="pattern">

<!-- La rasterizzazione dei caratteri converte i dati vettoriali dei font
     in immagini bitmap, così da poter essere visualizzati sullo schermo.
     Il risultato può apparire frastagliato per via dell'aliasing.
     L'anti-aliasing aumenta il dettaglio visivo dei bordi dei caratteri. -->
		<edit mode="append" name="antialias">
			<bool>true</bool>
		</edit>

<!-- Abilitando l'opzione "hinting", le istruzioni di hinting TrueType
     incorporate nei font vengono interpretate dal Byte-Code Interpreter
     (BCI) di FreeType. Questa è la scelta migliore in caso di font
     contenenti buone istruzioni di hinting. -->
		<edit mode="append" name="hinting">
			<bool>true</bool>
		</edit>

<!-- Abilitando l'autohinter verranno ignorate le istruzioni di hinting
     contenute nei font ma verrà usato un algoritmo generico di hinting,
     che è quasi sempre peggiore delle istruzioni ma potrebbe migliorare
     la visualizzazione dei font che non hanno istruzioni incorporate.
     L'autohinter e il subpixel rendering non sono programmati per lavorare
     insieme e non devono essere abilitati contemporaneamente. -->
		<edit mode="append" name="autohint">
			<bool>false</bool>
		</edit>

<!-- L'hintstyle rappresenta quanto influenza avrà l'hinting sul risultato
     finale. Può essere impostato in "hintfull", "hintmedium", "hintslight"
     e "hintnone". Con autohint abilitato è consigliato "hintslight", mentre
     con autohint disabilitato (BCI) è consigliato "hintfull", ma è una
     scelta abbastanza soggettiva. -->
		<edit mode="append" name="hintstyle">
			<const>hintslight</const>
		</edit>

<!-- Il subpixel rendering riesce a triplicare efficacemente la risoluzione
     orizzontale o verticale dei font usando i subpixel del monitor.
     Fontconfig deve sapere che tipo di subpixel usa il vostro monitor per
     visualizzare correttamente i caratteri. Le possibili opzioni sono:
     "rgb", "bgr", "vrgb", "vbgr", "unknown" e "none". Moltissimi monitor
     odierni usano le specifiche "rgb" (Red-Green-Blue).
     Non abilitare contemporaneamente questa opzione e l'autohinter. -->
		<edit mode="append" name="rgba">
			<const>rgb</const>
		</edit>

<!-- Quando si usa il subpixel rendering bisognerebbe abilitare il filtro
     LCD, che serve ad ridurre i bordi colorati dei font. Il filtro
     "lcddefault" è quello più comune; "lcdlight" è un filtro leggero ideale
     per i font che sembrano troppo spessi o tenui; "lcdlegacy" è il filtro
     originale di Cairo; "lcdnone" disabilita il filtro. -->
		<edit mode="append" name="lcdfilter">
			<const>lcddefault</const>
		</edit>

<!-- Fontconfig dovrebbe prendere il valore DPI da Xorg. Per controllare
     il valore di Xorg usare il comando 'xdpyinfo | grep resolution'
     Per impostare manualmente il DPI disabilitare i tag-commento sotto -->
<!--
		<edit mode="append" name="dpi">
			<double>96</double>
		</edit>
-->

<!-- Alcuni font incorporano una versione bitmap che potrebbe essere usata
     al posto della vettoriale, specie alle dimensioni più piccole. Con
     questa opzione si disattiva l'utilizzo di questi caratteri bitmap. -->
		<edit mode="append" name="embeddedbitmap">
			<bool>false</bool>
		</edit>

	</match>

<!-- Rifiuta l'uso di font bitmap, Fontconfig userà solo font vettoriali
     tipo TrueType, OpenType, Postscript, ecc. -->
	<selectfont><rejectfont><pattern>
		<patelt name="scalable"><bool>false</bool></patelt>
	</pattern></rejectfont></selectfont>

<!-- I font predefiniti "Serif", "Sans-Serif" e "Monospace" sono in realtà
     degli alias a dei font predefiniti, e possono essere cambiati usando la
     sostituzione font. Con lo stesso metodo si possono anche creare degli
     alias per altri font, l'importante è non dare un nome all'alias che sia
     uguale al nome di un font già presente nel sistema. Per esempio se non è
     installato Arial si può creare un alias con un suo font simile come FreeSans.
     Per personalizzare gli alias togliere i tag-commento sotto -->
<!--
	<alias>
		<family>serif</family>
		<prefer><family>DejaVu Serif</family></prefer>
	</alias>
	<alias>
		<family>sans-serif</family>
		<prefer><family>DejaVu Sans</family></prefer>
	</alias>
	<alias>
		<family>monospace</family>
		<prefer><family>DejaVu Sans Mono</family></prefer>
	</alias>

	<alias>
		<family>Arial</family>
		<prefer><family>FreeSans</family></prefer>
	</alias>
-->

</fontconfig>

Se si usa il modello sopra per creare ~/.fonts.conf nota bisogna sostituire tutti i mode="append" presenti con mode="assign" (quasi indispensabile per far convivere entrambe le configurazioni senza problemi di priorità). Per creare il file basta usare il proprio editor preferito (es. nano). Per la configurazione di sistema:

# nano /etc/fonts/local.conf

oppure per il singolo utente:

$ nano ~/.fonts.conf

poi incollare il modello sopra, eventualmente modificarlo e salvare il file.
Dopo rigeneriamo la cache dei font con:

# fc-cache -fv
$ fc-cache -fv

e infine riavviamo X facendo logout e login (oppure riavviando tutto il sistema) per abilitare il nuovo aspetto dei caratteri.

La configurazione sopra riportata è una configurazione "standard" che cerca di fornire il miglior risultato possibile sulla maggior parte dei sistemi. Però ci sono tanti fattori da considerare se i font elaborati con questa configurazione non sono ancora soddisfacenti. Potrebbe essere ad esempio per via del monitor che usa uno schema subpixel BGR (ma sono rari), differente dal comune RGB sul quale si basano le impostazioni predefinite; a volte è invece solo una questione di gusto personale.

Spesso i font hanno istruzioni di hinting codificate al loro interno e mentre alcuni possono dare un buon risultato con l'hinting "Slight", altri appariranno meglio con hinting "None", oppure con quello "Full". In ogni caso basta modificare i parametri nei file .conf aiutandosi con i commenti inclusi nel codice o con la documentazione (online e offline) per ottenere il risultato su schermo migliore per i vostri occhi.

C'è da considerare anche che l'ambiente desktop in uso può cambiare questi parametri, modificando direttamente il file ~/.fonts.conf (KDE) o passando direttamente a Xft i propri valori di hinting con una priorità maggiore (GNOME, Xfce, LXDE).

  • In GNOME 3 le impostazioni predefinite sono "Hinting: Full" e "Antialiasing: Greyscale" (cioè utilizza l'autohint al posto del subpixel hinting). Dato che GNOME sovrascrive le impostazioni di sistema con le sue, è meglio installare il pacchetto gnome-tweak-tool, lanciare l'omonima utility e cambiare questi valori con quelli usati in /etc/fonts/local.conf o in ~/.fonts.conf nota.
  • In Xfce e LXDE non ci dovrebbero essere conflitti con la configurazione di Fontconfig se l'utente non modifica le impostazioni dell'ambiente desktop, altrimenti vale lo stesso discorso di GNOME 3 (eccetto che questi ambienti già forniscono il pannello di configurazione dei font).
  • KDE invece utilizza solo Fontconfig, precisamente memorizza le opzioni dell'utente in ~/.fonts.conf nota, rispettando i nuovi standard. In realtà anche KDE imposta i valori Xft ma gli servono solo per la compatibilità con alcune applicazioni (tipo quelle in GTK). Un bug di KDE imposta sempre e comunque dei parametri di hinting predefiniti in ~/.fonts.conf nota anche se l'utente sceglie di mantenere quelli di sistema; l'unica soluzione è scegliere di personalizzare i parametri.

Alla fine del tuning potrete testare la vostra configurazione corrente in questa pagina.

Ubuntu

Molti utenti che passano da Ubuntu a Debian o che li usano entrambi si lamentano dell'aspetto dei caratteri "out of the box", nettamente migliore su Ubuntu.

Prima di Debian 7 "Wheezy" la differenza tra i due sistemi era più marcata, perché Ubuntu applicava delle patch a Cairo e FreeType per migliorare la resa su schermo e se si voleva lo stesso risultato in Debian bisognava ricompilare i pacchetti interessati aggiungendo le patch.

A partire da Wheezy queste patch sono presenti anche in Debian (perché adottate in upstream) e l'unica differenza rimasta tra Debian e Ubuntu adesso è la configurazione iniziale di Fontconfig. Su Ubuntu questa configurazione è ottenuta sempre con delle patch nel codice di Fontconfig, ma per fortuna non è necessario ricompilare nulla in questo caso, basta solo applicare la stessa configurazione di Ubuntu con local.conf per avere risultati identici.

La configurazione-modello esposta nel paragrafo precedente è già uguale a quella di Ubuntu, quindi basta usarla senza modifiche se si vuole lo stesso risultato. Se si riscontrano delle piccole differenze nel rendering tra le due distribuzioni, ciò sarà dovuto alle differenti versioni delle librerie Fontconfig, FreeType e Cairo (o dei font).

Per completare l'opera di "Ubuntizzazione" si può installare il font predefinito di Ubuntu, che è possibile scaricare da qui già pacchettizzato per Debian, e per installarlo basta un:

# dpkg -i fonts-ubuntu_0.80-6.2_all.deb

Jessie

A partire dalla versione 2.10 di Fontconfig (presente da Debian 8 "Jessie" in poi) cambierà la posizione di alcuni file di configurazione, anche se sarà mantenuta la compatibilità con i vecchi percorsi ancora per qualche versione. Ecco una tabella dei cambiamenti:

Vecchio percorso Nuovo percorso
Directory di configurazione utente ~/.fonts.conf.d/ ~/.config/fontconfig/conf.d/
File di configurazione utente ~/.fonts.conf ~/.config/fontconfig/fonts.conf
Directory caratteri utente ~/.fonts/ ~/.local/share/fonts/
Cache caratteri utente ~/.fontconfig/ ~/.cache/fontconfig/
Configurazioni sistema disponibili /etc/fonts/conf.avail/ /usr/share/fontconfig/conf.avail/

Xft

"X FreeType interface library" come dice il nome stesso, è una libreria che serve ad interfacciare il rasterizzatore FreeType con X (precisamente con XRender).
Generalmente sono gli ambienti desktop ad impostare i parametri Xft a seconda delle scelte dell'utente (per verificare ciò si può usare il comando xrdb -query | grep Xft prima e dopo aver cambiato delle opzioni nell'ambiente desktop). Se l'ambiente desktop non dovesse impostare questi valori, Xft comunque dovrebbe assumere le impostazioni di Fontconfig, quindi non ci dovrebbe essere alcuna necessità di intervenire direttamente su Xft, tranne se qualche applicazione mostrasse un rendering diverso.
In caso ci sia necessità di impostare manualmente i parametri di Xft è consigliabile usare gli stessi valori presenti in ~/.fonts.conf o /etc/fonts/local.conf per evitare conflitti.
Creiamo o modifichiamo il file .Xresources nella nostra home con:

$ nano ~/.Xresources
  Suggerimento
Se invece del file ~/.Xresources si inseriscono queste opzioni in /etc/X11/Xresources/x11-common i cambiamenti saranno applicati a tutto il sistema e non ad un solo utente


Poi aggiungiamo il codice seguente:

! You can define basic font resources without the need of a fonts.conf file
! or a desktop environment. Note however, the use of a desktop environment
! and/or fonts.conf can override these settings.
! Your best option is to use one or the other, but not both.

Xft.antialias: 1
Xft.hinting: 1
Xft.autohint: 0
Xft.hintstyle: hintslight
Xft.rgba: rgb
Xft.lcdfilter: lcddefault


! Fontconfig will default to the Xft.dpi variable if it is set.
! Xft.dpi is usually set by desktop environments (usually to Xorg's DPI
! setting). Use "xrdb -query | grep dpi" to query for the value.

! Xft.dpi: 96

Salviamo il file e riavviamo X facendo logout e login.

  Nota
Se usate Infinality lo script di avvio /etc/X11/Xsession.d/99infinality-settings già si occupa di impostare questi parametri, quindi non è necessario specificarli altrove; è invece possibile modificare lo script se si vuole cambiarli.


Iceweasel

Stranamente Iceweasel usa XRender invece di qualcosa di più recente come OpenGL per disegnare i caratteri, e a volte questo potrebbe causare vari problemi di visualizzazione, come tearing e caratteri che sembrano in grassetto.
Per dire ad Iceweasel di non usare più XRender basta aprire la pagina di configurazione all'indirizzo about:config e impostare con un doppio clic il valore di gfx.xrender.enabled su false e di layers.acceleration.force-enabled su true e riavviare il browser per applicare le modifiche.
Da notare che ciò risolve il problema di visualizzazione dei caratteri, ma potrebbe far sorgere altri problemi, come ad esempio strani comportamenti di Adobe Flash Player (se presente).

Infinality

Infinality è una combinazione di patch e configurazioni che puntano, come scrive l'autore sul suo sito, a migliorare la resa dei font imitando quelle dei vari sistemi operativi, e di permettere all'utente di personalizzare al meglio le impostazioni.

Allo stato attuale, Infinality consiste in un set di patch da applicare al motore di rendering dei font FreeType per cambiarne alcuni comportamenti, e di un sistema di configurazione che si integra con Fontconfig e ne diventa quasi un'alternativa di fatto. Tra le varie configurazioni è degno di nota un "database" con un gran numero di font e le opzioni di rendering migliore per ognuno di essi (per esempio abilita l'autohint per i font senza istruzioni di hinting).

Alcuni utenti che hanno provato Infinality non ne sono rimasti colpiti, altri hanno espresso un'opinione negativa. Probabilmente avranno giudicato senza provare le varie configurazioni predefinite messe a disposizione, oppure non hanno installato i font tipici dei sistemi operativi che vuole imitare Infinality, che è un requisito importante.

Installazione

  Nota
Al momento è possibile installare Infinality solo su Debian Wheezy. Il creatore del progetto (conosciuto proprio come Infinality) non lo aggiorna da più di un anno, e attualmente sembra abbandonato da parte sua. L'utente bohoomil sembra stia portando avanti il progetto autonomamente. Comunque a detta di molti, il rendering di FreeType è ormai ottimo anche senza bisogno di questa patch, basta una buona configurazione.


Prima di installare Infinality è meglio fare pulizia di configurazioni ridondanti (che probabilmente Infinality riesce a bypassare, ma meglio esserne sicuri). Innanzitutto spostare in una directory di backup o eliminare i file /etc/fonts/local.conf e ~/.fonts.conf nota, poi rimuovere o spostare le impostazioni di hinting (1*.conf) da /etc/fonts/conf.d/ con:

# mv /etc/fonts/conf.d/1*.conf directoryBackup/

così dovremmo essere tornati alla configurazione iniziale di Debian.

Adesso si può aggiornare libfreetype6 con la versione patchata e poi installare la configurazione di Infinality, contenuta in fontconfig-infinality:

Gli altri pacchetti, il codice sorgente e i log di compilazione sono disponibili qui.
Se avete abilitato multiarch, quasi sicuramente avrete già installato entrambe le versioni i386 e amd64 di libfreetype6 e quindi dovrete aggiornarle entrambe. Per installare il tutto basta mettere i pacchetti in una nuova cartella vuota e dare un:

# dpkg -i ~/Scaricati/nuovacartella/*.deb

Dopo l'installazione cambiate configurazione con il comando:

# /etc/fonts/infinality/infctl.sh setstyle

che permette di scegliere tra vari preset che imitano il font hinting di altri sistemi operativi. Dovrete inoltre impostare lo stile preferito nel file /etc/X11/Xsession.d/99infinality-settings (riga 712, nella variabile USE_STYLE) e infine riavviare. Per ottenere i risultati migliori è meglio installare i font tipici del sistema operativo prescelto, ed anche selezionare dalle impostazioni dei font del vostro ambiente desktop l'antialiasing RGB e l'hinting Full.
È possibile creare anche altri preset e modificare altri parametri, ma per farlo rimando alla lettura del file /etc/fonts/infinality/README e dei file di configurazione /etc/fonts/infinality/infinality.conf e /etc/X11/Xsession.d/99infinality-settings.

Per rimuovere Infinality e ripristinare lo status quo:

# dpkg --purge --force-depends libfreetype6 fontconfig-infinality
# apt-get install libfreetype6

o in caso di multiarch:

# dpkg --purge --force-depends libfreetype6:i386 libfreetype6:amd64 fontconfig-infinality
# apt-get install libfreetype6:i386 libfreetype6:amd64

poi ripristinare eventuali backup pre-Infinality e riavviare.

DPI

Se i caratteri a schermo sono troppo piccoli (o troppo grandi) perché il monitor ha una risoluzione elevata (o bassa), si può cambiare il valore del DPI specificando quello reale dello schermo (che sarebbe più corretto chiamare PPI).
Impostare il corretto DPI è necessario quando è richiesta una grande cura dei dettagli, come nel font rendering, ma anche in altri casi (software di grafica, di impaginazione, ecc.).
In Debian e in tutte le distribuzioni Linux con Xorg, sono presenti due DPI: quello usato da Xorg e quello usato da Xft/Fontconfig.

DPI di Xorg

Xorg ricava il suo valore dall'EDID del monitor ma se non si discosta molto dallo standard (non ufficiale) dei 96 DPI, usa tale valore. Potete controllare il valore attualmente impostato con il comando:

$ xdpyinfo | grep -B2 resolution

Impostare il giusto valore DPI su Xorg è importante per avere una corrispondenza più realistica possibile delle dimensioni su schermo con quelle reali.
Il valore del DPI reale di uno schermo è ottenibile dal rapporto della sua diagonale in pixel con quella in pollici. La diagonale in pollici è il classico valore che identifica la grandezza dello schermo (ad es. un monitor da 22", una tv da 42", ecc.), mentre per calcolare la diagonale in pixel bisogna applicare il teorema di Pitagora sulla risoluzione nativa dello schermo (ad es. 1366x768, 1920x1080, ecc.). Per facilitare il calcolo esistono delle calcolatrici online come questa e questa. A volte la misura in pollici dello schermo è minore (raramente maggiore) di quella dichiarata: tenetene conto quando fate il calcolo (per sicurezza potete misurare le dimensioni effettive e convertirle in pollici).
Ottenuto un valore DPI (ad es. 102.46), bisogna impostarlo su Xorg con il comando

$ xrandr --dpi 102.46

ma questo sarà resettato al vecchio valore dopo un riavvio di X. Per fare eseguire quel comando automaticamente ad ogni avvio di X:

# cat > /etc/X11/Xsession.d/96setdpi <<EOF
xrandr --dpi 102.46
EOF

ovviamente cambiate il 102.46 sopra con il vostro DPI. Questo è il metodo più veloce ma se volete approfondire ci sono altri modi per impostare il DPI su Xorg, leggete ad esempio qui. Una volta impostato il DPI, potete verificare se è tutto ok aprendo un qualsiasi file pdf in formato A4 (come questo), mettendo lo zoom al 100% e sovrapponendo sul foglio a schermo un foglio di carta A4: se le dimensioni sono uguali o quasi il calcolo e la configurazione sono andati a buon fine.

  Nota
Testando KDE, sembrerebbe che questo ambiente desktop rilevi automaticamente il DPI esatto dello schermo, in quanto il test del foglio A4 viene superato senza l'uso della procedura sopra, utilizzando il visualizzatore di documenti predefinito. Provando ad installare ed usare evince (il visualizzatore predefinito di Gnome) questo non sembra beneficiare della rilevazione automatica, rendendo necessario l'utilizzo della procedura sopra per una visualizzazione in scala 1:1. Probabilmente è una questione di toolkit: Qt da questo punto di vista sembra superiore a GTK.


DPI di Xft / Fontconfig

Questo DPI, rappresentato dalla variabile Xft.dpi, serve praticamente solo per impostare la grandezza dei caratteri e di altri elementi grafici su schermo. Fontconfig usa il valore di Xft.dpi il quale, se non è stato impostato manualmente o dall'ambiente desktop, è uguale al DPI di Xorg.
Per controllare l'attuale valore di Xft.dpi (e di altre variabili Xft impostate) usate il comando

$ xrdb -query

Se il valore Xft.dpi non è presente, è implicito che è uguale a quello di Xorg. Per evitare possibili distorsioni dell'interfaccia grafica (tipo immagini bitmap che scalano male) è consigliabile impostare questo DPI sui dei valori "standard":

  • 48 (50%)
  • 72 (75%)
  • 96 (100%)
  • 120 (125%)
  • 144 (150%)
  • 168 (175%)
  • 192 (200%)

ma si può comunque usare un valore qualsiasi. Da notare che alcuni elementi delle interfacce grafiche potrebbero non scendere sotto i 96 DPI.
Generalmente è meglio impostare questo DPI tramite gli strumenti di configurazione messi a disposizione dall'ambiente desktop, perché tanto questo andrebbe a sovrascrivere o ad interferire con i settaggi inseriti manualmente.

  • GNOME 3 imposta automaticamente Xft.dpi a 96. Per cambiare questo valore bisogna installare gnome-tweak-tool e poi andare nel menù "Preferenze" > "Impostazioni avanzate" > "Tipi di carattere" > "Text scaling factor" e impostare il proprio valore, considerando che quello predefinito "1,0" corrisponde a 96 DPI (quindi 1,25 = 120 DPI, e così via).
  • Xfce non imposta automaticamente il DPI, ma per farlo manualmente andare in "Impostazioni" > "Aspetto" > "Caratteri".
  • LXDE si comporta come Xfce.
  • Anche KDE 4 non cambia il DPI se non facendolo manualmente da "Impostazioni di sistema" > "Aspetto delle applicazioni" > "Caratteri".

Se necessario, i valori del DPI possono anche essere impostati su /etc/fonts/local.conf e /etc/X11/Xresources/x11-common o nelle rispettive controparti per utente singolo ~/.fonts.conf e ~/.Xresources. Se per creare questi file avete usato le configurazioni-modello dei paragrafi precedenti, le sezioni dove inserire il DPI sono già presenti ma sono disattivate da un tag di commento: togliete quei tag per abilitare.

  Nota
Se usate Infinality, dovete impostate i valori del DPI nei file /etc/fonts/infinality/infinality.conf e /etc/X11/Xsession.d/99infinality-settings

Nei valori DPI con parte decimale (per esempio 102.46) si usa il punto e non la virgola. Riavviate per vedere il risultato e, se questo non è soddisfacente, rimettete tutto com'era per tornare al valori standard.

Installazione nuovi caratteri

Quando si vuole installare un nuovo carattere non presente nei repository di Debian, bisogna mettere il/i file del font in questione in determinate directory per essere utilizzabile.
La directory dove sono presenti tutti i font di sistema è /usr/share/fonts/ ma è preferibile non usare questa. I font vanno inseriti in ~/.fonts/ per poter essere usati dall'utente corrente, oppure in /usr/local/share/fonts/ per metterli a disposizione di tutti gli utenti del sistema.
È buona abitudine dopo l'installazione o la rimozione di font rigenerare la cache con:

# fc-cache -fv
$ fc-cache -fv

Facciamo un esempio: per usare i caratteri Ubuntu presenti nel sito ufficiale come archivio .zip, basta estrarli direttamente nella directory dei font dell'utente nota e aggiornare la cache dei font con:

$ unzip ubuntu-font-family-0.80.zip -d ~/.fonts/
$ fc-cache -fv

oppure, per renderli disponibili anche agli altri utenti estrarli nella cartella dei font locali con:

# unzip ubuntu-font-family-0.80.zip -d /usr/local/share/fonts/
# fc-cache -fv
$ fc-cache -fv

Se vi piacciono i font di Windows e questo è già installato sul vostro pc in dual boot, basta usare questo metodo per montare la partizione di sistema di Windows e copiare i font da \Windows\Fonts alle directory dei font di Debian (se non avete Windows potete sempre cercarli sul web, e comunque considerate che il FreeType di Linux è diverso dal ClearType di Windows e i caratteri potrebbero apparire diversi).
A chi interessa ecco alcuni dei caratteri usati nelle interfacce grafiche di vari sistemi operativi:
- Windows XP: Tahoma
- Windows 7 / 8: Segoe UI
- Mac OS X: Lucida Grande
- iOS: Helvetica Neue
- Android (< 4.0): famiglia di caratteri Droid (presente in Debian)
- Android: Roboto (presente in Debian Jessie)
- Ubuntu: la già citata famiglia di caratteri Ubuntu
- Gnome 3: Cantarell (presente in Debian)
- KDE: dovrebbe usare in futuro il font Oxygen
Sul web ci sono tanti siti con collezioni di font, come Google Web Fonts. Alcuni font pacchettizzati per Debian potete trovarli qui, mentre su Typetester potrete fare dei confronti tra caratteri.

Da notare che, come per i vari software, anche i caratteri hanno un numero di versione, perché possono essere revisionati per svariati motivi (come per l'aggiunta dei glifi di una lingua non latina, per migliorarne le istruzioni di hinting, per perfezionare il design, ecc.).

Console Linux

Si possono anche cambiare i font bitmap della console Linux (i font visibili quando X non è avviato, per esempio quando si avvia il sistema in modalità ripristino) per aumentare la leggibilità.

In breve, bisogna cambiare nel file /etc/default/console-setup il valore di FONTFACE= con il nome di un altro carattere e quello di FONTSIZE= con una grandezza del carattere, che varia in base al carattere scelto. Ecco i caratteri selezionabili e le possibili dimensioni per ciascuno:

  • VGA - dimensioni: 8x8, 8x14, 8x16, 16x28, 16x32
  • Terminus - dimensioni: 6x12, 8x14, 8x16, 10x20, 12x24, 14x28, 16x32
  • TerminusBold - dimensioni: 8x14, 8x16, 10x20, 12x24, 14x28, 16x32
  • TerminusBoldVGA - dimensioni: 8x14, 8x16
  • Fixed - dimensioni: 8x13, 8x14, 8x15, 8x16, 8x18

Un esempio:

FONTFACE="Terminus"
FONTSIZE="10x20"

Dopo aver salvato il file si può riavviare il sistema oppure se si è già nella console si può usare il comando /etc/init.d/console-setup restart

In alternativa è possibile usare una procedura guidata con:

# dpkg-reconfigure console-setup

Per maggiori dettagli: man console-setup

Riferimenti

Per approfondimenti sulla rasterizzazione consiglio la lettura di questo articolo, dettagliato ma comprensibile.
Invece quest'altro è più simile ad una tesi di laurea, con un approccio più scientifico.

Altre fonti di informazione:
http://wiki.debian.org/Fonts
https://wiki.archlinux.org/index.php/Font_Configuration
http://www.freedesktop.org/software/fontconfig/fontconfig-user.html
http://www.keithp.com/~keithp/render/Xft.tutorial
https://en.wikipedia.org/wiki/Pixels_per_inch
http://weirdfellow.wordpress.com/2010/07/25/valid-autohinting-hinting-style-options/
http://duganchen.ca/writings/slackware/fonts/
http://www.antigrain.com/research/font_rasterization/index.html
https://lists.ubuntu.com/archives/ubuntu-desktop/2008-December/001887.html
http://www.webupd8.org/2013/06/better-font-rendering-in-linux-with.html
https://en.wikipedia.org/wiki/Font_smoothing
https://en.wikipedia.org/wiki/Font_hinting
https://en.wikipedia.org/wiki/Cairo_(graphics)




Guida scritta da: Gash   Debianized 60%
Estesa da:
BubuXP 02:46, 21 mag 2013 (CEST) (riscrittura totale)
Danielsan
Verificata da:
BubuXP 02:46, 21 mag 2013 (CEST)
keltik 17:02, 21 giu 2013 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized