Migliorare l'aspetto dei font: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(Aggiunta sezione font console e modifiche minori)
Riga 76: Riga 76:
<!-- Fontconfig should be able to detect DPI parameters as discovered
<!-- Fontconfig should be able to detect DPI parameters as discovered
     by the Xorg server. You can check the automatically discovered DPI
     by the Xorg server. You can check the automatically discovered DPI
     with the command 'xdpyinfo | grep resolution' -->
     with the command 'xdpyinfo | grep resolution'
<!-- remove this line to activate customized DPI
    Uncomment the following to activate customized DPI -->
<!--
<edit mode="assign" name="dpi">
<edit mode="assign" name="dpi">
<double>96</double>
<double>96</double>
</edit>
</edit>
remove this line to activate customized DPI -->
-->


</match>
</match>
Riga 89: Riga 90:
     a specific font not installed on the system (e.g. Arial) with
     a specific font not installed on the system (e.g. Arial) with
     a [not necessarily] similar one (e.g. FreeSans) by adding
     a [not necessarily] similar one (e.g. FreeSans) by adding
     another alias like these. -->
     another alias like these.
<!-- remove this line to activate font substitution
    Uncomment the following to activate font substitution -->
<!--
<alias>
<alias>
<family>serif</family>
<family>serif</family>
Riga 116: Riga 118:
<prefer><family>FreeSans</family></prefer>
<prefer><family>FreeSans</family></prefer>
</alias>
</alias>
remove this line to activate font substitution -->
-->


