Migliorare l'aspetto dei font: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(aggiunta Infinality, correzioni varie)
Riga 8: Riga 8:


== Configurazione fontconfig ==
== Configurazione fontconfig ==
Se assenti installiamo queste tre librerie:
Se assenti installiamo queste librerie:
<pre># apt-get install libfreetype6 fontconfig libcairo2 libxft2</pre>
<pre># apt-get install libfreetype6 fontconfig libcairo2 libxft2</pre>
ma essendo usate da tutti i principali ambienti desktop è praticamente impossibile non averle (anche perché senza un desktop grafico ci sarebbero solo [http://en.wikipedia.org/wiki/Computer_font#Bitmap_fonts caratteri bitmap] e questa guida non servirebbe a molto).<br>
ma essendo usate da tutti i principali ambienti desktop è praticamente impossibile non averle (anche perché senza un desktop grafico ci sarebbero solo [http://en.wikipedia.org/wiki/Computer_font#Bitmap_fonts caratteri bitmap] e questa guida non servirebbe a molto).<br>
Riga 133: Riga 133:
$ fc-cache -fv</pre>
$ fc-cache -fv</pre>
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 dare il miglior risultato possibile su tutti i 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 un risultato su schermo più adatto ai 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 fontconfig i propri valori 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 .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>
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. Per esempio alcuni caratteri risultano più leggibili senza hinting sotto una certa dimensione, o possono avere dei piccoli difetti con le impostazioni correnti che vanno però 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 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:
<pre>
<pre>
<match target="font">
<match target="font">
Riga 155: Riga 155:


=== Font rendering di Ubuntu ===
=== Font rendering di Ubuntu ===
I parametri predefiniti di fontconfig di Ubuntu sono impostati (come in Debian e molte altre distibuzioni Linux) tramite <code>/etc/fonts/conf.d/</code>. Questa directory contiene tanti pezzi di configurazione che tutti insieme vanno a creare la configurazione globale di fontconfig per tutto il sistema. Le varie opzioni che è possibile inserire in <code>/etc/fonts/conf.d/</code> sono contenute in <code>/etc/fonts/conf.avail/</code>. Basta creare (con <code>ln -s /etc/fonts/conf.avail/nomefile /etc/fonts/conf.d/</code>) o cancellare un link simbolico in <code>conf.d</code> del file presente in <code>conf.avail</code> contenente l'opzione scelta e questa sarà attivata o, se cancellata, disattivata. Il comando suggerito nell'Introduzione di questa guida apporta dei cambiamenti proprio in questo modo. Leggere il file <code>/etc/fonts/conf.d/README</code> per informazioni più precise.<br>
I parametri predefiniti di fontconfig di Ubuntu sono impostati (come in Debian e molte altre distibuzioni Linux) tramite <code>/etc/fonts/conf.d/</code>. 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 <code>local.conf</code> frammentato). Le varie opzioni che è possibile attivare/disattivare in <code>/etc/fonts/conf.d/</code> sono contenute in <code>/etc/fonts/conf.avail/</code>. Basta creare un link simbolico con:
La differenza tra Ubuntu e Debian è che quest'ultima appena installata non contiene alcuna impostazione di hinting dei caratteri in <code>conf.d</code> e mancano anche delle impostazioni in <code>conf.avail</code> per poterlo fare, come l'antialiasing. In Ubuntu queste impostazioni ci sono e sono abilitate da subito.<br>
<pre>ln -s /etc/fonts/conf.avail/impostazione.conf /etc/fonts/conf.d/</pre>
Creare i file mancanti in <code>conf.avail</code> e linkarli in <code>conf.d</code> è poco pratico, mentre un modo equivalente e più rapido è scrivere direttamente le singole impostazioni tutte in un file, come abbiamo fatto sopra con <code>/etc/fonts/local.conf</code> (o <code>~/.fonts.conf</code>). In caso di impostazioni discordanti, fontconfig dovrebbe usare questa scala di priorità:<br>
oppure cancellarlo e l'impostazione sarà attivata o, se cancellata, sarà disattivata. Il comando <code>dpkg-reconfigure fontconfig-config</code> suggerito nell'Introduzione di questa guida apporta i cambiamenti proprio in questo modo, creando dei link in <code>conf.d</code> a seconda delle risposte date. Potete leggere il file <code>/etc/fonts/conf.d/README</code> per qualche informazione in più.<br>
La differenza tra Ubuntu e Debian è che quest'ultima appena installata non contiene alcuna impostazione di hinting dei caratteri in <code>conf.d</code> e mancano anche delle impostazioni in <code>conf.avail</code> per poterlo fare, come quella dell'antialiasing, che è essenziale. In Ubuntu queste impostazioni ci sono e sono abilitate da subito.<br>
Creare i file mancanti in <code>conf.avail</code> e linkarli in <code>conf.d</code> è poco pratico, mentre un modo equivalente e più rapido è scrivere direttamente le singole impostazioni tutte in un file, come abbiamo fatto sopra con <code>/etc/fonts/local.conf</code> (o <code>~/.fonts.conf</code>). In caso di impostazioni discordanti tra configurazioni diverse, fontconfig dovrebbe usare questa scala di priorità:<br>
'''1)''' impostazioni font dell'ambiente desktop<br>
'''1)''' impostazioni font dell'ambiente desktop<br>
'''2)''' <code>~/.fonts.conf</code><br>
'''2)''' <code>~/.fonts.conf</code><br>
'''3)''' <code>/etc/fonts/local.conf</code><br>
'''3)''' <code>/etc/fonts/local.conf</code><br>
'''4)''' <code>/etc/fonts/conf.d/</code><br>
'''4)''' <code>/etc/fonts/conf.d/</code><br>
La configurazione predefinita del font rendering di Ubuntu è quasi uguale a quella nostra 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>
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>
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 suoi pacchetti e che Debian non usa.<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>
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 libfontconfig 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.}}
=== 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>
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).
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 relativa ai caratteri bitmap (che cominciano con 70) da <code>/etc/fonts/conf.d/</code> con:
<pre># rm /etc/fonts/conf.d/1*
# rm /etc/fonts/conf.d/70*</pre>
così dovremmo essere tornati alla configurazione iniziale di Debian.<br>
Adesso si può aggiornare <code>libfreetype6</code> con la versione patchata e aggiungere la configurazione di Infinality. Ho adattato le versioni presenti in [https://launchpad.net/~no1wantdthisname/+archive/ppa/+packages questo PPA di Ubuntu] per Debian, ecco i pacchetti:
* [http://www.mediafire.com/?og2zqs1cdelzajs versione ''i386''] di <code>libfreetype6</code> per Wheezy, Jessie e Sid;
* [http://www.mediafire.com/?nycgi3wi1gz2bwz versione ''amd64''] di <code>libfreetype6</code> per Wheezy, ricompilata causa dipendenza non soddisfatta (<code>libc6 < 2.14</code>), dovrebbe funzionare anche su Jessie e Sid;
* [http://www.mediafire.com/?3n3n8ial7xniu4u versione ''amd64''] di <code>libfreetype6</code> per Jessie e Sid;
* [http://www.mediafire.com/?tres1e3xwo5rv3v configurazione <code>fontconfig-infinality</code>] per tutte le architetture e versioni.
Se avete abilitato il multiarch, quasi sicuramente vi troverete installate entrambe le versioni ''i386'' e ''amd64'' di <code>libfreetype6</code> e dovrete aggiornarle entrambe. Per installare il tutto basta un: <pre># dpkg -i libfreetype6_versione.deb fontconfig-infinality_versione.deb</pre>
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> che permette di scegliere tra vari preset che imitano fedelmente il font hinting dei più famosi sistemi operativi (ed è consigliabile anche avere installati su Debian i font usati dal sistema operativo scelto per avere un risultato ancora più fedele).<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/profile.d/infinality-settings.sh</code>.


== Installazione nuovi caratteri ==
== Installazione nuovi caratteri ==
Riga 200: Riga 222:
Alcune applicazioni (generalmente quelle più vecchie) potrebbero ignorare le impostazioni di fontconfig perché non lo supportano. In questo caso possiamo intervenire su Xft (X FreeType interface library).<br/>
Alcune applicazioni (generalmente quelle più vecchie) potrebbero ignorare le impostazioni di fontconfig perché non lo supportano. In questo caso possiamo intervenire su Xft (X FreeType interface library).<br/>
Se nessuna applicazione dà problemi con i caratteri si può anche tralasciare questa procedura ma l'importante è usare gli stessi valori di <code>.fonts.conf</code> (o <code>local.conf</code>) per evitare conflitti.<br>
Se nessuna applicazione dà problemi con i caratteri si può anche tralasciare questa procedura ma l'importante è usare gli stessi valori di <code>.fonts.conf</code> (o <code>local.conf</code>) per evitare conflitti.<br>
Se usate ''Infinality'', potete saltare questa sezione in quanto ci pensa uno script a configurare Xft.<br>


Creiamo o modifichiamo il file <code>.Xresources</code> nella nostra home con:
Creiamo o modifichiamo il file <code>.Xresources</code> nella nostra home con:

Versione delle 00:01, 14 mag 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' -->
<!-- remove this line to activate customized DPI
		<edit mode="assign" name="dpi">
			<double>96</double>
		</edit>
remove this line to activate customized DPI -->

	</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. -->
<!-- remove this line 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>
remove this line to activate font substitution -->

<!-- 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 (che se non modificati sono "Hinting: Slight" e "Antialiasing: Rgba").
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 .conf è 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:

	<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.
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, eccetto per la mancanza dei valori di autohint (che quindi dovrebbe essere considerato false) e di rgba (che quindi dovrebbe essere considerato none).
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.
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, potete fare una pazzia e aggiornare questi pacchetti prendendo le versioni dei repository Ubuntu: libfreetype6 libfontconfig 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.


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 è fornire la migliore resa dei font 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 (ad esempio sui font senza istruzioni di hinting abilita l'autohint). 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 relativa 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 fedelmente il font hinting dei più famosi sistemi operativi (ed è consigliabile anche avere installati su Debian i font usati dal sistema operativo scelto per avere un risultato ancora più fedele).

È 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/profile.d/infinality-settings.sh.


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 i 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

Alcune applicazioni (generalmente quelle più vecchie) potrebbero ignorare le impostazioni di fontconfig perché non lo supportano. In questo caso possiamo intervenire su Xft (X FreeType interface library).
Se nessuna applicazione dà problemi con i caratteri si può anche tralasciare questa procedura ma l'importante è usare gli stessi valori di .fonts.conf (o local.conf) per evitare conflitti.
Se usate Infinality, potete saltare questa sezione in quanto ci pensa uno script a configurare Xft.

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.


DPI

Se non siamo ancora soddisfatti del risultato oppure il nostro monitor è grande e i caratteri sono piccoli, si può provare a cambiare il valore DPI dei caratteri usando quello del monitor (che sarebbe più corretto chiamare PPI).

Generalmente fontconfig ricava tale valore automaticamente da Xorg oppure usa lo standard non ufficiale dei 96 DPI.
Per trovare il valore del nostro monitor, bisogna trovare prima la diagonale in pixel (applicando il teorema di Pitagora alla risoluzione nativa dello schermo) e poi dividerla con la diagonale effettiva del monitor in pollici (generalmente si trova nelle specifiche del monitor).

Es.: il mio monitor è un AOC 2236Vw da 22" con risoluzione nativa di 1920x1080. Guardando le specifiche però trovo che la diagonale visibile non è 22" ma 21,5". Allora calcolo:

sqrt(1920^2 + 1080^2) / 21.5 = 102.46 PPI

Per fare più in fretta ci si può aiutare usando questo calcolatore.

Una volta trovato il valore DPI (o PPI) del monitor basta sostituirlo nelle righe commentate dei file .fonts.conf e .Xresources, togliendo ovviamente i commenti per abilitare.
Fate logout e login per vedere il risultato e, se questo non è soddisfacente, commentate nuovamente le righe per tornare ai valori standard.

Alcuni sostengono che il valore DPI da inserire nelle configurazioni deve essere arrotondato, senza parte decimale. Però il fatto che sia usato un valore double per memorizzare il DPI mi fa pensare che sia fatto apposta per usare anche la parte decimale.

È consigliata la lettura di questo vecchio messaggio per capire un po' meglio il ruolo dei DPI nel sistema operativo.

KDE

Se, una volta avviato KDE, la dimensione dei caratteri è piccola, ciò è dovuto al fatto che KDM sta utilizzando i 75dpi.
Bisogna quindi modificare il file /etc/kde4/kdm/kdmrc (o /usr/share/config/kdm/kdmrc). Cercare la riga:

ServerArgsLocal=-nolisten tcp

e aggiungere il valore DPI desiderato:

ServerArgsLocal=-nolisten tcp -dpi 96


Riferimenti

Per approfondimenti:

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
http://www.grc.com/cleartype.htm




Guida scritta da: Gash Swirl-auth20.png Debianized 20%
Estesa da:
BubuXP (riscrittura totale)
Verificata da:

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