<!-- Reject bitmap fonts in favour of Truetype, Postscript, etc. -->
<!-- Reject bitmap fonts in favour of Truetype, Postscript, etc. -->
Riga 134: Riga 136:
e infine riavviamo X facendo logout e login oppure riavviando il sistema.<br>
e infine riavviamo X facendo logout e login oppure riavviando il sistema.<br>
La configurazione sopra riportata è una configurazione "standard" che cerca di fornire il miglior risultato possibile sulla maggior parte dei sistemi.
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 vi soddisfano ancora. Potrebbe essere colpa del monitor che ad esempio usa uno schema di subpixel differente dallo standard RGB, o semplicemente è una questione di gusto personale. Spesso i font hanno istruzioni di hinting codificati al loro interno e mentre alcuni possono dare un buon risultato con l'hinting "Slight", altri appariranno meglio con hinting "None" o "Full". In ogni caso basta modificare i parametri nel file <code>.conf</code> aiutandosi con le descrizioni fornite nelle parti commentate per ottenere il risultato su schermo migliore per i vostri occhi.<br>
Però ci sono tanti fattori da considerare se i font elaborati con questa configurazione non vi soddisfano ancora. Potrebbe essere colpa del monitor che ad esempio usa uno schema di subpixel differente dallo standard RGB o semplicemente è una questione di gusto personale. Spesso i font hanno istruzioni di hinting codificati al loro interno e mentre alcuni possono dare un buon risultato con l'hinting "Slight", altri appariranno meglio con hinting "None" o "Full". In ogni caso basta modificare i parametri nel file <code>.conf</code> aiutandosi con le descrizioni fornite nelle parti commentate per ottenere il risultato su schermo migliore per i vostri occhi.<br>
C'è da considerare anche che l'ambiente desktop in uso può cambiare questi parametri, non modificando il nostro file .conf direttamente ma passando a Xft e/o fontconfig i propri valori di hinting con una priorità maggiore. Per esempio su Gnome3 le impostazioni predefinite (modificabili tramite ''gnome-tweak-tool'') sono "Hinting: Full" e "Antialiasing: Greyscale". Per evitare discrepanze e conflitti è meglio cambiare questi valori con quelli usati nei file <code>.conf</code> (che se non modificati sono "Hinting: Slight" e "Antialiasing: Rgba").<br>
C'è da considerare anche che l'ambiente desktop in uso può cambiare questi parametri, non modificando il nostro file <code>.conf</code> direttamente ma passando a Xft e/o fontconfig i propri valori di hinting con una priorità maggiore. Per esempio su Gnome3 le impostazioni predefinite (modificabili tramite ''gnome-tweak-tool'') sono "Hinting: Full" e "Antialiasing: Greyscale". Per evitare discrepanze e conflitti è meglio cambiare questi valori con quelli usati nei file <code>.conf</code>.<br>
Ogni desktop environment che si rispetti ha una sezione dove poter impostare molti dei parametri di fontconfig e per alcuni potrebbero essere sufficienti per avere un buon risultato, ma per un controllo più fine il ricorso al file <code>.conf</code> è necessario. Ad esempio alcuni caratteri risultano più leggibili senza hinting sotto una certa dimensione, o possono avere dei piccoli difetti con le impostazioni di hinting correnti che però vanno bene con gli altri font. Ciò è correggibile aggiungendo una sezione simile a questa nel nostro file .conf:
Ogni desktop environment che si rispetti ha una sezione dove poter impostare i parametri base di fontconfig e per alcuni potrebbero essere sufficienti per avere un buon risultato, ma per un controllo più fine il ricorso al file <code>.conf</code> è necessario. Ad esempio alcuni caratteri risultano più leggibili senza hinting sotto una certa dimensione. Ciò è correggibile aggiungendo una sezione simile a questa nel nostro file .conf:
<pre>
<pre>
<match target="font">
<match target="font">
Riga 150: Riga 152:
</match>
</match>
</pre>
</pre>
Questa ad esempio in caso di carattere "DejaVu Sans Mono" con una dimensione inferiore ai 7.5 punti, deve disabilitare l'hinting.<br>
Questa ad esempio in caso di carattere "DejaVu Sans Mono" con una dimensione inferiore ai 7.5 punti, deve disabilitare l'hinting. Si possono fare tante altre cose simili con fontconfig, come specificare un hinting diverso da quello generale per font con istruzioni di hinting scarse; per approfondimenti leggete la documentazione di fontconfig (e visionate anche i file di configurazione di [[Migliorare l'aspetto dei font#Infinality | fontconfig-infinality]] come applicazione pratica di ciò).<br>
Alla fine del tuning potrete testare la vostra configurazione corrente [http://www.infinality.net/files/font.html in questa pagina].
Alla fine del tuning potrete testare la vostra configurazione corrente [http://www.infinality.net/files/font.html in questa pagina].
{{Box|Nota|Dalla versione 2.10 di fontconfig (non ancora disponibile in Debian Jessie al momento della scrittura di questa pagina) il file <code>~/.fonts.conf</code> cambierà percorso, diventando <code>~/.config/fontconfig/fonts.conf</code> (anche se probabilmente sarà mantenuta la compatibilità con il vecchio percorso, salvo cambiamenti da parte della [http://pkg-fonts.alioth.debian.org/ Debian Fonts Task Force]).}}
{{Box|Nota|Dalla versione 2.10 di fontconfig (non ancora disponibile in Debian Jessie al momento della scrittura di questa pagina) il file <code>~/.fonts.conf</code> cambierà percorso, diventando <code>~/.config/fontconfig/fonts.conf</code> (anche se probabilmente sarà mantenuta la compatibilità con il vecchio percorso, salvo cambiamenti da parte della [http://pkg-fonts.alioth.debian.org/ Debian Fonts Task Force]).}}
Riga 165: Riga 167:
# <code>/etc/fonts/conf.d/</code>
# <code>/etc/fonts/conf.d/</code>
anche se molto dipende da come sono impostati i parametri all'interno delle configurazioni, che potrebbero cambiare le priorità. Per informazioni <code>man fonts-conf</code>.<br>
anche se molto dipende da come sono impostati i parametri all'interno delle configurazioni, che potrebbero cambiare le priorità. Per informazioni <code>man fonts-conf</code>.<br>
La configurazione predefinita del font rendering di Ubuntu è quasi uguale a quella illustrata sopra, eccetto per la mancanza dei valori di ''autohint'' (che quindi dovrebbe essere considerato ''false'') e di ''rgba'' (che quindi dovrebbe essere considerato ''none'').<br>
La configurazione predefinita del font rendering di Ubuntu è quasi uguale a quella illustrata sopra, ma se trovate delle differenze di resa su schermo è possibile che sia per via di apposite patch che Ubuntu applica sui pacchetti adibiti al rendering e che Debian non ha [ancora] introdotto.<br>
Se dopo aver allineato le configurazioni trovate ancora delle differenze di resa su schermo è possibile che sia per via di apposite patch che Ubuntu applica sui pacchetti adibiti al rendering e che Debian non ha [ancora] introdotto.<br>
Ma può anche essere merito del font predefinito di Ubuntu, che è possibile scaricare dai [http://it.archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-font-family-sources/ttf-ubuntu-font-family_0.80-0ubuntu5_all.deb repository ufficiali di Ubuntu] e per installarlo basta un:
Ma può anche essere merito del font predefinito di Ubuntu, che è possibile scaricare dai [http://it.archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-font-family-sources/ttf-ubuntu-font-family_0.80-0ubuntu5_all.deb repository ufficiali di Ubuntu] e per installarlo basta un:
<pre># dpkg -i ttf-ubuntu-font-family_0.80-0ubuntu5_all.deb</pre>
<pre># dpkg -i ttf-ubuntu-font-family_0.80-0ubuntu5_all.deb</pre>
{{Warningbox|Se volete proprio avere lo stesso font hinting di Ubuntu, potete fare una pazzia e aggiornare questi pacchetti prendendo le versioni dei repository Ubuntu: '''libfreetype6 libfontconfig1 fontconfig fontconfig-config''' ma è altamente sconsigliabile e la responsabilità per eventuali problemi sarà solo vostra. Se proprio volete qualcosa di "particolare", leggete il prossimo paragrafo.}}
{{Warningbox|Se volete proprio avere lo stesso font hinting di Ubuntu, a vostro rischio potete aggiornare questi pacchetti prendendo le versioni dei repository Ubuntu: '''libfreetype6 libfontconfig1 fontconfig fontconfig-config''' ma è altamente sconsigliabile e la responsabilità per eventuali problemi sarà solo vostra.}}


=== Infinality ===
=== Infinality ===
Infinality è un insieme di patch e configurazioni che puntano al massimo rendimento dei caratteri. Come scrive l'autore [http://www.infinality.net/blog/infinality-freetype-patches/ sul suo sito], l'obiettivo primario è fornire la migliore resa dei font dei vari sistemi operativi, mentre quello secondario è di permettere all'utente di personalizzare al meglio le impostazioni.<br>
Infinality è un insieme di patch e configurazioni che puntano al massimo rendimento dei caratteri. Come scrive l'autore [http://www.infinality.net/blog/infinality-freetype-patches/ sul suo sito], l'obiettivo primario è migliorare la resa dei font imitando quelle dei vari sistemi operativi, mentre quello secondario è di permettere all'utente di personalizzare al meglio le impostazioni.<br>
Allo stato attuale, Infinality consiste in un set di patch da applicare al motore di rendering dei font <code>freetype</code> per cambiarne/migliorarne alcuni comportamenti, e di un sistema di configurazione che si integra con <code>fontconfig</code> e ne diventa 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 (ad esempio sui font senza istruzioni di hinting abilita l'autohint).
Allo stato attuale, Infinality consiste in un set di patch da applicare al motore di rendering dei font <code>freetype</code> per cambiarne/migliorarne alcuni comportamenti, e di un sistema di configurazione che si integra con <code>fontconfig</code> e ne diventa 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 noti per l'assenza di istruzioni di hinting).<br>
Prima di installare Infinality, meglio prima fare pulizia di configurazioni ridondanti (che probabilmente Infinality riesce a scavalcare o ignorare, ma meglio andare sul sicuro).
Prima di installare Infinality, meglio prima fare pulizia di configurazioni ridondanti (che probabilmente Infinality riesce a scavalcare o ignorare, ma meglio andare sul sicuro).
Innanzitutto eliminare o spostare in una directory di backup i file <code>/etc/fonts/local.conf</code> e <code>~/.fonts.conf</code>, considerati obsoleti da Infinality, poi rimuovere le impostazioni di hinting (che cominciano con 1) e quelle relative ai caratteri bitmap (che cominciano con 70) da <code>/etc/fonts/conf.d/</code> con:
Innanzitutto eliminare o spostare in una directory di backup i file <code>/etc/fonts/local.conf</code> e <code>~/.fonts.conf</code>, considerati obsoleti da Infinality, poi rimuovere le impostazioni di hinting (che cominciano con 1) e quelle relative ai caratteri bitmap (che cominciano con 70) da <code>/etc/fonts/conf.d/</code> con:
Riga 188: Riga 189:
Dopo l'installazione è meglio riavviare il pc prima di configurare Infinality. Già dopo il riavvio potrete notare dei miglioramenti evidenti, però se volete potete cambiare configurazione con il comando
Dopo l'installazione è meglio riavviare il pc prima di configurare Infinality. Già dopo il riavvio potrete notare dei miglioramenti evidenti, però se volete potete cambiare configurazione con il comando
<pre># /etc/fonts/infinality/infctl.sh setstyle</pre>
<pre># /etc/fonts/infinality/infctl.sh setstyle</pre>
che permette di scegliere tra vari preset che imitano fedelmente il font hinting dei più famosi sistemi operativi (ed è molto raccomandabile avere installati su Debian i font usati dal sistema operativo scelto per avere un risultato ancora migliore).<br>
che permette di scegliere tra vari preset che imitano il font hinting di altri sistemi operativi (ed è quasi indispensabile avere installati su Debian i font usati dal sistema operativo scelto per avere un buon risultato).<br>
È possibile aggiungere anche altri preset creati da noi e modificare altri parametri, ma per farlo rimando alla lettura del file <code>/etc/fonts/infinality/README</code> e dei file di configurazione <code>/etc/fonts/infinality/infinality.conf</code> e <code>/etc/X11/Xsession.d/99infinality-settings</code>.
È possibile aggiungere anche altri preset creati da noi e modificare altri parametri, ma per farlo rimando alla lettura del file <code>/etc/fonts/infinality/README</code> e dei file di configurazione <code>/etc/fonts/infinality/infinality.conf</code> e <code>/etc/X11/Xsession.d/99infinality-settings</code>.


Riga 207: Riga 208:


Se vi piacciono i font di Windows e questo è presente sul vostro pc in dual boot, basta usare questo metodo per montare la partizione di sistema di Windows e copiare i font prescelti da <code>\Windows\Fonts</code> alle directory dei font di Debian (se non avete Windows potete sempre cercarli sul web, e comunque considerate che il [http://en.wikipedia.org/wiki/FreeType FreeType] di Linux è pur sempre diverso dal [http://en.wikipedia.org/wiki/ClearType ClearType] di Windows).<br>
Se vi piacciono i font di Windows e questo è presente sul vostro pc in dual boot, basta usare questo metodo per montare la partizione di sistema di Windows e copiare i font prescelti da <code>\Windows\Fonts</code> alle directory dei font di Debian (se non avete Windows potete sempre cercarli sul web, e comunque considerate che il [http://en.wikipedia.org/wiki/FreeType FreeType] di Linux è pur sempre diverso dal [http://en.wikipedia.org/wiki/ClearType ClearType] di Windows).<br>
A chi interessa ecco i caratteri usati nelle interfacce grafiche di vari sistemi operativi:<br>
A chi interessa ecco alcuni dei caratteri usati nelle interfacce grafiche di vari sistemi operativi:<br>
- Windows XP: ''[http://www.microsoft.com/typography/fonts/family.aspx?FID=19 Tahoma]''<br>
- Windows XP: ''[http://www.microsoft.com/typography/fonts/family.aspx?FID=19 Tahoma]''<br>
- Windows 7 / 8: ''[http://www.microsoft.com/typography/fonts/family.aspx?FID=331 Segoe UI]''<br>
- Windows 7 / 8: ''[http://www.microsoft.com/typography/fonts/family.aspx?FID=331 Segoe UI]''<br>
Riga 291: Riga 292:
* Non so se '''KDE4''' sovrascrive come Gnome3, ma in ogni caso si può cambiare il valore predefinito da "KDE menu" > "Personal Settings" > "Application Appearance" > "Fonts" > "Force fonts DPI".<br>
* Non so se '''KDE4''' sovrascrive come Gnome3, ma in ogni caso si può cambiare il valore predefinito da "KDE menu" > "Personal Settings" > "Application Appearance" > "Fonts" > "Force fonts DPI".<br>
* '''LXDE''' non manomette il valore di Xft.dpi, lasciando quello impostato nei file di configurazione di fontconfig/Xft/Infinality.
* '''LXDE''' non manomette il valore di Xft.dpi, lasciando quello impostato nei file di configurazione di fontconfig/Xft/Infinality.
== 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à safe) per migliorare la leggibilità.
In breve, bisogna cambiare nel file <code>/etc/default/console-setup</code> i valori di '''FONTFACE=''' e '''FONTSIZE=''' con uno di questi:
* ''VGA'' (sizes 8x8, 8x14, 8x16, 16x28 and 16x32)
* ''Terminus'' (sizes 6x12, 8x14, 8x16, 10x20, 12x24, 14x28 and 16x32)
* ''TerminusBold'' (sizes  8x14, 8x16, 10x20, 12x24, 14x28 and 16x32)
* ''TerminusBoldVGA'' (sizes 8x14 and 8x16)
* ''Fixed'' (sizes 8x13, 8x14, 8x15, 8x16 and 8x18)
Un esempio:
<pre>FONTFACE="Terminus"
FONTSIZE="10x20"</pre>
Dopo aver salvato il file si può riavviare il sistema oppure se si è già nella console si può usare il comando <code>/etc/init.d/console-setup restart</code><br>
Per maggiori dettagli: <code>man console-setup</code>


== Riferimenti ==
== Riferimenti ==
Riga 304: Riga 321:
http://www.antigrain.com/research/font_rasterization/index.html<br>
http://www.antigrain.com/research/font_rasterization/index.html<br>
https://lists.ubuntu.com/archives/ubuntu-desktop/2008-December/001887.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





Versione delle 11:21, 10 giu 2013

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Generalmente Debian non ha attivo nessun tipo di font rendering e i caratteri spesso sono brutti da vedere.
Un primo miglioramento si può ottenere con il comando da root dpkg-reconfigure fontconfig-config e rispondendo alle tre domande poste. Però per un risultato migliore e più adattabile ai propri gusti è meglio seguire un'altra strada.


Configurazione fontconfig

Se assenti installiamo queste librerie:

# apt-get install libfreetype6 fontconfig libcairo2 libxft2

ma essendo usate da tutti i principali ambienti desktop è praticamente impossibile non averle (anche perché senza un desktop grafico ci sarebbero solo caratteri bitmap e questa guida non servirebbe a molto).
Fatto il controllo, si può creare il file .fonts.conf nella nostra home con:

$ nano ~/.fonts.conf

o con il proprio editor preferito (es. gedit, leafpad, ecc.).

Bulb.png Suggerimento
Se invece di salvare il file come ~/.fonts.conf lo si salva come /etc/fonts/local.conf i cambiamenti saranno applicati a tutti i profili utenti e non solo al proprio. La configurazione nella home dell'utente ha comunque la precedenza su quella generale.


Il codice da inserire nel file è il seguente:

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

<!-- Font rasterization converts vector font data to bitmap data so that it
     can be displayed. The result can appear jagged due to aliasing.
     Anti-aliasing increases the apparent resolution of font edges. -->
		<edit mode="append" name="antialias">
			<bool>true</bool>
		</edit>

<!-- Using normal hinting, TrueType hinting instructions in the font are
     interpreted by freetype's Byte-Code Interpreter. This works best for
     fonts with good hinting instructions. -->
		<edit mode="append" name="hinting">
			<bool>true</bool>
		</edit>

<!-- Auto-discovery for hinting. This looks worse than normal hinting for
     fonts with good instructions, but better for those with poor or no
     instructions. The autohinter and subpixel rendering are not designed
     to work together and should not be used in combination. -->
		<edit mode="append" name="autohint">
			<bool>false</bool>
		</edit>

<!-- Hint style is the amount of influence the hinting mode has. Hinting
     can be set to: "hintfull", "hintmedium", "hintslight" and "hintnone".
     With BCI hinting, "hintfull" should work best for most fonts.
     With the autohinter, "hintslight" is recommended. -->
		<edit mode="append" name="hintstyle">
			<const>hintslight</const>
		</edit>

<!-- Subpixel rendering effectively triples the horizontal (or vertical)
     resolution for fonts by making use of subpixels. The autohinter and
     subpixel rendering are not designed to work together and should not
     be used in combination. Most monitors manufactured today use the
     Red, Green, Blue (RGB) specification. Fontconfig will need to know
     your monitor type to be able to display your fonts correctly.
     Values are "rgb" (most common), "bgr", "vrgb" (vertical), "vbgr",
     "unknown" or "none". Ubuntu uses "none". -->
		<edit mode="append" name="rgba">
			<const>rgb</const>
		</edit>

<!-- When using subpixel rendering, you should enable the LCD filter,
     which is designed to reduce colour fringing. The "lcddefault" filter
     will work for most users. Other filters are available that can be
     used in special situations: "lcdlight"; a lighter filter ideal for
     fonts that look too bold or fuzzy; "lcdlegacy", the original Cairo
     filter; "lcdnone" to disable it entirely. -->
		<edit mode="append" name="lcdfilter">
			<const>lcddefault</const>
		</edit>

<!-- Fontconfig should be able to detect DPI parameters as discovered
     by the Xorg server. You can check the automatically discovered DPI
     with the command 'xdpyinfo | grep resolution'
     Uncomment the following to activate customized DPI -->
<!--
		<edit mode="assign" name="dpi">
			<double>96</double>
		</edit>
-->

	</match>

<!-- Use font substitution to set your preferred fonts the default
     serif, sans-serif and monospace fonts. You can also substitute
     a specific font not installed on the system (e.g. Arial) with
     a [not necessarily] similar one (e.g. FreeSans) by adding
     another alias like these.
     Uncomment the following to activate font substitution -->
<!--
	<alias>
		<family>serif</family>
		<prefer><family>Droid Serif</family></prefer>
	</alias>
	<alias>
		<family>sans-serif</family>
		<prefer><family>Droid Sans</family></prefer>
	</alias>
	<alias>
		<family>monospace</family>
		<prefer><family>Droid Sans Mono</family></prefer>
	</alias>
	<alias>
		<family>fantasy</family>
		<prefer><family>URW Gothic L</family></prefer>
	</alias>
	<alias>
		<family>cursive</family>
		<prefer><family>URW Chancery L</family></prefer>
	</alias>

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

<!-- Reject bitmap fonts in favour of Truetype, Postscript, etc. -->
	<selectfont><rejectfont><pattern><patelt name="scalable">
		<bool>false</bool>
	</patelt></pattern></rejectfont></selectfont>

</fontconfig>

Salviamo il file e facciamo pulizia di altre impostazioni presenti, specie se abbiamo usato il comando presente nell'Introduzione di questa guida:

# rm /etc/fonts/conf.d/1*
# rm /etc/fonts/conf.d/70*
# dpkg-reconfigure fontconfig

dopo rigeneriamo la cache dei font con:

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

e infine riavviamo X facendo logout e login oppure riavviando il sistema.
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 vi soddisfano ancora. Potrebbe essere colpa del monitor che ad esempio usa uno schema di subpixel differente dallo standard RGB o semplicemente è una questione di gusto personale. Spesso i font hanno istruzioni di hinting codificati al loro interno e mentre alcuni possono dare un buon risultato con l'hinting "Slight", altri appariranno meglio con hinting "None" o "Full". In ogni caso basta modificare i parametri nel file .conf aiutandosi con le descrizioni fornite nelle parti commentate 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, non modificando il nostro file .conf direttamente ma passando a Xft e/o fontconfig i propri valori di hinting con una priorità maggiore. Per esempio su Gnome3 le impostazioni predefinite (modificabili tramite gnome-tweak-tool) sono "Hinting: Full" e "Antialiasing: Greyscale". Per evitare discrepanze e conflitti è meglio cambiare questi valori con quelli usati nei file .conf.
Ogni desktop environment che si rispetti ha una sezione dove poter impostare i parametri base di fontconfig e per alcuni potrebbero essere sufficienti per avere un buon risultato, ma per un controllo più fine il ricorso al file .conf è necessario. Ad esempio alcuni caratteri risultano più leggibili senza hinting sotto una certa dimensione. Ciò è correggibile aggiungendo una sezione simile a questa nel nostro file .conf:

	<match target="font">
		<test name="family">
			<string>DejaVu Sans Mono</string>
		</test>
		<test name="pixelsize" compare="less">
			<double>7.5</double>
		</test>
		<edit name="hinting">
			<bool>false</bool>
		</edit>
	</match>

Questa ad esempio in caso di carattere "DejaVu Sans Mono" con una dimensione inferiore ai 7.5 punti, deve disabilitare l'hinting. Si possono fare tante altre cose simili con fontconfig, come specificare un hinting diverso da quello generale per font con istruzioni di hinting scarse; per approfondimenti leggete la documentazione di fontconfig (e visionate anche i file di configurazione di fontconfig-infinality come applicazione pratica di ciò).
Alla fine del tuning potrete testare la vostra configurazione corrente in questa pagina.

Info.png Nota
Dalla versione 2.10 di fontconfig (non ancora disponibile in Debian Jessie al momento della scrittura di questa pagina) il file ~/.fonts.conf cambierà percorso, diventando ~/.config/fontconfig/fonts.conf (anche se probabilmente sarà mantenuta la compatibilità con il vecchio percorso, salvo cambiamenti da parte della Debian Fonts Task Force).


Font rendering di Ubuntu

I parametri predefiniti di fontconfig di Ubuntu sono impostati (come in Debian e molte altre distibuzioni Linux) tramite /etc/fonts/conf.d/. Questa directory contiene tanti pezzi di configurazione che tutti insieme vanno a creare la configurazione globale di fontconfig per tutto il sistema (in pratica è un local.conf frammentato). Le varie opzioni che è possibile attivare/disattivare in /etc/fonts/conf.d/ sono contenute in /etc/fonts/conf.avail/. Basta creare un link simbolico con:

ln -s /etc/fonts/conf.avail/impostazione.conf /etc/fonts/conf.d/

oppure cancellarlo e l'impostazione sarà attivata o, se cancellata, sarà disattivata. Il comando dpkg-reconfigure fontconfig-config suggerito nell'Introduzione di questa guida apporta i cambiamenti proprio in questo modo, creando dei link in conf.d a seconda delle risposte date. Potete leggere il file /etc/fonts/conf.d/README per qualche informazione in più.
La differenza tra Ubuntu e Debian è che quest'ultima appena installata non contiene alcuna impostazione di hinting dei caratteri in conf.d e mancano anche delle impostazioni in conf.avail per poterlo fare, come quella dell'antialiasing, che è essenziale. In Ubuntu queste impostazioni ci sono e sono abilitate da subito.
Creare i file mancanti in conf.avail e linkarli in conf.d è poco pratico, mentre un modo equivalente e più rapido è scrivere direttamente le singole impostazioni tutte in un file, come abbiamo fatto sopra con /etc/fonts/local.conf (o ~/.fonts.conf). In caso di impostazioni discordanti tra configurazioni diverse, fontconfig dovrebbe usare questa scala di priorità:

  1. impostazioni font dell'ambiente desktop
  2. ~/.fonts.conf
  3. /etc/fonts/local.conf
  4. /etc/fonts/conf.d/

anche se molto dipende da come sono impostati i parametri all'interno delle configurazioni, che potrebbero cambiare le priorità. Per informazioni man fonts-conf.
La configurazione predefinita del font rendering di Ubuntu è quasi uguale a quella illustrata sopra, ma se trovate delle differenze di resa su schermo è possibile che sia per via di apposite patch che Ubuntu applica sui pacchetti adibiti al rendering e che Debian non ha [ancora] introdotto.
Ma può anche essere merito del font predefinito di Ubuntu, che è possibile scaricare dai repository ufficiali di Ubuntu e per installarlo basta un:

# dpkg -i ttf-ubuntu-font-family_0.80-0ubuntu5_all.deb
Warning.png ATTENZIONE
Se volete proprio avere lo stesso font hinting di Ubuntu, a vostro rischio potete aggiornare questi pacchetti prendendo le versioni dei repository Ubuntu: libfreetype6 libfontconfig1 fontconfig fontconfig-config ma è altamente sconsigliabile e la responsabilità per eventuali problemi sarà solo vostra.


Infinality

Infinality è un insieme di patch e configurazioni che puntano al massimo rendimento dei caratteri. Come scrive l'autore sul suo sito, l'obiettivo primario è migliorare la resa dei font imitando quelle dei vari sistemi operativi, mentre quello secondario è 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/migliorarne alcuni comportamenti, e di un sistema di configurazione che si integra con fontconfig e ne diventa 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 noti per l'assenza di istruzioni di hinting).
Prima di installare Infinality, meglio prima fare pulizia di configurazioni ridondanti (che probabilmente Infinality riesce a scavalcare o ignorare, ma meglio andare sul sicuro). Innanzitutto eliminare o spostare in una directory di backup i file /etc/fonts/local.conf e ~/.fonts.conf, considerati obsoleti da Infinality, poi rimuovere le impostazioni di hinting (che cominciano con 1) e quelle relative ai caratteri bitmap (che cominciano con 70) da /etc/fonts/conf.d/ con:

# rm /etc/fonts/conf.d/1*
# rm /etc/fonts/conf.d/70*

così dovremmo essere tornati alla configurazione iniziale di Debian.
Adesso si può aggiornare libfreetype6 con la versione patchata e aggiungere la configurazione di Infinality. Ho adattato le versioni presenti in questo PPA di Ubuntu per Debian, ecco i pacchetti:

Se avete abilitato il multiarch, quasi sicuramente vi troverete installate entrambe le versioni i386 e amd64 di libfreetype6 e dovrete aggiornarle entrambe. Per installare il tutto basta un:

# dpkg -i libfreetype6_versione.deb fontconfig-infinality_versione.deb

Dopo l'installazione è meglio riavviare il pc prima di configurare Infinality. Già dopo il riavvio potrete notare dei miglioramenti evidenti, però se volete potete cambiare 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 (ed è quasi indispensabile avere installati su Debian i font usati dal sistema operativo scelto per avere un buon risultato).
È possibile aggiungere anche altri preset creati da noi 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.

Installazione nuovi caratteri

Quando si vuole installare un nuovo carattere che non è già 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 nuovi 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 cartella dei font dell'utente 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 è presente sul vostro pc in dual boot, basta usare questo metodo per montare la partizione di sistema di Windows e copiare i font prescelti 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 è pur sempre diverso dal ClearType di Windows).
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 experimental)
- Ubuntu: la già citata famiglia di caratteri Ubuntu
- Gnome 3: Cantarell (presente in Debian)
- KDE: Oxygen
Sul web ci sono tanti siti con collezioni di font. Dei font pacchettizzati in .deb potete trovarli qui, mentre su Typetester potrete fare dei confronti tra caratteri (fino a tre).

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

Configurazione Xft

"X FreeType interface library" come dice il nome stesso, è una libreria che serve ad interfacciare il rasterizzatore FreeType con X (precisamente con XRender). Le applicazioni che si basano su X potrebbero ignorare le impostazioni di fontconfig e usare quelle di Xft.
Xft comunque si poggia su fontconfig e ne dovrebbe assumere anche le impostazioni di hinting e se nessuna applicazione mostra differenze di rendering si può tranquillamente lasciare tutto com'è.
In caso ci sia necessità di impostare manualmente i parametri di Xft è consigliabile usare gli stessi valori di .fonts.conf o local.conf per evitare conflitti.
Creiamo o modifichiamo il file .Xresources nella nostra home con:

$ nano ~/.Xresources
Bulb.png 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 inseriamo 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.
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.
Cambiando le impostazioni del font hinting su Gnome3 (e probabilmente anche su altri desktop environment), questi va a modificare direttamente i valori di Xft. Potete verificarlo cambiando i valori con gnome-tweak-tool e poi dando il comando xrdb -query per vedere i nuovi valori cambiati.

DPI

Se i caratteri a schermo sono troppo piccoli (o troppo grandi) perché il monitor ha risoluzioni elevate (o basse), si può cambiare il DPI specificando il valore DPI effettivo 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, sono presenti due DPI: quello usato da Xorg e quello usato da Xft (e 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, lascia 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, generalmente di circa mezzo pollice: 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, create un file con

# nano /etc/X11/Xsession.d/96setdpi

e scriveteci dentro quel comando (ovviamente con il vostro DPI invece del 102.46). 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.

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 dell'interfaccia grafica potrebbero non scendere sotto i 96 DPI.
Questi valori vanno 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 questi file avete usato i template sopra, le sezione dove inserire il DPI sono disattivate da un tag di commento: togliete quei tag per abilitare. Se usate Infinality, dovete impostate i valori del DPI nei file /etc/fonts/infinality/infinality.conf e /etc/profile.d/infinality-settings.sh
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.

Gli ambienti desktop potrebbero impostare ad ogni avvio i parametri di Xft, sovrascrivendo quelli impostati nei file di configurazione, tra i quali anche Xft.dpi. In questi casi bisogna usare gli strumenti di configurazione messi a disposizione dal desktop per impostare il DPI.

  • Gnome3 imposta 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).
  • Non so se KDE4 sovrascrive come Gnome3, ma in ogni caso si può cambiare il valore predefinito da "KDE menu" > "Personal Settings" > "Application Appearance" > "Fonts" > "Force fonts DPI".
  • LXDE non manomette il valore di Xft.dpi, lasciando quello impostato nei file di configurazione di fontconfig/Xft/Infinality.


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à safe) per migliorare la leggibilità.

In breve, bisogna cambiare nel file /etc/default/console-setup i valori di FONTFACE= e FONTSIZE= con uno di questi:

  • VGA (sizes 8x8, 8x14, 8x16, 16x28 and 16x32)
  • Terminus (sizes 6x12, 8x14, 8x16, 10x20, 12x24, 14x28 and 16x32)
  • TerminusBold (sizes 8x14, 8x16, 10x20, 12x24, 14x28 and 16x32)
  • TerminusBoldVGA (sizes 8x14 and 8x16)
  • Fixed (sizes 8x13, 8x14, 8x15, 8x16 and 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
Per maggiori dettagli: man console-setup

Riferimenti

Per approfondimenti consiglio la lettura di questo magnifico articolo, oltre che dei seguenti link:

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




Guida scritta da: Gash Swirl-auth40.png Debianized 40%
Estesa da:
BubuXP 02:46, 21 mag 2013 (CEST) (riscrittura totale)
Verificata da:
BubuXP 02:46, 21 mag 2013 (CEST)

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