Migliorare l'aspetto dei font: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
m (→‎Xft: Nascosto box informativo riguardante Infinality e rimosso del vecchio testo nascosto riguardante Iceweasel)
 
(164 versioni intermedie di 11 utenti non mostrate)
Riga 1: Riga 1:
==Samba e OpenLDAP: creare un controller di dominio==
{{Versioni compatibili|Wheezy|Jessie|Testing_2016|Unstable_2016}}
===Introduzione===
In questo articolo vedremo come installare un server basato su Debian Sarge e Samba 3 con backend di un database LDAP, affinch� funga da Primary Domain Controller di una rete Windows. Lo stesso server LDAP verr� utilizzato anche per la gestione in contemporanea degli utenti Unix, in modo da avere un controllo unico e centralizzato sia sugli utenti Windows sia sugli utenti Linux.<br/>
Per la redazione di questa guida mi sono basato su questi ottimi HowTo:<br/>
http://www.slag.it/documenti/samba3_ldap_pdc/samba3_ldap_pdc_howto.php<br/>
http://www.pluto.it/files/journal/pj0605/samba3pdc.html<br/>
http://www.linuxtrent.it/documentazione/wikilinux/SambaLDAPcomePDCsuDebianSarge
<br/>
e li ho integrati con annotazioni, appunti e configurazioni speciali che mi sono stati indispensabili per completare correttamente le operazioni di creazione di un dominio e di aggiunta al dominio stesso di macchine client Microsoft.
<br/>


===Sistema installato===
== Introduzione ==
Il presente HOWTO � stato realizzato utilizzando un sistema Debian 3.1 Sarge con tutti gli aggiornamenti di sicurezza ufficiali. La configurazione iniziale del sistema prevede un'installazione base Debian net install senza alcun componente aggiuntivo.<br/>
Molti nuovi utenti di Debian, specie se provengono da altre distribuzioni Linux più "rifinite", si lamentano del brutto aspetto che hanno i caratteri, (anche se ad alcuni invece piacciono, de gustibus). Il problema risiede nella configurazione predefinita di Debian, che non imposta il [http://en.wikipedia.org/wiki/Font_rasterization rendering dei caratteri] adeguatamente. Nelle ultime versioni di Debian la situazione "out of the box" è un po' migliorata, ma si può fare di più.
Durante tutto il processo si presuppone di agire come utente root.
<br/>
===Samba===
Si consiglia di installare immediatamente Samba, in quanto alcuni strumenti che mette a disposizione saranno necessari anche per le configurazioni degli altri servizi.
<pre>
# apt-get install samba smbclient
</pre>
Per il momento come configurazione base rispondente nel seguente modo alle domande che vi verranno poste:<br/>
*Nome del Dominio/Workgroup: LOGIC
*Utilizzare password cifrate: SI
*Utilizzare DHCP per i nomi Netbios: NO
*Avviare Samba come demoni (no inetd)
*Creare il database delle password: NO
Non preoccupatevi per eventuali errori, perch� tutta la configurazione verr� ripresa in un secondo momento.
<br/>
===Installazione e configurazione del server LDAP===
Il server LDAP � essenzialmente un database gerarchico che viene utilizzato per la memorizzazione dei dati degli utenti, dei computer del dominio e di tutto quanto si desideri gestire tramite una base dati condivisibile via rete tra pi� sistemi.<br/>
Si considera che il server in questione venga utilizzato all'interno di una rete aziendale altamente affidabile e non verranno, pertanto, trattati gli aspetti relativi alla crittografia delle comunicazioni. Questa scelta riduce la sicurezza, pertanto si consiglia di approfondire l'argomento.<br/>
Per utilizzare il server LDAP occorre installare il pacchetto slapd che costituisce un'implementazione di server LDAP, il pacchetto ldap-utils, un insieme di strumenti che ne permettono la gestione, e il pacchetto samba-doc, contentente alcuni file necessari per configurare LDAP per l'utilizzo con SAMBA.<br/>
<pre>
# apt-get install slapd ldap-utils samba-doc
</pre>
Durante l'installazione verranno richieste alcune informazioni necessarie a configurare il server LDAP. In particolare verr� richiesto il nome del dominio che pu� essere un dominio interno completamente inventato (es. miadominio.tld) o un dominio internet valido. La scelta � legata a politiche organizzative aziendali e tecniche che richiederebbero una trattazione approfondita e che esula da questo HOWTO.<br/>
Nei file riportati si considera che il dominio specificato � <tt>logic</tt>, un dominio interno non valido per Internet.
In seguito verr� richiesta la password per l'utente amministratore. Scegliete una password particolarmente sicura, in quanto tramite essa si potr� avere accesso completo alla gestione degli utenti del vostro dominio e, pertanto, accedere a qualsiasi sistema presente sulla vostra rete. Questa password, inoltre, verr� utilizzata anche in seguito in alcuni file di configurazione, pertanto � bene ricordarsela.<br/>
Come nome dell'organizzazione mettete una descrizione della vostra organizzazione: Rete LAN di Logic.<br/>
Per tutte le altre opzioni possono essere confermate le impostazioni di default.
<br/><br/>
Passiamo ora alla configurazione del server LDAP.<br/>
Innanzitutto dobbiamo copiare in <tt>/etc/ldap/schema</tt> lo schema LDAP necessario per SAMBA.
<pre>
# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
</pre>
Ora occorre modificare il file di configurazione di slapd (<tt>/etc/ldap/slapd.conf</tt>) aggiungendo nella sezione <tt>Schema and objectClass definitions</tt> lo schema per samba:
<pre>
include /etc/ldap/schema/samba.schema
</pre>
Nella sezione <tt>Indexing options</tt> aggiungere una serie di indicizzazioni che ottimizzeranno le interogazioni per l'utilizzo del server SAMBA:
<pre>
index objectClass eq
index uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname eq,subinitial
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
</pre>
Bisogna consentire agli utenti di cambiare non solo la propria password LDAP, ma anche le password di SAMBA e contemporaneamente proteggere tali informazioni da un accesso pubblico sostituendo la riga:
<pre>
access to attribute=userPassword
</pre>
con:
<pre>
access to attrs=userPassword,sambaNTPassword,sambaLMPassword
</pre>
Possiamo far ripartire <tt>slapd</tt> affinch� tutte le modifiche apportate siano prese in considerazione.
<pre>
# /etc/init.d/slapd restart
</pre>
Si pu� controllare che il server sia correttamente partito eseguendo una query con il comando:
<pre>
# ldapsearch -x
</pre>
La risposta deve essere un file LDIF. Se invece si ottiene un errore di connessione ricontrollare tutte le impostazioni e i file di log. Per controllare il funzionamento di <tt>slapd</tt> pu� sempre tornare utile fermare il servizio e farlo partire, anzich� con gli script standard debian con il comando:
<pre>
# slapd -d 256
</pre>
In tal modo viene avviato visualizzando varie informazioni di debug a video.
<br/>
===Configurazione dei client per LDAP===
Ogni volta che un client accede ad un server LDAP deve impostare la base di ricerca e, nel caso si trovi su un server differente, l'URL del server LDAP. Queste informazioni possono essere impostate come default nel file <tt>/etc/ldap/ldap</tt>.conf aggiungendo le righe:
<pre>
BASE dc=logic
URI ldap://localhost
</pre>
Una volta fatto questo � possibile verificare il corretto funzionamento di LDAP nuovamente con il comando:
<pre>
# ldapsearch -x
</pre>
che dovrebbe fornire tutti i dati presenti nel server LDAP. Sempre pochi, ma in numero maggiore rispetto a quanto elencato la volta precedente.
<br/>
===Configurare i SMBLDAP TOOLS===
I smbldap-tools sostituiscono i comandi standard di UNIX per la gestione di gruppi, utenti e password in modo da dialogare direttamente con il server LDAP e fornire un metodo per gestire in contemporanea gli account UNIX e SAMBA.<br/>
Malgrado la documentazione ufficiale di SAMBA asserisca che smbpasswd sia in grado di gestire tali account, utilizzando quello strumento occorre prima creare l'utente UNIX, poi quello Samba, pertanto ne sconsiglio l'utilizzo.
====Installazione====
Installare il pacchetto smbldap-tools
<pre>
# apt-get install smbldap-tools
</pre>
====Configurazione====
Copiare i file <tt>smbldap.conf</tt> e <tt>smbldap_bind.conf</tt> in <tt>/etc/smbldap-tools</tt>.
<pre>
# zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf
# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf
</pre>
Modificare il file <tt>/etc/smbldap-tools/smbldap_bind.conf</tt> inserendo il DN dell'amministratore del server LDAP e la sua password. Il DN dell'amministratore � stato impostato automaticamente durante l'installazione del pacchetto Debian di slapd e corrisponde a <nowiki>"cn=admin,dc=<dominio>"</nowiki>, in cui il dominio dipende dalle configurazioni sopra riportate per il server LDAP. La password � quella richiesta in fase di installazione del server LDAP.<br/>
Se non si � sicuri del DN da inserire lanciare il comando:
<pre>
# slapcat
</pre>
e cercare una riga che inizia con <nowiki>"dn: cn="</nowiki>. Il valore riportato � quello da inserire come DN. Nel file sono presenti le configurazioni sia per il master che per lo slave, in modo da poter gestire un server di backup per il sistema LDAP gestito tramite slurpd.<br/>
Al momento si presuppone di avere un solo server LDAP, pertanto le configurazioni coincideranno:
<pre>
slaveDN="cn=admin,dc=logic"
slavePw="passworddiadmindigitataprecedentemente"
masterDN="cn=admin,dc=logic"
masterPw="passworddiadmindigitataprecedentemente"
</pre>
Eseguire il comando:
<pre>
# net getlocalsid
</pre>
e copiare o prendere nota del codice che viene restituito.
<br/>
Modificare il file <tt>/etc/smbldap-tools/smbldap.conf</tt> inserendo il SID appena ottenuto e controllare gli indirizzi dei 2 server LDAP in modo che coincidano con il server locale (127.0.0.1).
<pre>
SID="S-1-5-21-2318037123-1631426476-2439636316"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
</pre>
Verificare che il TLS sia disabilitato.
<pre>
ldapTLS="0"
</pre>
Configurare il corretto suffisso per il dominio (quello specificato nella configurazione di LDAP) e il nome corretto per il dominio che si vuole configurare (LOGIC).
<pre>
suffix="dc=logic"
sambaUnixIdPooldn="sambaDomainName=LOGIC,${suffix}"
</pre>
Aggiungere la voce:
<pre>
rootdn          "cn=admin,dc=logic"
</pre>
Potrebbe tornare utile anche impostare una differente scadenza per le password, in modo che non ne venga richiesta la sostituzione troppo di frequente:
<pre>
defaultMaxPasswordAge="180"
</pre>
Questo parametro � poi utilizzato al momento della creazione di un utente e ogni volta che un utente si cambia password.<br/>
Configurare infine i percorsi per le home degli utenti e per le cartelle che conterranno i profiles nel caso di roaming profiles.
<pre>
userSmbHome="\\PDC-SERVER\%U"
userProfile="\\PDC-SERVER\profiles\%U"
</pre>
PDC-SERVER deve essere sostituito con il nome SAMBA del server che funziona come PDC (il server che stiamo configurando; lo stesso nome che verr� impostato pi� avanti nel file di configurazione di Samba). In questo esempio, inoltre, si � ritenuto di fornire uno script di logon comune a tutti gli utenti, anzich� di uno script personale per ogni utente, pertanto si � impostato il seguente parametro:
<pre>
userScript="logon.bat"
</pre>
Tale impostazione pu� essere poi cambiata per determinati utenti con esigenze particolari direttamente agendo sui dati LDAP dell'utente.<br/>
Impostare infine il suffisso per gli indirizzi mail, anche se nel presente HOWTO non vengono configurati.
<pre>
mailDomain="logicsnc.com"
</pre>
Terminate le modifiche al file, bisogna cambiare i permessi per i file appena modificati al fine di aumentare la sicurezza del sistema ed impedire agli utenti di avere accesso alle password di amministratore di LDAP, scritta in chiaro nel file di configurazione precedentemente modificato.
<pre>
# chmod 0644 /etc/smbldap-tools/smbldap.conf
# chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
</pre><br/>


===Configurazione di SAMBA===
Ci sono vari modi e tanti parametri per migliorare il rendering, di seguito si farà un'esposizione quanto più esplicativa possibile (spero). Ulteriori approfondimenti tecnici sull'argomento si possono reperire nell'ultimo capitolo "[[Migliorare l'aspetto dei font#Riferimenti|Riferimenti]]".<br>
A questo punto il backend per la memorizzazione degli utenti e la loro gestione � pronto; � quindi il momento di passare a SAMBA per farlo accedere a quanto fatto finora.
A chi invece interessa solo il risultato finale può leggere direttamente la "[[Migliorare l'aspetto dei font#Guida rapida|Guida rapida]]".
====Creazione dei dati base====
Per il funzionamento corretto SAMBA ha bisogno di diversi gruppi predefiniti e 2 utenti: Administrator e nobody.<br/>
Inoltre, affinch� si riesca ad aggiungere computer al dominio in modo automantico (da macchine Windows), deve esistere un utente con uid = 0 da utilizzare per questa operazione. Tale utente pu� essere un utente root (da aggiungere a mano) o lo stesso Administrator cambiandogli l'uid. Quest'ultima � la scelta presa in questa configurazione, in modo da avere un utente Administrator che � Administrator per Samba e root per il "dominio" UNIX.<br/>
Per creare tali gruppi utilizzare i comandi:
<pre>
# smbldap-populate -k 0
# smbldap-useradd -a -m -c "Admin" Administrator
# smbldap-usermod -G "Domain Admins" Administrator
# smbldap-usermod -u 0 Administrator
# smbldap-populate -a Administrator -k 0
</pre>
Il parametro "-k 0" imposta l'UID di Administrator a 0, facendolo di fatto coincidere con l'utente root. Gli altri comandi fanno s� che Administrator sia aggiunto al gruppo dei Domain Admins. Durante l'esecuzione del comando vengono riepilogati i record aggiunti. In ogni caso � possibile controllare i dati inseriti con il comando:
<pre>
# ldapsearch -x | less
</pre>
e anche:
<pre>
# ldapsearch -x uid=Administrator
</pre>
Infine � bene cambiare la password di Administrator con il comando:
<pre>
# smbldap-passwd Administrator
</pre>
Questo sar� anche il comando che dovr� essere normalmente utilizzato per la gestione delle password.
====Configurazione di NSS per lavorare con LDAP====
Per far lavorare correttamente Samba � necessario configurare NSS con LDAP. Samba infatti si aspetta di trovare un utente di sistema con lo stesso nome di un utente Samba. Per questo occorre recuperare le informazioni sugli utenti dal database LDAP. � necessario quindi installare:
<pre>
# apt-get install libnss-ldap
</pre>
Verr� chiesto il server LDAP e il dominio (logic), per tutte le altre domande � possibile mantenere le risposte di default.
Dopo l'installazione � necessario modificare il file di configurazione di NSS (<tt>/etc/nsswitch.conf</tt>) come segue:
<pre>
passwd: compat ldap
group: compat ldap
shadow: compat ldap
</pre>
� possibile verificare le impostazioni con il comando
<pre>
getent passwd
</pre>
che dovrebbe riportare anche gli utenti Samba come Administrator.
<br/>
I cambiamenti di NSS dovrebbero gi� essere sufficienti per determinate operazioni, ma l'accesso tramite alcuni strumenti come SSH ancora non funziona.<br/>
Per attivare i servizi in modo completo occorre lavorare su PAM e, in particolare, installare le librerie che consentono a PAM di accedere a LDAP.
<pre>
# apt-get install libpam-ldap
</pre>
Vi viene chiesto come per libnss-ldap, il DN dell'amministratore di LDAP e la sua password. Per il resto possono essere confermate le impostazioni predefinite. In questo modo il file <tt>/etc/pam_ldap.conf</tt> ha gi� tutte le impostazioni corrette e la password � stata memorizzata in <tt>/etc/ldap.secret</tt>.
<br/>
Nella cartella <tt>/etc/pam.d</tt> modificare i seguenti files:
<pre>
commom-account:
account sufficient pam_ldap.so
account required pam_unix.so
</pre>
<pre>
commom-auth:
auth    sufficient      pam_ldap.so nullok_secure
auth    required        pam_unix.so use_first_pass
</pre>
<pre>
commom-password:
password    sufficient      pam_ldap.so
password    required      pam_unix.so try_first_pass nullok obscure min=4 max=8 md5
</pre>
<pre>
commom-session:
session    sufficient      pam_ldap.so
session    required        pam_unix.so
</pre>
Per provare un servizio, tipo ssh, occorre far ripartire il demone corrispondente e provare ad autenticarsi con un nuovo utente contenuto nel database LDAP.
<br/>
===Configurazione del server Samba===
E' possibile copiare un prototipo per il file di configurazione di samba (facendo una copia dell'originale!):
<pre>
cp /usr/share/doc/smbldap-tools/examples/smb.conf.gz /etc/samba/smb.conf
</pre>
'''ATTENZIONE'''
<br/>
Le voci da modificare sono parecchie; conviene un'attenta analisi del file d'esempio allegato nell'appendice, soprattutto per quanto riguarda il binding verso ldap, in modo che rispecchino queste opzioni:
<pre>
[global]
workgroup = LOGIC
server string = LAN Server %v
##### Per permettere un corretto login dei client XP #####
wins support = yes
; wins server = x.y.w.z
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
; include = /etc/samba/dhcp.conf
dns proxy = no
; name resolve order = lmhosts host wins bcast
unix charset = ISO8859-1
; character set = ISO8859-1
### Each machina has its own log file ###
log file = /var/log/samba/log.%m
max log size = 1000
; syslog only = no
syslog = 0


panic action = /usr/share/samba/panic-action %d
In passato, prima di cominciare si sarebbe dovuto controllare che fossero state installate le librerie responsabili della gestione e visualizzazione dei font, e cioè [http://freetype.org/ FreeType], [http://fontconfig.org/ Fontconfig], [http://fribidi.org/ FriBidi], [http://www.freedesktop.org/wiki/Software/HarfBuzz HarfBuzz], [http://pango.org Pango], [http://www.freedesktop.org/wiki/Software/Xft/ Xft] e [http://www.cairographics.org/ Cairo], ma ora sarebbe un controllo superfluo, dato che queste librerie sono dipendenze di molti software e dei principali ambienti desktop. Quasi tutti i software che utilizzano una GUI avranno tra le dipendenze anche qualcuna di queste librerie.
### Authentication ###
security = user
encrypt passwords = true
; passdb backend = tdbsam guest
passdb backend = ldapsam:ldap://127.0.0.1
obey pam restrictions = yes
; guest account = nobody
invalid users = root
;unix password sync = no
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sLinux\spassword:* %n\n *Retype\snew\sLinux\spassword:* %n\n .


; pam password change = no
Se invece si utilizza Debian senza un interfaccia grafica, e quindi si visualizzano a schermo solo dei [http://en.wikipedia.org/wiki/Computer_font#Bitmap_fonts caratteri bitmap], questa guida potrebbe risultare utile solo per il paragrafo che riguarda la [[Migliorare l'aspetto dei font#Console Linux|console Linux]].


##### LDAP Configuration #####
== Fontconfig ==
''Fontconfig'' è la libreria responsabile di fornire l'elenco dei caratteri disponibili nel sistema alle applicazioni e tra le varie funzioni c'è anche quella di indicare a ''FreeType'' come disegnare i caratteri. Ha un linguaggio di configurazione in XML che permette un'elevata personalizzazione, ma che ne [https://eev.ee/blog/2015/05/20/i-stared-into-the-fontconfig-and-the-fontconfig-stared-back-at-me/ limita la semplicità d'uso]. Ad esempio può essere configurato per usare l'antialiasing su tutti i font tranne che su quelli di lingue orientali, oppure può disabilitare l'hinting su uno specifico font quando questo è di dimensioni inferiori a 8 punti.


ldap admin dn = cn=admin,dc=logic
La configurazione predefinita di ''Fontconfig'' si trova in <code>/etc/fonts/conf.d/</code> 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 <code>/usr/share/fontconfig/conf.avail/</code> e vengono creati (o rimossi) dei link simbolici in <code>/etc/fonts/conf.d/</code> in base alla caratteristica che si vuole abilitare (o disabilitare).<br>
ldap suffix = dc=logic
Ad esempio se si esegue
ldap group suffix = ou=Groups
<pre># dpkg-reconfigure fontconfig-config</pre>
ldap user suffix = ou=Users
in base alle risposte date nella procedura guidata verranno creati o rimossi dei link in <code>conf.d/</code><br>
ldap machine suffix = ou=Computers
Però si sconsiglia di cambiare la configurazione in questo modo perché in <code>conf.avail/</code> non sono presenti tutte le opzioni che è possibile impostare con ''Fontconfig'' per migliorare l'aspetto del font. Invece di creare dei file con le configurazioni mancanti in <code>conf.d/</code> diventa molto più pratico ricorrere ad un altro metodo, illustrato di seguito.
ldap idmap suffix = ou=Idmap
ldap passwd sync = Yes
##### Samba PDC #####


os level = 255
Dopo aver letto le configurazioni in <code>conf.d/</code>, ''Fontconfig'' ne cerca delle altre nel file <code>/etc/fonts/local.conf</code> e poi in <code>~/.config/fontconfig/fonts.conf</code>. Entrambi i file non esistono inizialmente, e sono creati dall'utente o da qualche applicazione. Le impostazioni contenute in <code>/etc/fonts/local.conf</code> sono applicate a tutti gli utenti del sistema, mentre quelle in <code>~/.config/fontconfig/fonts.conf</code> risiedono nella home dell'utente e sono applicate solo a quell'utente. La sintassi dei due file è identica (come quella dei file in <code>conf.d/</code>) e possono convivere insieme.<br>
domain master = yes
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:
domain logons = yes
# <code>/etc/fonts/conf.d/</code>
preferred master = yes
# <code>/etc/fonts/local.conf</code>
time server = yes
# <code>~/.config/fontconfig/fonts.conf</code>
logon home =
# impostazioni font degli ambienti desktop (che usano ''Xft'')
logon path =
A seconda di come sono impostati i parametri all'interno delle configurazioni, ciò potrebbe rendere nulla la priorità. Per esempio usando <code>mode="assign"</code> per impostare un valore, questo rimarrà tale anche se ne verrà impostato uno diverso successivamente; per informazioni [http://www.freedesktop.org/software/fontconfig/fontconfig-user.html <code>man fonts-conf</code>].
##### File sharing #####


; preserve case = yes
Ecco la configurazione suggerita da usare nel file <code>/etc/fonts/local.conf</code>:
; short preserve case = yes
<pre>
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="pattern">


##### Misc #####
<!-- 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>


; include = /home/samba/etc/smb.conf.%m
<!-- Abilitando l'opzione "hinting", le istruzioni di hinting TrueType
socket options = TCP_NODELAY
    incorporate nei font vengono interpretate dal Byte-Code Interpreter
; idmap uid = 10000-20000
    (BCI) di FreeType. Questa è la scelta migliore in caso di font
; idmap gid = 10000-20000
    contenenti buone istruzioni di hinting. -->
; template shell = /bin/bash
<edit mode="append" name="hinting">
</pre>
<bool>true</bool>
Abilitare l'autenticazione tramite username.
</edit>
<pre>
security = user
</pre>
Sostituire il bakend predefinito:
<pre>
passdb backend = tdbsam guest
</pre>
con il backend LDAP:
<pre>
passdb backend = ldapsam:ldap://127.0.0.1
</pre>
Per utilizzare smbldap per gestire le password:
<pre>
; Do ldap passwd sync
ldap passwd sync = Yes
passwd program = /usr/sbin/smbldap-passwd %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*
</pre>
e per gestire gli utenti e i gruppi da windows:
<pre>
add user script = /usr/sbin/smbldap-useradd -m "%u"
ldap delete dn = Yes
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
</pre>
Rendere scrivibili le home directory (di default sono in sola lettura e personalmente non ne capisco il motivo).
<pre>
[homes]
comment = Home Directories
browseable = no
writable = yes
create mask = 0700
directory mask = 0700
</pre>
Infine decommentare la share [netlogon] e creare la share [profiles].
<pre>
[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no


[profiles]
<!-- L'hintstyle rappresenta quanto influenza avrà l'hinting sul risultato
path = /var/lib/samba/profiles
    finale. Può essere impostato in "hintfull", "hintmedium", "hintslight"
read only = no
    e "hintnone". Con autohint abilitato è consigliato "hintslight", mentre
create mask = 0600
    con autohint disabilitato (BCI) è consigliato "hintfull", ma è una
directory mask = 0700
    scelta abbastanza soggettiva. -->
</pre>
<edit mode="append" name="hintstyle">
Il file � pronto. Salvarlo e testarlo con il comando:
<const>hintslight</const>
<pre>
</edit>
# testparm
</pre>
Affinch� i roaming profiles funzionino correttamente � necessario che la cartella puntata dalla share [profiles] esista e abbia permessi 1757.<br/>
Infine bisogna impostare la password per l'accesso a LDAP come admin
<pre>
# smbpasswd -w <password>
</pre>
e far ripartire SAMBA.
<pre>
# /etc/init.d/samba restart
</pre>
Creare infine le cartelle necessarie per netlogon e profiles.
<pre>
# mkdir /var/lib/samba/netlogon
# mkdir /var/lib/samba/profiles
# chmod 1757 /var/lib/samba/profiles
</pre>
====Creare il primo utente====
Adesso siamo pronti per la creazione del primo utente con il comando:
<pre>
# smbldap-useradd -a -m -c "Nome Utente" username
</pre>
Dove -a serve per creare anche i dati UNIX, -m crea l'home directory e -c specifica il nome completo. Infine impostare la password dell'utente con:
<pre>
# smbldap-passwd username
</pre>
Per verificare il tutto usare il comando:
<pre>
# smbldap-usershow username
</pre>
====Creare un gruppo====
<pre>
# smbldap-groupadd "NomeGruppo"
</pre>
====Aggiunta di un utente a un gruppo====
<pre>
# smbldap-usermod -G "NomeGruppo" nome.utente
</pre>
<br/>


===Creazione di un semplice script da eseguire al login di windows===
<!-- Il subpixel rendering riesce a triplicare efficacemente la risoluzione
E' possibile creare uno script che abbiamo chiamto "logon.bat" (come specificato nel file /etc/smbldap-tools/smbldap.conf) da mettere nella cartella indicata per la condivisione netlogon, quindi nel nostro caso /var/lib/samba/netlogon/
    orizzontale o verticale dei font usando i subpixel del monitor.
Tale script dovr� esser scritto in modalit� dos, per far questo sfrutteremo il tool unix2dos contenuto nel pacchetto tofrodos.
    Fontconfig deve sapere che tipo di subpixel usa il vostro monitor per
<pre>
    visualizzare correttamente i caratteri. Le possibili opzioni sono:
# apt-get install tofrodos
    "rgb", "bgr", "vrgb", "vbgr", "unknown" e "none". Moltissimi monitor
</pre>
    odierni usano le specifiche "rgb" (Red-Green-Blue).
creiamo lo script con l'editor che preferiamo
    Non abilitare contemporaneamente questa opzione e l'autohinter. -->
<pre>
<edit mode="append" name="rgba">
# vim /var/lib/samba/netlogon/logon.bat
<const>rgb</const>
</pre>
</edit>
syncronizziamo gli orologi del client windows con il nostro server scrivendo nello script.
<pre>
net time %LOGONSERVER% /set /yes
</pre>
infine
<pre>
# unix2dos /var/lib/samba/netlogon/logon.bat
</pre>
Allo script si possono aggiungere operazioni come il montaggio di unit� di rete o altre condivisioni.
Tenete conto che con queste impostazioni viene creata un'unit� di rete collegata alla home dell'utente linux.


===Connettersi al dominio===
<!-- Quando si usa il subpixel rendering bisognerebbe abilitare il filtro
Il nostro server � ora pronto per essere utilizzato. Per testarne le funzionalit� � possibile procedere per gradi, in modo da isolare quelli che sono i problemi di configurazione da quelli che sono i problemi di rete o dei client Windows.<br/>
    LCD, che serve ad ridurre i bordi colorati dei font. Il filtro
A tal fine il primo accesso pu� essere fatto dal server stesso con il comando:
    "lcddefault" è quello più comune; "lcdlight" è un filtro leggero ideale
<pre>
    per i font che sembrano troppo spessi o tenui; "lcdlegacy" è il filtro
# smbclient -L localhost -U Administrator
    originale di Cairo; "lcdnone" disabilita il filtro. -->
</pre>
<edit mode="append" name="lcdfilter">
Dovrebbe essere richiesta la password impostata precedentemente per l'utente Administrator e, di seguito, dovrebbero venire elencate le condivisioni samba impostate sul server.
<const>lcddefault</const>
<br/><br/>
</edit>
La procedura di connessione dei client al dominio varia a seconda del sistema operativo utilizzato sulle macchine client:
<br/><br/>
'''Windows 95/98/ME'''
# Verificare che sia installato il "Client per Reti Microsoft" fra le propriet� di rete
# Assicurarsi che il Client per Reti Microsoft sia selezionato come protocollo di rete primario (Pannello di Controllo -> Rete -> Logon di rete primario).
# Andare su Pannello di Controllo -> Rete -> Client per reti Microsoft -> Propriet� -> Logon su Dominio NT.
# Se si � configurata su smb.conf l'opzione "add user script", selezionare il checkbox Crea un Computer Account, altrimenti creare a mano sul server Samba un utente con il nome della macchina Windows.
# Inserire il nome del proprio dominio e cliccare OK.
'''Windows NT'''
# Andare su Pannello di Controllo -> Rete -> Identificazione Rete -> Propriet�
# Selezionare Dominio e inserire il nome del prorio dominio
# Selezionare Crea un Computer Account
# Alla richiesta della password di un amministratore inserire la login e la password di Administrator, ricordarsi che l'utente root deve essere aggiunto a smbpasswd.
# Dovrebbe comparire un messaggio che ci da il benvenuto sul dominio.
'''Windows 2000'''
# Le procedure sono uguali a quelle per Windows NT tranne che i settaggi di rete sono trovati sotto Pannello di Controllo -> Sistema -> Identificazione Rete (oppure, sul Desktop, cliccare col tasto destro del mouse sull'icona Risorse del Computer, selezionare Propriet�, cliccare sulla tab Identificazione Rete e sul tasto Propriet�).
'''Windows XP'''
<br/>
La procedura con Windows XP � pi� complessa (lamentele a Microsoft che usa cambiare le specifiche e le implementazioni dei suoi protocolli anche per rendere pi� complicata l'interoperabilit� con soluzioni alternative). Notare che solo XP Professional Edition pu� essere usato per far parte di un dominio, Windows XP Home Edition non pu� far parte di un dominio (Samba o Windows based).
# Aprire l'editor delle policy di Sicurezza Locale (Start->Pannello di controllo->Strumenti di Aministrazione->Criteri di protezione locali->Criteri locali->opzioni di protezione)
# Disabilitare la voce "Domain member: Digitally encrypt or sign secure channel (always)" (Membro di dominio: aggiunta crittografia of irma digitale ai dati del canale protetto (sempre) )
# Disabilitare la voce "Domain member: Disable machine account password changes" (Controller di dominio: rifiuta cambio password account computer)
# Disabilitare la voce "Domain member: Require strong (Windows 2000 or later) session key" (Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive) )
# Scaricare da Samba.org la patch per il registro WinXP_SignOrSeal. Per applicarla cliccare due volte sul file .reg e rispondere Si alle domande
# A questo punto ci si pu� unire al dominio come su Windows NT/2000: Tasto destro su Risorse del Computer, selezionare Propriet�, Nome del Computer e tasto Modifica uppure cliccare su Identificazione di Rete ed eseguire il Wizard fornendo le credenziali di Administrator.
'''Linux/Unix'''
<br/>
Anche dei sistemi Linux, ovviamente, possono unirsi ad un dominio con un PDC Samba e se sono dei file server, si pu� configurare Samba per permettere l'autenticazione tramite il dominio. Su smb.conf ci devono essere le seguenti righe:
<pre>
[global]
      workgroup = <nome dominio>
      netbios name = <nome server samba>
      security = DOMAIN
      encrypt passwords = Yes
      password server = <nome/ip del PDC>
      preferred master = False
      domain master = False
</pre>
Ovviamente sul PDC Samba deve essere creato un computer account per il nostro Samba locale (con il nome specificato in netbios name) e, anche in questo caso, il computer locale deve preventivamente unirsi al dominio, con una procedura che � paragonabile a quelle viste sopra per client Windows. Sul Linux/Unix locale basta scrivere:
<pre>
smbpasswd -j <nome dominio> -r <nome PDC server> -U root
</pre>
Bisogna fornire la password di root del PDC Samba (ricordarsi che � la password salvata in smbpasswd e non in passwd/shadow, nel caso fossero diverse).
<br/>
===Unire un server Samba al dominio===
Nel caso si disponga di un secondo server e si voglia utilizzare un unico database degli utenti � possibile seguire 2 strade differenti:
# Configurare il secondo server per accedere a LDAP seguendo le indicazioni esposte per il server di dominio, ovviamente senza farlo diventare server di dominio, ma con autenticazione degli utenti
# Usare il server di dominio per l'autenticazione
Il primo caso non verr� trattato, mentre per il secondo occorre eseguire le seguenti operazioni sul server da aggiungere.
<br/>
Modificare il file <tt>/etc/samba/smb.conf</tt> con la seguenti direttiva:
<pre>
security = domain
</pre>
Far ripartire Samba e dare il seguente comando per unire il server al dominio e creare l'utente relativo al pc:
<pre>
net rpc join -U Administrator%password
</pre>
Infine, affinch� un utente sia riconosciuto correttamente da Samba deve essere anche un utente di sistema, pertanto occorre configurare il sistema affinch� peschi la lista degli utenti dal server di dominio via LDAP, esattamente come era avvenuto per il server di dominio.<br/>
Installare il pacchetto libnss-ldap e configurarlo in modo da puntare al server LDAP installato sul PDC e fornendo la base LDAP corretta (dc=logic).<br/>
Modificare il file /etc/nsswitch.conf come fatto in precedenza.
<pre>
passwd: compat ldap
group: compat ldap
shadow: compat ldap
</pre>
A questo punto � possibile creare share e assegnare permessi in base a utenti e gruppi definiti nel dominio.
<br/>
===Promemoria dei comandi di Samba e LDAP===
====Creazione di utenti====
<pre>
# smbldap-useradd -a -m -c "Descrizione Utente" nome.utente
# smbldap-passwd nome.utente
</pre>
Per verificare il tutto usare il comando
<pre>
# smbldap-usershow nome.utente
</pre>
====Creazione di un gruppo====
<pre>
# smbldap-groupadd "NomeGruppo"
</pre>
====Aggiunta di un utente a un gruppo====
<pre>
# smbldap-usermod -G "NomeGruppo" nome.utente
</pre>
====Elencare i gruppi memorizzati in LDAP====
<pre>
# ldapsearch -x objectClass=posixGroup
</pre>
====Elencare gli utenti di un gruppo====
<pre>
# smbldap-groupshow "gruppo"
</pre>
====Backuppare una directory condivisa dal server usando le credenziali di un utente specifico====
<pre>
smbclient //nomeserver/nomecartella -U nome.utente%password.utente -N -Tc backup.tar /percorso/locale/del/backup
</pre>
====Elencare le risorse condivise di una macchina====
<pre>
smbclient -L nomeserver
</pre>
====Per fare delle modifiche nel DB in maniera semplice====
<pre>
  slapcat -l /tmp/backup.ldif   


  # stoppare il servizio
<!-- Abilitando l'autohinter verranno ignorate le istruzioni di hinting
    contenute nei font e verrà usato invece un algoritmo generico di
    hinting che risulta spesso peggiore ma potrebbe migliorare la
    visualizzazione dei font che non hanno istruzioni incorporate, come
    molti font nel formato OpenType.
    Nelle più recenti versioni di FreeType, se l'hintstyle è impostato su
    "hintslight", verrà usato automaticamente l'autohinter se il font non
    contiene le istruzioni incorporate, quindi meglio ignorare questa
    opzione, così da essere gestita automaticamente. -->
<!--
<edit mode="append" name="autohint">
<bool>false</bool>
</edit>
-->


  /etc/init.d/slapd stop
<!-- 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>
-->


  # una copia del vecchio db
<!-- 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>


  cp -r /var/lib/ldap  /var/lib/ldap.old
</match>
  mkdir /var/lib/ldap


  Modificare il file backup.ldif e quindi reimportarlo
<!-- 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>


  slapadd -c -l /tmp/backup.ldif
<!-- Rifiuta i font Type 1 perché non hanno un buon rendering -->
</pre>
<selectfont><rejectfont><pattern>
====Comandi utili LDAP====
<patelt name="fontformat"><string>Type 1</string></patelt>
<pre>
</pattern></rejectfont></selectfont>
ldapsearch -b "dc=logic" -x


ldapsearch -b "dc=logic" -LLL "cn=nomedellutente*" -x
<!-- 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>


ldapadd -x -W -D "cn=admin,dc=logic" -f entry.ldif  # per importare un ldif
<alias>
<family>Arial</family>
<prefer><family>FreeSans</family></prefer>
</alias>
-->


ldapdelete  -x  -D "cn=admin,dc=logic" -W "cn= nomeutente,dc=logic"
</fontconfig>
</pre>
</pre>
Nel caso si reinstalli slapd controllare non ci sia un backup in /var/backups con lo stesso numero di versione, altrimenti un dpkg.reconfigure non ricrea il file di configurazione corretto.
Se si usa il modello sopra per creare <code>~/.config/fontconfig/fonts.conf</code> bisognerebbe sostituire tutti i <code>mode="append"</code> presenti con <code>mode="assign"</code> per far convivere configurazioni di sistema e dell'utente senza problemi di priorità.
<br/>
Per creare il file basta usare il proprio editor preferito (es. ''nano''). Per la configurazione di sistema:
===Configurazioni addizionali attivabili in SAMBA===
<pre># nano /etc/fonts/local.conf</pre>
'''Disabilitare i roaming profiles'''
oppure per il singolo utente:
<br/>
<pre>$ nano ~/.config/fontconfig/fonts.conf</pre>
Cos� come � stato configurator Samba permette l'utilizzo dei roaming profiles, meccanismo per cui tutte le impostazioni di un utente sono caricate dal server al login e salvate sul server al logout in modo da poter utilizzare computer differenti ritrovando le proprie impostazioni.<br/>
poi incollare il modello sopra, eventualmente modificarlo e salvare il file.<br>
Seppur questa funzionalit� sia utile, nel caso di cartelle di profilo di elevate dimensioni (in questa cartella c'� la cache del browser, le e-mail, la cartella documenti, ...) i tempi di login e logout sono eterni. Il meccanismo dei roaming profiles pu� essere disabilitato per singolo computer o agendo sul server SAMBA a livello di impostazioni del singolo utente (e ovviamente di impostazioni di default da utilizzare durante la creazione degli utenti).<br/>
Dopo rigeneriamo le cache dei font (di sistema e dell'utente) con:
Per disabilitare i roaming profiles agendo sul server occorre, innanzitutto, modificare il file <tt>/etc/samba/smb.conf</tt> aggiungendo le seguenti righe:
<pre># fc-cache -fv
$ fc-cache -fv</pre>
e infine riavviamo X facendo logout e login (o riavviando il sistema) per abilitare il nuovo aspetto dei caratteri.
 
La configurazione sopra riportata è uno "standard" che cerca di fornire il miglior risultato possibile sulla maggior parte dei sistemi. Però ci sono tanti fattori da considerare se l'aspetto dei font con questa configurazione non è ancora soddisfacente. Potrebbe essere ad esempio per via del monitor che usa uno schema [http://www.lagom.nl/lcd-test/subpixel.php subpixel BGR] (casi 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 "Full" o abilitando "autohint". In ogni caso basta modificare i parametri nei file <code>.conf</code> 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.<br>
Meglio ancora, si possono specificare delle impostazioni specifiche per un determinato font, se questo appare meglio con impostazioni diverse da quelle generali. Nell'esempio seguente, vengono specificati alcuni parametri per il carattere Oxygen-Sans:
<pre>
<pre>
logon home =
  <match target="font">
logon path =
    <test name="force_autohint">
      <bool>false</bool>
    </test>
    <test name="family">
      <string>Oxygen-Sans</string>
    </test>
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="hinting" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="hintstyle" mode="assign">
      <const>hintfull</const>
    </edit>
    <edit name="autohint" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
</pre>
</pre>
Questi parametri, anche se vuoti, DEVONO esserci, altrimenti il client continua a cercare il profile generando un errore.<br/>
Per tutti gli utenti presenti occorre eliminare l'attributo sambaProfilePath. Per far ci possibile usare il comando smbldap-usermod, utilizzare un client di LDAP testuale o grafico o ancora usare gli strumenti di gestione utenti di Windows scaricando i srvtools.exe dal sito della Microsoft.<br/>
Infine, per far s che i nuovi utenti non abbiano, come default, impostato il parametro in questione occorre commentare nel file <tt>/etc/smbldap-tools/smbldap.conf</tt> la riga:
<pre>
userProfile="\\PDC-SAMBA\profiles\%U"
</pre>
Nel caso, invece, si volessero mantenere i roaming profiles, ma disabilitarli solo su determinati computer, possibile modificare un impostazione sui singoli computer che non devono utilizzarli nel seguente modo:
# Andare in menu di avvio - Esegui e scrivere mmc.
# Andare in "Console - Aggiungi rimuovi snap-in...".
# Andare in Aggiungi e selezionare "Criterio gruppo".
# Confermare tutto e chiudere le finestre fino a poter accedere allo snap-in appena aggiunto.
# Andare in "Criteri di protezione - Configurazione computer - Modelli amministrativi - Sistema - Profili utente" per XP e in "Criteri computer locale - Configurazione computer - Modelli amministrativi - Sistema - Accesso" per Windows 2000
# Cambiare il valore di "Consenti solo profili utente locali" da Non configurato a Attivo.
In questo modo al login e logout i profili sul server non sono pi considerati.
<br/>
===db4===
OpenLDAP ha la brutta abitudine di non risistemarsi per bene quando la donna delle pulizie inciampa nell'interruttore generale della corrente. Perci conviene installare:
<pre>
# apt-get install db4.2-util
</pre>
Questo pacchetto contiene l'utility db4.2_recover che viene lanciata automaticamente ad ogni restart di ldap, risolvendo eventuali problemi di incongruenza del Barkley DB.
<br/>
===Impostare i charset corretti===
Il meccanismo di gestione dei charset in Linux e in Windows abbastanza complicato, anche a causa dell'elevato numero di strati logici e sistemi differenti che una stringa deve attraversare prima di essere letta o scritta. In larga parte ho ancora molte lacune sul funzionamento, ma di seguito riporto le configurazioni necessarie affinch eventuali lettere accentate nei nomi di file e cartelle siano coerenti sui client Windows, Linux e sul server Sambanel caso di charset Italiano (western european - ISO8859-1).<br/>
In primo luogo occorre aggiungere al file di configurazione di Samba (<tt>/etc/samba/smb.conf</tt>), nella sezione <tt>[global]</tt>, la seguente direttiva:
<pre>
unix charset = ISO8859-1
</pre>
Questa direttiva dice a Samba con che charset deve scrivere sul file system e questo deve coincidere con il charset con cui stato installato il server. Alla fine occorre impostare 2 opzioni su Linux affinch le share Samba siano montate con il
charset corretto.
<pre>
smbmount -o iocharset=iso8859-1,codepage=cp850 SHARE MOUNTPOINT
</pre>
<br/>
===Appendice A - Files di configurazione===
'''File <tt>/etc/samba/smb.conf</tt>'''
<pre>
[global]
workgroup = SCUOLA
server string = LAN Server %v
wins support = yes
; wins server = x.y.w.z
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
; include = /etc/samba/dhcp.conf
dns proxy = no
; name resolve order = lmhosts host wins bcast
unix charset = ISO8859-1
; character set = ISO8859-1
### Ogni macchina ha il suo file di log ###
log file = /var/log/samba/log.%m
max log size = 1000
; syslog only = no
syslog = 0


panic action = /usr/share/samba/panic-action %d
C'è da considerare anche che l'ambiente desktop in uso può cambiare questi parametri, modificando direttamente il file <code>~/.config/fontconfig/fonts.conf</code> (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" (Greyscale 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 già usati nei vostri <code>/etc/fonts/local.conf</code> e/o <code>~/.config/fontconfig/fonts.conf</code>.<br>
### Autenticazione ###
*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).<br>
security = user
*''KDE'' invece utilizza solo Fontconfig, precisamente memorizza le opzioni dell'utente in <code>~/.config/fontconfig/fonts.conf</code>. In realtà anche KDE imposta i valori Xft ma gli servono solo per la compatibilità con alcune applicazioni (tipo quelle in GTK). Un [http://bugs.kde.org/show_bug.cgi?id=245664 bug] di KDE4 (non presente in KDE5) imposta sempre e comunque dei parametri di hinting predefiniti in <code>~/.config/fontconfig/fonts.conf</code> anche se l'utente sceglie di mantenere quelli di sistema; quindi l'unica soluzione al momento è impostare i parametri così come in GNOME3.
encrypt passwords = true
; passdb backend = tdbsam guest
passdb backend = ldapsam:ldap://127.0.0.1
obey pam restrictions = yes
; guest account = nobody
invalid users = root
;unix password sync = no
# passwd program = /usr/bin/passwd %u
# passwd chat = *Enter\snew\sLinux\spassword:* %n\n *Retype\snew\sLinux\spassword:* %n\n .


; pam password change = no
Alla fine del tuning potrete testare la vostra configurazione corrente [http://www.infinality.net/files/font.html 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.


##### LDAP Configuration #####
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.


ldap admin dn = cn=admin,dc=scuola
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 <code>local.conf</code> per avere risultati identici.
ldap suffix = dc=scuola
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
ldap passwd sync = Yes
passwd program = /usr/sbin/smbldp-passwd %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*token*updated*
add user script = /usr/sbin/smbldap-useradd -m "%u"
ldap delete dn = Yes
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"


Il modello di configurazione esposto nel paragrafo precedente è già uguale a quella di Ubuntu, quindi basta usare quella configurazione 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).


##### Samba PDC #####
Per completare l'opera di "Ubuntizzazione" si può installare il font predefinito di Ubuntu, che è possibile scaricare da [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzczI0Q0UwMWU4UWc qui] già pacchettizzato per Debian, e per installarlo basta un:
<pre># dpkg -i fonts-ubuntu_0.83-1.1_all.deb</pre>


os level = 255
=== Debian 7 e precedenti ===
domain master = yes
A partire dalla [http://cgit.freedesktop.org/fontconfig/commit/?id&#61;8c255fb185d5651b57380b0a9443001e8051b29d versione 2.10] di ''Fontconfig'' (da Debian 8 "Jessie" in poi) sono cambiate le posizioni di alcuni file di configurazione, ma sarà mantenuta la compatibilità con alcuni dei vecchi percorsi ancora per qualche versione. Ecco una tabella comparativa:
domain logons = yes
preferred master = yes
time server = yes
logon home =
logon path =


{| class="wikitable"
##### Printing #####
|-
! !! Percorso attuale !! Vecchio percorso
|-
| '''Directory di configurazione utente''' || <code>~/.config/fontconfig/conf.d/</code> || <code>~/.fonts.conf.d/</code>
|-
| '''File di configurazione utente''' || <code>~/.config/fontconfig/fonts.conf</code> || <code>~/.fonts.conf</code>
|-
| '''Directory caratteri utente''' || <code>~/.local/share/fonts/</code> || <code>~/.fonts/</code>
|-
| '''Cache caratteri utente''' || <code>~/.cache/fontconfig/</code> || <code>~/.fontconfig/</code>
|-
| '''Configurazioni sistema disponibili''' || <code>/usr/share/fontconfig/conf.avail/</code> || <code>/etc/fonts/conf.avail/</code>
|-
|}


; load printers = yes
== Xft ==
; printing = bsd
"X FreeType interface library" come dice il nome stesso, è una libreria che serve ad interfacciare il rasterizzatore FreeType con X (precisamente con [http://en.wikipedia.org/wiki/X_Rendering_Extension XRender]).<br>
; printcap name = /etc/printcap
Generalmente non dovrebbe esserci necessità di configurare Xft ma, come vedremo più avanti, può essere meglio impostarne manualmente i parametri per un risultato finale migliore. Per farlo è consigliabile usare gli stessi valori presenti in <code>~/.config/fontconfig/fonts.conf</code> o <code>/etc/fonts/local.conf</code> per evitare possibili conflitti.<br>
; printing = cups
Creiamo o modifichiamo il file <code>.Xresources</code> nella nostra home con:
; printcap name = cups
<pre>$ nano ~/.Xresources</pre>
; printer admin = @ntadmin
{{Suggerimento|Se invece del file <code>~/.Xresources</code> si inseriscono queste opzioni in <code>/etc/X11/Xresources/x11-common</code> i cambiamenti saranno applicati a tutto il sistema e non ad un solo utente.}}
Poi aggiungiamo il codice seguente:
<pre>
! 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.


Xft.antialias: 1
##### File sharing #####
Xft.hinting: 1
Xft.hintstyle: hintslight
Xft.rgba: rgb
Xft.lcdfilter: lcddefault


; preserve case = yes
; short preserve case = yes


! FreeType can set this automatically, better not forcing this on or off.


##### Misc #####
!Xft.autohint: 0


; include = /home/samba/etc/smb.conf.%m
socket options = TCP_NODELAY
; idmap uid = 10000-20000
; idmap gid = 10000-20000
; template shell = /bin/bash


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


##### Share definitions #####
!Xft.dpi: 96
</pre>
Salviamo il file e riavviamo X facendo logout e login.


[homes]
Da notare però che '''KDE 5''' (e probabilmente anche altri ambienti desktop) sovrascrivono questi valori con quelli impostati nelle loro schermate di configurazione. Per fare una prova empirica, impostiamo <code>~/.Xresources</code> come sopra e poi mettiamo dei valori diversi in ''KDE 5'' > ''Impostazioni di sistema'' > ''Carattere'', e per l'esattezza ''Tipo di sub-pixel hinting'' "BGR" e ''Stile di hinting'' "Intero". Se riavviamo la sessione e controlliamo i valori Xft attuali con il comando:
comment = Home Directories
<pre>$ xrdb -query | grep Xft</pre>
browseable = no
i due valori cambiati, e cioè ''Xft.hintstyle'' e ''Xft.rgba'', corrisponderanno a quelli di KDE 5 e non a quelli di <code>~/.Xresources</code>.<br>
writable = yes
È tuttavia consigliato impostare ugualmente questi valori in <code>~/.Xresources</code> perché KDE 5 non modifica tutti i valori (ad es. ''Xft.autohint'' e ''Xft.lcdfilter'' non sembrano essere presi in considerazione). E dato che molte applicazioni in GTK sembrano dipendere da Xft per il loro rendering (es. Synaptic), avere tutte le impostazioni configurate a dovere e con gli stessi valori tra '''fontconfig''', '''Xft''' e ambiente desktop, risulterà in un aspetto uniforme tra le varie applicazioni, a prescindere che siano in Qt, in GTK o altri toolkit.
create mask = 0700
<!-- {{Box|Nota|Se usate [[Migliorare l'aspetto dei font#Infinality|Infinality]] lo script di avvio <code>/etc/X11/Xsession.d/99infinality-settings</code> già si occupa di impostare questi parametri, quindi non è necessario specificarli altrove, se non nelle impostazioni dell'ambiente desktop, come appena visto sopra.}}-->
directory mask = 0700


[netlogon]
== DPI ==
comment = Network Logon Services
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 [http://en.wikipedia.org/wiki/Dots_per_inch DPI] specificando quello reale dello schermo (che sarebbe più corretto chiamare [http://en.wikipedia.org/wiki/Pixels_per_inch PPI]).<br>
path = /scuola/samba/netlogon
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.).<br>
guest ok = yes
In Debian e in tutte le distribuzioni Linux con Xorg, sono presenti due DPI: quello usato da Xorg e quello usato da Xft/Fontconfig.
writable = no
share modes = no


[profiles]
=== DPI di Xorg ===
path = /scuola/samba/profiles
Xorg ricava il suo valore dall'[http://en.wikipedia.org/wiki/Extended_display_identification_data 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:
read only = no
<pre>$ xdpyinfo | grep -B2 resolution</pre>
create mask = 0600
Impostare il giusto valore DPI su Xorg è importante per avere una corrispondenza più realistica possibile delle dimensioni su schermo con quelle reali.<br>
directory mask = 0700
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 [http://pxcalc.com/ questa] e [http://members.ping.de/~sven/dpi.html 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).<br>
 
Ottenuto un valore DPI (ad es. ''102.46''), bisogna impostarlo su Xorg con il comando
[VolShare]
<pre>$ xrandr --dpi 102.46</pre>
comment = Documenti della Rete
ma questo sarà resettato al vecchio valore dopo un riavvio di X. Per fare eseguire quel comando automaticamente ad ogni avvio di X:
path = /scuola/VolShare
<pre>
browsable = yes
# cat > /etc/X11/Xsession.d/96setdpi <<EOF
read only = no
xrandr --dpi 102.46
public = yes
EOF
create mask = 0755
</pre>
</pre>
<br/>
ovviamente cambiate quel 102.46 con il DPI del vostro schermo. Questo è il metodo più veloce ma se volete approfondire ci sono altri modi per impostare il DPI su Xorg, leggete ad esempio [http://wiki.archlinux.org/index.php/Xorg#Display_Size_and_DPI qui].<br>
'''File <tt>/etc/ldap/slapd.conf</tt>'''
Se si ha una postazione multi-schermo o si collega spesso un monitor esterno, potrete trovare informazioni molto utili su come configurare in questi casi [[Xrandr_e_udev:_configurare_un_monitor_esterno_in_automatico|in questa guida qui]].<br>
<pre>
Una volta impostato il DPI, potete verificare che questo sia giusto aprendo un qualsiasi file pdf in formato A4 ([http://www.mediafire.com/download/kl37crw0n5k3ydy/A4.pdf come questo]), mettendo lo zoom al 100% e sovrapponendo sul foglio nello schermo un foglio reale di carta in A4: se le dimensioni sono uguali il calcolo e la configurazione sono andati a buon fine.
# This is the main slapd configuration file. See slapd.conf(5) for more
{{Box|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 di KDE, ''okular''). Provando ad installare ed usare ''evince'' (il visualizzatore predefinito di GNOME) su KDE 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: [http://qt-project.org/ Qt] da questo punto di vista sembra superiore a [http://www.gtk.org/ GTK].}}
# info on the configuration options.


#######################################################################
=== DPI di Xft / Fontconfig ===
# Global Directives:
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.<br>
Per controllare l'attuale valore di ''Xft.dpi'' (e di altre variabili Xft impostate) usate il comando
<pre>$ xrdb -query | grep -i dpi</pre>
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.<br>
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.<br>
* '''GNOME 3''' imposta automaticamente Xft.dpi a 96. Per cambiare questo valore bisogna installare <code>gnome-tweak-tool</code> 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).<br>
* '''Xfce''' non imposta automaticamente il DPI, ma per farlo manualmente andare in "Impostazioni" > "Aspetto" > "Caratteri".<br>
* '''LXDE''' si comporta come Xfce.<br>
* Anche '''KDE ''' non cambia il DPI se non facendolo manualmente da "Impostazioni di sistema" > "Aspetto delle applicazioni" > "Caratteri".<br>
Se necessario, i valori del DPI possono anche essere impostati su <code>/etc/fonts/local.conf</code> e <code>/etc/X11/Xresources/x11-common</code> o nelle rispettive controparti per utente singolo <code>~/.config/fontconfig/fonts.conf</code> e <code>~/.Xresources</code>. 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.
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.


# Features to permit
== Installazione nuovi caratteri ==
#allow bind_v2
Quando si vuole installare un nuovo carattere non presente nei repository di Debian, bisogna mettere i file del font in questione in determinate directory per essere utilizzabile.<br>
La directory dove sono presenti tutti i font di sistema è <code>/usr/share/fonts/</code> ma è meglio non usare questa, perché appunto di sistema. I font vanno inseriti in <code>~/.local/share/fonts/</code> per poter essere usati dall'utente corrente, oppure in <code>/usr/local/share/fonts/</code> per metterli a disposizione di tutti gli utenti del sistema.<br>
È buona abitudine dopo l'installazione o la rimozione di font rigenerare la cache con:
<pre># fc-cache -fv
$ fc-cache -fv</pre>


# Schema and objectClass definitions
Facciamo un esempio: per usare i caratteri Ubuntu presenti nel [http://font.ubuntu.com/ sito ufficiale] (archivio .zip), basta estrarli direttamente nella directory dei font dell'utente e aggiornare la cache dei font con:
include        /etc/ldap/schema/core.schema
<pre>$ unzip ubuntu-font-family-0.83.zip -d ~/.local/share/fonts/
include        /etc/ldap/schema/cosine.schema
$ fc-cache -fv</pre>
include        /etc/ldap/schema/nis.schema
oppure, per renderli disponibili anche agli altri utenti estrarli nella cartella dei font locali con:
include        /etc/ldap/schema/inetorgperson.schema
<pre># unzip ubuntu-font-family-0.83.zip -d /usr/local/share/fonts/
include /etc/ldap/schema/samba.schema
# fc-cache -fv
$ fc-cache -fv</pre>


# Schema check allows for forcing entries to
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 <code>\Windows\Fonts</code> alle directory dei font di Debian (se non avete Windows potete sempre cercarli sul web, e comunque considerate che il [https://en.wikipedia.org/wiki/FreeType FreeType] di Linux è diverso dal [https://en.wikipedia.org/wiki/ClearType ClearType] di Windows e i caratteri potrebbero apparire diversi).<br>
# match schemas for their objectClasses's
A chi interessa ecco alcuni dei caratteri usati nelle interfacce grafiche di vari sistemi operativi:<br>
schemacheck    on
- Windows XP: ''[https://www.microsoft.com/typography/fonts/family.aspx?FID=19 Tahoma]''<br>
- Windows 7 / 8.x / 10: ''[https://www.microsoft.com/typography/fonts/family.aspx?FID=331 Segoe UI]''<br>
- Mac OS X: ''[https://en.wikipedia.org/wiki/Lucida_Grande Lucida Grande]''<br>
- iOS: ''[https://en.wikipedia.org/wiki/Helvetica#Neue_Helvetica_.281983.29 Helvetica Neue]''<br>
- ultime versioni di OSX e iOS: ''[https://en.wikipedia.org/wiki/San_Francisco_%282014_typeface%29 San Francisco]''<br>
- Android (< 4.0): famiglia di caratteri ''[http://www.droidfonts.com/ Droid]'' (presente in Debian)<br>
- Android: ''[https://developer.android.com/design/style/typography.html Roboto]'' (presente in Debian)<br>
- Ubuntu: la già citata famiglia di caratteri ''[http://font.ubuntu.com/ Ubuntu]''<br>
- Gnome 3: ''[https://wiki.gnome.org/action/show/Projects/CantarellFonts Cantarell]'' (presente in Debian)<br>
- KDE 5: ''[https://projects.kde.org/projects/unmaintained/oxygen-fonts Oxygen]'' (presente da Debian Stretch)<br>
Sul web ci sono tanti siti con collezioni di font, come [https://github.com/google/fonts/ Google Fonts]. Alcuni font pacchettizzati per Debian potete trovarli [https://drive.google.com/folderview?id=0B7AdLMiZn4FzNUtxeU9uT2RTU1U qui], mentre su [https://www.typetester.org/ Typetester] potrete fare dei confronti tra caratteri.<br>


# Where the pid file is put. The init.d script
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.).
# will not stop the server if you change this.
pidfile        /var/run/slapd/slapd.pid


# List of arguments that were passed to the server
== Console Linux ==
argsfile        /var/run/slapd.args
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à.<br>


# Read slapd.conf(5) for possible values
In breve, bisogna cambiare nel file <code>/etc/default/console-setup</code> 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:
loglevel        0
* '''''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:
<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>


# Where the dynamically loaded modules are stored
In alternativa è possibile usare una procedura guidata con:
modulepath /usr/lib/ldap
<pre># dpkg-reconfigure console-setup</pre>
moduleload back_bdb


#######################################################################
Per maggiori dettagli: <code>man console-setup</code>
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend bdb
checkpoint 512 30


#######################################################################
== Guida rapida ==
# Specific Backend Directives for 'other':
Questa guida è un estratto di quanto scritto finora e serve da riferimento rapido, ma tralascia dei particolari (come ad esempio il [[Migliorare l'aspetto dei font#DPI|DPI]]). Se non siete alle prime armi e volete più controllo sulla configurazione, consiglio di leggere tutta la guida.
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend <other>


#######################################################################
=== Configurazione di sistema ===
# Specific Directives for database #1, of type bdb:
Come utente root creare il file <code>/etc/fonts/local.conf</code> con un editor di testi (es. ''nano''):
# Database specific directives apply to this databasse until another
<pre># nano /etc/fonts/local.conf</pre>
# 'database' directive occurs
e incollare quanto segue:
database        bdb
<pre>
 
<?xml version='1.0'?>
# The base of your directory in database #1
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
suffix          "dc=scuola"
<fontconfig>
 
  <match target="pattern">
# Where the database file are physically stored for database #1
    <edit mode="append" name="antialias">
directory       "/var/lib/ldap"
      <bool>true</bool>
 
    </edit>
# Indexing options for database #1
    <edit mode="append" name="hinting">
index          objectClass eq
      <bool>true</bool>
index          uid,uidNumber,gidNumber,memberUid eq
    </edit>
index cn,mail,surname,givenname eq,subinitial
    <edit mode="append" name="hintstyle">
index sambaSID eq
      <const>hintslight</const>
index sambaPrimaryGroupSID eq
    </edit>
index sambaDomainName eq
    <edit mode="append" name="rgba">
      <const>rgb</const>
    </edit>
    <edit mode="append" name="lcdfilter">
       <const>lcddefault</const>
    </edit>
    <edit mode="append" name="embeddedbitmap">
      <bool>false</bool>
    </edit>
  </match>
  <selectfont><rejectfont><pattern>
    <patelt name="scalable"><bool>false</bool></patelt>
  </pattern></rejectfont></selectfont>
  <selectfont><rejectfont><pattern>
    <patelt name="fontformat"><string>Type 1</string></patelt>
  </pattern></rejectfont></selectfont>
</fontconfig>
</pre>
Il rendering ottenuto con queste impostazioni sarà adottato in modo predefinito da tutti gli utenti del sistema, anche dalla schermata iniziale di login. Ma ogni utente può cambiare queste impostazioni nel proprio profilo, come spiegato di seguito (e spesso <u>deve</u> farlo perché alcuni ambienti desktop tendono a sovrascrivere le preferenze di sistema in modo predefinito, anche se non impostate dall'utente).


# Save the time that the entry gets modified, for database #1
=== Configurazione utente ===
lastmod        on
A livello utente:
 
*se si usa '''Wheezy''' (o versioni precedenti) creare o cambiare il file <code>~/.fonts.conf</code>
# Where to store the replica logs for database #1
*se si usa '''Jessie''' (o versioni successive) creare o cambiare il file <code>~/.config/fontconfig/fonts.conf</code>
# replogfile /var/lib/ldap/replog
Il contenuto del file è il seguente:
 
# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword,sambaNTPassword,sambaLMPassword
        by dn="cn=admin,dc=scuola" write
        by anonymous auth
        by self write
        by * none
 
# Ensure read access to the base for things like
# supportedSASLMechanisms.  Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work
# happily.
access to dn.base="" by * read
 
# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="cn=admin,dc=scuola" write
        by * read
 
# For Netscape Roaming support, each user gets a roaming
# profile for which they have write access to
#access to dn=".*,ou=Roaming,o=morsnet"
#        by dn="cn=admin,dc=scuola" write
#        by dnattr=owner write
 
#######################################################################
# Specific Directives for database #2, of type 'other' (can be bdb too):
# Database specific directives apply to this databasse until another
# 'database' directive occurs
#database        <other>
 
# The base of your directory for database #2
#suffix "dc=debian,dc=org"
</pre>
<br/>
'''File <tt>/etc/ldap/ldap.conf</tt>'''
<pre>
<pre>
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $
<?xml version='1.0'?>
#
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
# LDAP Defaults
<fontconfig>
#
  <match target="font">
 
    <edit mode="assign" name="antialias">
# See ldap.conf(5) for details
      <bool>true</bool>
# This file should be world readable but not world writable.
    </edit>
 
    <edit mode="assign" name="hinting">
#BASE dc=example, dc=com
      <bool>true</bool>
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666
    </edit>
 
    <edit mode="assign" name="hintstyle">
BASE dc=scuola
      <const>hintslight</const>
URI ldap://localhost
    </edit>
 
    <edit mode="assign" name="rgba">
#SIZELIMIT 12
      <const>rgb</const>
#TIMELIMIT 15
    </edit>
#DEREF never
    <edit mode="assign" name="lcdfilter">
      <const>lcddefault</const>
    </edit>
    <edit mode="assign" name="dpi">
      <double>96</double>
    </edit>
  </match>
</fontconfig>
</pre>
</pre>
<br/>
che è quasi uguale a <code>local.conf</code> ma con l'uso di ''mode="assign"'' invece di ''mode="append"'', che permette di sovrascrivere le impostazioni di sistema ai singoli utenti.<br>
'''File <tt>/etc/smbldap-tools/smbldap_bind.conf</tt>'''
Creare anche il file <code>~/.Xresources</code> con il seguente contenuto (se già esistente aggiungere semplicemente queste righe):
<pre>
<pre>
############################
Xft.antialias: 1
# Credential Configuration #
Xft.hinting: 1
############################
Xft.hintstyle: hintslight
# Notes: you can specify two differents configuration if you use a
Xft.rgba: rgb
# master ldap for writing access and a slave ldap server for reading access
Xft.lcdfilter: lcddefault
# By default, we will use the same DN (so it will work for standard Samba
Xft.dpi: 96
# release)
slaveDN="cn=admin,dc=scuola"
slavePw="password"
masterDN="cn=admin,dc=scuola"
masterPw="password"
</pre>
</pre>
<br/>
Attivare le nuove impostazioni riavviando il server X (riavviando la sessione oppure il sistema).<br>
'''File <tt>/etc/smbldap-tools/smbldap.conf</tt>'''
Le impostazioni usate nel file creano un rendering uguale a quello di Ubuntu, che piace a molti utenti. Ovviamente sono delle impostazioni consigliate e potrete cambiarle a vostro piacimento. Ma, <u>cosa molto importante</u>, assicurarsi che i due file dell'utente utilizzino le stesse impostazioni, o si avranno problemi di omogeneità nella visualizzazione.
<pre>
# $Source: /opt/cvs/samba/smbldap-tools/smbldap.conf,v $
# $Id: smbldap.conf,v 1.17 2005/01/29 15:00:54 jtournier Exp $
#
# smbldap-tools.conf : Q & D configuration file for smbldap-tools


#  This code was developped by IDEALX (http://IDEALX.org/) and
=== Ambienti desktop ===
#  contributors (their names can be found in the CONTRIBUTORS file).
L'utente deve poi usare gli strumenti messi a disposizione dall'ambiente desktop in uso per modificare le impostazioni dei font, al fine di riprendere quelle dei due file utente appena esposti. Questo perché, come già detto sopra, alcuni ambienti desktop impostano i loro parametri predefiniti andando a sovrascrivere quelli di sistema e a volte anche quelli dei due file utente.
#
[[Image:Kde-font-rendering.jpg|thumb|150px|right|KDE 4]]
#                Copyright (C) 2001-2002 IDEALX
[[Image:Gnome-font-rendering.png|thumb|150px|right|GNOME 3]]
#
[[Image:Xfce-font-rendering.png|thumb|150px|right|Xfce]]
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 2
#  of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
#  USA.


#  Purpose :
#      . be the configuration file for all smbldap-tools scripts


##############################################################################
==== KDE 4/5 ====
#
In KDE le impostazioni si trovano in "Impostazioni di sistema" > "Aspetto delle applicazioni" > "Caratteri" > "Utilizza l'antialiasing per i caratteri". Qui è possibile scegliere tra ''Abilitato'' (consigliato), ''Disabilitato'' (sconsigliato) e ''Impostazioni di sistema'' ([http://bugs.kde.org/show_bug.cgi?id=245664 che funziona solo su KDE 5]). L'unica scelta logica per KDE 4 rimane quindi ''Abilitato'', dove poi è possibile con il tasto ''Configura'' cambiare le impostazioni (valori consigliati nell'immagine a destra).<br>
# General Configuration
KDE salva le impostazioni in <code>~/.config/fontconfig/fonts.conf</code>, modificandolo se già esistente (quindi in tal caso meglio controllare che non abbia stravolto qualcosa).
#
##############################################################################


# Put your own SID
# to obtain this number do: net getlocalsid
SID="S-1-5-21-954358294-1158571263-591329423"


##############################################################################
==== GNOME 3 ====
#
GNOME Shell imposta automaticamente una configurazione generica che non sfrutta bene le caratteristiche degli schermi LCD (e che va a sovrascrivere quella di sistema), per cui sarà necessario cambiarla. Per farlo bisogna prima installare il pacchetto <code>gnome-tweak-tool</code>, successivamente andare in "Preferenze" > "Impostazioni avanzate" > "Tipi di carattere" e da qui cambiare i valori di ''Hinting'' e ''Antialiasing'' con quelli che avete inserito nei due file utente.
# LDAP Configuration
#
##############################################################################


# Notes: to use to dual ldap servers backend for Samba, you must patch
# Samba with the dual-head patch from IDEALX. If not using this patch
# just use the same server for slaveLDAP and masterLDAP.
# Those two servers declarations can also be used when you have
# . one master LDAP server where all writing operations must be done
# . one slave LDAP server where all reading operations must be done
#  (typically a replication directory)


# Ex: slaveLDAP=127.0.0.1
==== Xfce ====
slaveLDAP="127.0.0.1"
In Xfce le impostazioni si trovano in "Impostazioni" > "Aspetto" > "Caratteri".
slavePort="389"


# Master LDAP : needed for write operations
# Ex: masterLDAP=127.0.0.1
masterLDAP="127.0.0.1"
masterPort="389"


# Use TLS for LDAP
==== LXDE, Mate, Cinnamon ====
# If set to 1, this option will use start_tls for connection
Anche questi ambienti desktop, come i precedenti, includono dei pannelli di configurazione per cambiare il rendering dei font.
# (you should also used the port 389)
ldapTLS="0"


# How to verify the server's certificate (none, optional or require)
# see "man Net::LDAP" in start_tls section for more details
verify="require"


# CA certificate
==== Altri desktop ====
# see "man Net::LDAP" in start_tls section for more details
Altri ambienti desktop o windows manager (come [[Enlightenment]], [[Openbox]], ecc.) potrebbero avere degli strumenti di configurazione dei font poco pratici, incompleti o non averne affatto. In questi casi, basta usare [[Migliorare_l%27aspetto_dei_font#Configurazione_utente|i due file utente]] per avere tutto configurato a dovere.
cafile="/etc/smbldap-tools/ca.pem"


# certificate to use to connect to the ldap server
<!-- Infinality non sembra più essere mantenuto stabilmente da nessuno, non rimuovo ma lascio il testo nascosto per consultazione o possibili futuri sviluppi -->
# see "man Net::LDAP" in start_tls section for more details
<!-- == Infinality ==
clientcert="/etc/smbldap-tools/smbldap-tools.pem"
Infinality è una combinazione di patch e configurazioni che puntano, come scrive l'autore [http://www.infinality.net/blog/infinality-freetype-patches/ 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.


# key certificate to use to connect to the ldap server
Principalmente, Infinality consiste di due parti:
# see "man Net::LDAP" in start_tls section for more details
*un set di patch da applicare al motore di rendering dei font ''FreeType'' per poterne cambiare alcuni parametri non modificabili a nostro piacimento;
clientkey="/etc/smbldap-tools/smbldap-tools.key"
*una configurazione di ''Fontconfig'' totalmente personalizzata, che va a sostituire quella standard. 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 elenca tutti i font senza istruzioni di hinting, li raggruppa in un insieme e abilita l'autohint solo per questo insieme).


# LDAP Suffix
Alcuni utenti che hanno provato Infinality non ne sono rimasti colpiti, altri hanno espresso un'opinione negativa. Probabilmente avranno giudicato senza provare a cambiare le molte opzioni di configurazione messe a disposizione, oppure non hanno installato alcuni dei font tipici dei sistemi operativi che cerca di imitare Infinality, che è un requisito importante.
# Ex: suffix=dc=IDEALX,dc=ORG
suffix="dc=scuola"


# Where are stored Users
Il creatore del progetto (conosciuto proprio con il nickname Infinality) non lavora più su questo progetto da tempo, e attualmente sembra abbandonato da parte sua. L'utente [https://github.com/bohoomil/fontconfig-ultimate bohoomil] cominciò a portare avanti il progetto autonomamente, poi ha avuto il [http://www.infinality.net/forum/viewtopic.php?f=2&t=350 riconoscimento ufficiale].<br>
# Ex: usersdn="ou=Users,dc=IDEALX,dc=ORG"
Bohoomil chiama il suo progetto [http://bohoomil.com/ Infinality ultimate], perché l'ha modificato sostanzialmente, aggiungendo ad esempio anche delle patch per la libreria ''Cairo'' e cambiando radicalmente le configurazioni di ''Fontconfig'' usate precedentemente.<br>
usersdn="ou=Users,${suffix}"


# Where are stored Computers
Comunque a detta di molti, il rendering di FreeType è ormai ottimo anche senza bisogno di queste patch, basta configurare per bene ''Fontconfig''.
# Ex: computersdn="ou=Computers,dc=IDEALX,dc=ORG"
computersdn="ou=Computers,${suffix}"


# Where are stored Groups
=== Installazione ===
# Ex groupsdn="ou=Groups,dc=IDEALX,dc=ORG"
Con le versioni precedenti c'era bisogno di fare un backup della configurazione in uso di fontconfig e poi di rimuovere i file di configurazione interessati, tutto manualmente. Con l'attuale versione è cambiato radicalmente il meccanismo di funzionamento interno e le vecchie configurazioni sono completamente bypassate e ignorate. Quando Infinality sarà rimosso, le vecchie configurazioni saranno ancora al loro posto e ritorneranno a funzionare automaticamente. L'unico file di cui si potrebbe fare un backup per sicurezza prima di installare è <code>/etc/fonts/fonts.conf</code>, in quanto è l'unico interessato a cambiamenti.<br>
groupsdn="ou=Groups,${suffix}"
Controllare anche che il file <code>/etc/X11/Xresources/x11-common</code> NON contenga righe con impostazioni [[Migliorare l'aspetto dei font#Xft|Xft]] (se sono presenti e non volete cancellarle direttamente si possono commentare con un '''''!''''' all'inizio della riga).


# Where are stored Idmap entries (used if samba is a domain member server)
Adesso si possono aggiornare <code>libfreetype6</code>, <code>libcairo2</code> e <code>libcairo-gobject2</code> con le versioni patchate e poi installare la configurazione di Infinality, contenuta in <code>fontconfig-infinality</code>:
# Ex groupsdn="ou=Idmap,dc=IDEALX,dc=ORG"
{| class="wikitable"
idmapdn="ou=Idmap,${suffix}"
|- align="center"
| '''Repository<br> completo''' || libfreetype6 || libcairo2 || libcairo-gobject2 || fontconfig-infinality
|- align="center"
| rowspan=2 | [https://drive.google.com/open?id=0B7AdLMiZn4FzT1FGTERscGtzc0E '''Wheezy'''] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzMnBpVlRzZTNjNVE i386] || n.d. || n.d. || rowspan=2 | [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzVnZXT3NUYW1rbVU all]
|- align="center"
| [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4Fzd3NidFRkTWRqejg amd64] || n.d. || n.d.
|- align="center"
| rowspan=2 | [https://drive.google.com/open?id=0B7AdLMiZn4FzZWVXYmM5TE5YVUE '''Jessie'''] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzcWhxblF6akRlRFk i386] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzRmx0enI2Wi1jWWM i386] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzT3JHRk5FSnB0MlE i386] || rowspan=2 | [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzelR3d21DOElEcWc all]
|- align="center"
| [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzX3FsS3p4dGFRVWM amd64] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzOG52Y19iYWtrazA amd64] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzektRMzJfRHJWMWM amd64]
|- align="center"
| rowspan=2 | [https://drive.google.com/open?id=0B7AdLMiZn4FzflZIWDFMWUxMR2F4WGQwQkRkcThsaFFxV2x1S0dGWjgzcEdlVjgtaGV5U2c '''Stretch/Sid'''] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzLWx5c2V3N29LaVE i386] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzcUFRUXJYOXhGLWs i386] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzclQtaVEwOXFic2s i386] || rowspan=2 | [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzeEJqR08ycE0yb3c all]
|- align="center"
| [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzS0haV1FtMWQ2anc amd64] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzaWFwNUw2MnJ1Ulk amd64] || [https://drive.google.com/uc?export=download&id=0B7AdLMiZn4FzMkQ4Zk55MlE5eFU amd64]
|}
Gli altri pacchetti, il codice sorgente e i log di compilazione sono disponibili nei repository completi (cliccare sul nome della distribuzione per accedervi).


# Where to store next uidNumber and gidNumber available
Se avete abilitato [[Usare pacchetti a 32 bit su sistemi a 64 bit|multiarch]], molto probabilmente avrete già installato entrambe le versioni ''i386'' e ''amd64'' delle librerie sopra, quindi dovrete aggiornarle entrambe. Per installare il tutto:
sambaUnixIdPooldn="sambaDomainName=SCUOLA,${suffix}"
<pre>
# dpkg -i ~/Scaricati/libfreetype6*infinality*.deb ~/Scaricati/libcairo*infinality*.deb ~/Scaricati/fontconfig-infinality*.deb
</pre>
I pacchetti usano un [https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version epoch] per evitare che, se si aggiorna il sistema ed è disponibile una nuova versione Debian di questi pacchetti, quelli patchati non vengano sovrascritti (perché avranno una versione maggiore).


# Default scope Used
=== Configurazione ===
scope="sub"
È fortemente raccomandato che il file <code>~/.Xresources</code> di ogni utente del sistema contenga le seguenti righe (se non esiste createlo):
<pre>Xft.antialias: 1
Xft.autohint: 0
Xft.dpi: 96
Xft.hinting: 1
Xft.hintstyle: hintfull
Xft.lcdfilter: lcddefault
Xft.rgba: rgb</pre>
e che si modifichino le impostazioni del proprio ambiente desktop ([[Migliorare_l%27aspetto_dei_font#Ambienti_desktop|vedi qui]]) affinché rispecchino questi parametri, altrimenti il risultato non sarà quello voluto e non soddisferà le aspettative.


# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)
La configurazione vera e propria di Infinality si modifica cambiando i preset di ''fontconfig-infinality'' e/o gli stili di ''freetype-infinality''.
hash_encrypt="SSHA"
Per cambiare i primi si usa il comando:
 
<pre>
# if hash_encrypt is set to CRYPT, you may set a salt format.
# fc-presets set
# default is "%s", but many systems will generate MD5 hashed
# passwords if you use "$1$%.8s". This parameter is optional!
crypt_salt_format="%s"
 
##############################################################################
#
# Unix Accounts Configuration
#
##############################################################################
 
# Login defs
# Default Login Shell
# Ex: userLoginShell="/bin/bash"
userLoginShell="/bin/bash"
 
# Home directory
# Ex: userHome="/home/%U"
userHome="/home/%U"
 
# Gecos
userGecos="System User"
 
# Default User (POSIX and Samba) GID
defaultUserGid="513"
 
# Default Computer (Samba) GID
defaultComputerGid="515"
 
# Skel dir
skeletonDir="/etc/skel"
 
# Default password validation time (time in days) Comment the next line if
# you don't want password to be enable for defaultMaxPasswordAge days (be
# careful to the sambaPwdMustChange attribute's value)
defaultMaxPasswordAge="99"
 
##############################################################################
#
# SAMBA Configuration
#
##############################################################################
 
# The UNC path to home drives location (%U username substitution)
# Ex: \\My-PDC-netbios-name\homes\%U
# Just set it to a null string if you want to use the smb.conf 'logon home'
# directive and/or disable roaming profiles
userSmbHome="\\lanserver\homes\%U"
 
# The UNC path to profiles locations (%U username substitution)
# Ex: \\My-PDC-netbios-name\profiles\%U
# Just set it to a null string if you want to use the smb.conf 'logon path'
# directive and/or disable roaming profiles
userProfile="\\lanserver\profiles\%U"
 
# The default Home Drive Letter mapping
# (will be automatically mapped at logon time if home directory exist)
# Ex: H: for H:
userHomeDrive="H:"
 
# The default user netlogon script name (%U username substitution)
# if not used, will be automatically username.cmd
# make sure script file is edited under dos
# Ex: %U.cmd
# userScript="startup.cmd" # make sure script file is edited under dos
userScript="%U.cmd"
 
# Domain appended to the users "mail"-attribute
# when smbldap-useradd -M is used
mailDomain="scuola"
 
##############################################################################
#
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
#
##############################################################################
 
# Allows not to use smbpasswd (if with_smbpasswd == 0 in smbldap_conf.pm) but
# prefer Crypt::SmbHash library
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
 
# Allows not to use slappasswd (if with_slappasswd == 0 in smbldap_conf.pm)
# but prefer Crypt:: libraries
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
</pre>
</pre>
<br/>
mentre per i secondi dovrete andare a modificare il file <code>/etc/X11/Xsession.d/99infinality-settings</code> alla riga 60, de-commentandola e cambiando il valore della variabile ''export INFINALITY_FT''; per conoscere i possibili valori da utilizzare leggete la lista ivi presente.<br>
'''File <tt>/etc/nsswitch.conf</tt>'''
Per applicare appieno le modifiche bisogna riavviare la sessione o il sistema.<br>
<pre>
È possibile creare anche altri preset e modificare finemente i parametri degli stili, ma per farlo rimando alla lettura del file <code>/etc/fonts/infinality.d/README</code> e di <code>/etc/X11/Xsession.d/99infinality-settings</code>.
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.


passwd:        compat ldap
È altresì consigliato installare alcuni dei font presenti tra i pacchetti raccomandati e suggeriti di <code>fontconfig-infinality*.deb (potete usare aptitude o Synaptic per vedere l'elenco e installarli in modo semplice).</code>
group:          compat ldap
shadow:        compat ldap


hosts:          files dns
=== Disinstallazione ===
networks:      files
Per rimuovere Infinality e ripristinare lo status quo ante:
 
protocols:      db files
services:      db files
ethers:        db files
rpc:            db files
 
netgroup:       nis
</pre>
<br/>
'''File <tt>/etc/pam.d/common-account</tt>'''
<pre>
<pre>
#
# dpkg --purge --force-depends libfreetype6 libcairo2 libcairo-gobject2 fontconfig-infinality
# /etc/pam.d/common-account - authorization settings common to all services
# apt-get install libfreetype6 libcairo2 libcairo-gobject2
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authorization modules that define
# the central access policy for use on the system.  The default is to
# only deny service to users whose accounts are expired in /etc/shadow.
#
account sufficient pam_ldap.so
account required pam_unix.so
</pre>
</pre>
<br>
o in caso di multiarch:
'''File <tt>/etc/pam.d/common-auth</tt>'''
<pre>
<pre>
#
# dpkg --purge --force-depends libfreetype6:i386 libcairo2:i386 libcairo-gobject2:i386 libfreetype6:amd64 libcairo2:amd64 libcairo-gobject2:amd64 fontconfig-infinality
# /etc/pam.d/common-auth - authentication settings common to all services
# apt-get install libfreetype6:i386 libcairo2:i386 libcairo-gobject2:i386 libfreetype6:amd64 libcairo2:amd64 libcairo-gobject2:amd64
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
# traditional Unix authentication mechanisms.
#
auth sufficient pam_ldap.so nullock_secure
auth required pam_unix.so use_first_pass
</pre>
</pre>
<br/>
La configurazione pre-Infinality verrà automaticamente ripristinata appieno dopo un riavvio. -->
'''File <tt>/etc/pam.d/common-password</tt>'''
 
<pre>
== Riferimenti ==
#
Per approfondimenti sulla rasterizzazione consiglio la lettura di [https://www.grc.com/cleartype.htm questo articolo], dettagliato ma comprensibile.<br>
# /etc/pam.d/common-password - password-related modules common to all services
Invece [http://www.rastertragedy.com/ quest'altro] è più simile ad una tesi di laurea, con un approccio più scientifico.
#
 
# This file is included from other service-specific PAM config files,
Altre fonti di informazione:<br>
# and should contain a list of modules that define  the services to be
http://wiki.debian.org/Fonts<br>
#used to change user passwords. The default is pam_unix
https://wiki.archlinux.org/index.php/Font_Configuration<br>
http://www.freedesktop.org/software/fontconfig/fontconfig-user.html<br>
http://www.keithp.com/~keithp/render/Xft.tutorial<br>
https://en.wikipedia.org/wiki/Pixels_per_inch<br>
http://weirdfellow.wordpress.com/2010/07/25/valid-autohinting-hinting-style-options/<br>
http://duganchen.ca/writings/slackware/fonts/<br>
http://www.antigrain.com/research/font_rasterization/index.html<br>
https://lists.ubuntu.com/archives/ubuntu-desktop/2008-December/001887.html<br>
http://www.webupd8.org/2013/06/better-font-rendering-in-linux-with.html<br>
https://en.wikipedia.org/wiki/Font_smoothing<br>
https://en.wikipedia.org/wiki/Font_hinting<br>
https://en.wikipedia.org/wiki/Cairo_(graphics)<br>


# The "nullok" option allows users to change an empty password, else
# empty passwords are treated as locked accounts.
#
# (Add `md5' after the module name to enable MD5 passwords)
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs. Also the "min" and "max" options enforce the length of the
# new password.


password  sufficient pam_ldap.so
{{Autori
password  required  pam_unix.so try_first_pass nullok obscure min=4 max=8 md5
| Autore = [[Utente:Gash|Gash]]
| Verificata_da =
: [[Utente:BubuXP|BubuXP]] 02:46, 21 mag 2013 (CEST)
: [[Utente:Keltik|keltik]] 17:02, 21 giu 2013 (CEST)
: [[Utente:Usmnunter|Usmnunter]] 07:22 17 ago 2014 (CEST)
| Numero_revisori = 3
| Estesa_da =
: [[Utente:BubuXP|BubuXP]] 02:46, 21 mag 2013 (CEST) (riscrittura totale)
: [[Utente:Danielsan|Danielsan]]
}}


# Alternate strength checking for password. Note that this
[[Categoria:Configurare Debian]]
# requires the libpam-cracklib package to be installed.
[[Categoria:Ottimizzazione del sistema]]
# You will need to comment out the password line above and
# uncomment the next two in order to use this.
# (Replaces the `OBSCURE_CHECKS_ENAB', `CRACKLIB_DICTPATH')
#
# password required   pam_cracklib.so retry=3 minlen=6 difok=3
# password required   pam_unix.so use_authtok nullok md5
</pre>
<br/>
'''File <tt>/etc/pam.d/common-session</tt>'''
<pre>
#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of sessions of *any* kind (both interactive and
# non-interactive).  The default is pam_unix.
#
session sufficient pam_ldap.so
session required pam_unix.so
</pre>
<br/>
----
: [[Utente:Ferdybassi|Ferdybassi]] 04:46, 31 Dic 2006 (CST)

Versione attuale delle 23:38, 19 lug 2017

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 7 "wheezy"
Debian 8 "jessie"

Introduzione

Molti nuovi utenti di Debian, specie se provengono da altre distribuzioni Linux più "rifinite", si lamentano del brutto aspetto che hanno i caratteri, (anche se ad alcuni invece piacciono, de gustibus). Il problema risiede nella configurazione predefinita di Debian, che non imposta il rendering dei caratteri adeguatamente. Nelle ultime versioni di Debian la situazione "out of the box" è un po' migliorata, ma si può fare di più.

Ci sono vari modi e tanti parametri per migliorare il rendering, di seguito si farà un'esposizione quanto più esplicativa possibile (spero). Ulteriori approfondimenti tecnici sull'argomento si possono reperire nell'ultimo capitolo "Riferimenti".
A chi invece interessa solo il risultato finale può leggere direttamente la "Guida rapida".

In passato, prima di cominciare si sarebbe dovuto controllare che fossero state installate le librerie responsabili della gestione e visualizzazione dei font, e cioè FreeType, Fontconfig, FriBidi, HarfBuzz, Pango, Xft e Cairo, ma ora sarebbe un controllo superfluo, dato che queste librerie sono dipendenze di molti software e dei principali ambienti desktop. Quasi tutti i software che utilizzano una GUI avranno tra le dipendenze anche qualcuna di queste librerie.

Se invece si utilizza Debian senza un interfaccia grafica, e quindi si visualizzano a schermo solo dei caratteri bitmap, questa guida potrebbe risultare utile solo per il paragrafo che riguarda la console Linux.

Fontconfig

Fontconfig è la libreria responsabile di fornire l'elenco dei caratteri disponibili nel sistema alle applicazioni e tra le varie funzioni c'è anche quella di indicare a FreeType come disegnare i caratteri. Ha un linguaggio di configurazione in XML che permette un'elevata personalizzazione, ma che ne limita la semplicità d'uso. Ad esempio può essere configurato per usare l'antialiasing su tutti i font tranne che su quelli di lingue orientali, oppure può disabilitare l'hinting su uno specifico font quando questo è di dimensioni inferiori a 8 punti.

La configurazione predefinita 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 /usr/share/fontconfig/conf.avail/ 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 o rimossi 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 impostare con Fontconfig per migliorare l'aspetto del font. Invece di creare dei file con le configurazioni mancanti in conf.d/ diventa molto più pratico ricorrere ad un altro metodo, illustrato di seguito.

Dopo aver letto le configurazioni in conf.d/, Fontconfig ne cerca delle altre nel file /etc/fonts/local.conf e poi in ~/.config/fontconfig/fonts.conf. Entrambi i file non esistono inizialmente, e sono creati dall'utente o da qualche applicazione. Le impostazioni contenute in /etc/fonts/local.conf sono applicate a tutti gli utenti del sistema, mentre quelle in ~/.config/fontconfig/fonts.conf risiedono nella home dell'utente e sono applicate solo a quell'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. ~/.config/fontconfig/fonts.conf
  4. impostazioni font degli ambienti desktop (che usano Xft)

A seconda di come sono impostati i parametri all'interno delle configurazioni, ciò potrebbe rendere nulla la priorità. Per esempio usando mode="assign" per impostare un valore, questo rimarrà tale anche se ne verrà impostato uno diverso successivamente; per informazioni man fonts-conf.

Ecco la configurazione suggerita 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>

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

<!-- Abilitando l'autohinter verranno ignorate le istruzioni di hinting
     contenute nei font e verrà usato invece un algoritmo generico di
     hinting che risulta spesso peggiore ma potrebbe migliorare la
     visualizzazione dei font che non hanno istruzioni incorporate, come
     molti font nel formato OpenType.
     Nelle più recenti versioni di FreeType, se l'hintstyle è impostato su
     "hintslight", verrà usato automaticamente l'autohinter se il font non
     contiene le istruzioni incorporate, quindi meglio ignorare questa
     opzione, così da essere gestita automaticamente. -->
<!--
		<edit mode="append" name="autohint">
			<bool>false</bool>
		</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>

<!-- Rifiuta i font Type 1 perché non hanno un buon rendering -->
	<selectfont><rejectfont><pattern>
		<patelt name="fontformat"><string>Type 1</string></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 ~/.config/fontconfig/fonts.conf bisognerebbe sostituire tutti i mode="append" presenti con mode="assign" per far convivere configurazioni di sistema e dell'utente 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 ~/.config/fontconfig/fonts.conf

poi incollare il modello sopra, eventualmente modificarlo e salvare il file.
Dopo rigeneriamo le cache dei font (di sistema e dell'utente) con:

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

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

La configurazione sopra riportata è uno "standard" che cerca di fornire il miglior risultato possibile sulla maggior parte dei sistemi. Però ci sono tanti fattori da considerare se l'aspetto dei font con questa configurazione non è ancora soddisfacente. Potrebbe essere ad esempio per via del monitor che usa uno schema subpixel BGR (casi 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 "Full" o abilitando "autohint". 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.
Meglio ancora, si possono specificare delle impostazioni specifiche per un determinato font, se questo appare meglio con impostazioni diverse da quelle generali. Nell'esempio seguente, vengono specificati alcuni parametri per il carattere Oxygen-Sans:

  <match target="font">
    <test name="force_autohint">
      <bool>false</bool>
    </test>
    <test name="family">
      <string>Oxygen-Sans</string>
    </test>
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="hinting" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="hintstyle" mode="assign">
      <const>hintfull</const>
    </edit>
    <edit name="autohint" mode="assign">
      <bool>false</bool>
    </edit>
  </match>

C'è da considerare anche che l'ambiente desktop in uso può cambiare questi parametri, modificando direttamente il file ~/.config/fontconfig/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" (Greyscale 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 già usati nei vostri /etc/fonts/local.conf e/o ~/.config/fontconfig/fonts.conf.
  • 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 ~/.config/fontconfig/fonts.conf. 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 KDE4 (non presente in KDE5) imposta sempre e comunque dei parametri di hinting predefiniti in ~/.config/fontconfig/fonts.conf anche se l'utente sceglie di mantenere quelli di sistema; quindi l'unica soluzione al momento è impostare i parametri così come in GNOME3.

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.

Il modello di configurazione esposto nel paragrafo precedente è già uguale a quella di Ubuntu, quindi basta usare quella configurazione 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.83-1.1_all.deb

Debian 7 e precedenti

A partire dalla versione 2.10 di Fontconfig (da Debian 8 "Jessie" in poi) sono cambiate le posizioni di alcuni file di configurazione, ma sarà mantenuta la compatibilità con alcuni dei vecchi percorsi ancora per qualche versione. Ecco una tabella comparativa:

Percorso attuale Vecchio percorso
Directory di configurazione utente ~/.config/fontconfig/conf.d/ ~/.fonts.conf.d/
File di configurazione utente ~/.config/fontconfig/fonts.conf ~/.fonts.conf
Directory caratteri utente ~/.local/share/fonts/ ~/.fonts/
Cache caratteri utente ~/.cache/fontconfig/ ~/.fontconfig/
Configurazioni sistema disponibili /usr/share/fontconfig/conf.avail/ /etc/fonts/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 non dovrebbe esserci necessità di configurare Xft ma, come vedremo più avanti, può essere meglio impostarne manualmente i parametri per un risultato finale migliore. Per farlo è consigliabile usare gli stessi valori presenti in ~/.config/fontconfig/fonts.conf o /etc/fonts/local.conf per evitare possibili 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 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.

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


! FreeType can set this automatically, better not forcing this on or off.

!Xft.autohint: 0


! Fontconfig will default to the Xft.dpi variable if it is set.
! Xft.dpi is usually set by desktop environments (usually to Xorg 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.

Da notare però che KDE 5 (e probabilmente anche altri ambienti desktop) sovrascrivono questi valori con quelli impostati nelle loro schermate di configurazione. Per fare una prova empirica, impostiamo ~/.Xresources come sopra e poi mettiamo dei valori diversi in KDE 5 > Impostazioni di sistema > Carattere, e per l'esattezza Tipo di sub-pixel hinting "BGR" e Stile di hinting "Intero". Se riavviamo la sessione e controlliamo i valori Xft attuali con il comando:

$ xrdb -query | grep Xft

i due valori cambiati, e cioè Xft.hintstyle e Xft.rgba, corrisponderanno a quelli di KDE 5 e non a quelli di ~/.Xresources.
È tuttavia consigliato impostare ugualmente questi valori in ~/.Xresources perché KDE 5 non modifica tutti i valori (ad es. Xft.autohint e Xft.lcdfilter non sembrano essere presi in considerazione). E dato che molte applicazioni in GTK sembrano dipendere da Xft per il loro rendering (es. Synaptic), avere tutte le impostazioni configurate a dovere e con gli stessi valori tra fontconfig, Xft e ambiente desktop, risulterà in un aspetto uniforme tra le varie applicazioni, a prescindere che siano in Qt, in GTK o altri toolkit.

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 quel 102.46 con il DPI del vostro schermo. Questo è il metodo più veloce ma se volete approfondire ci sono altri modi per impostare il DPI su Xorg, leggete ad esempio qui.
Se si ha una postazione multi-schermo o si collega spesso un monitor esterno, potrete trovare informazioni molto utili su come configurare in questi casi in questa guida qui.
Una volta impostato il DPI, potete verificare che questo sia giusto aprendo un qualsiasi file pdf in formato A4 (come questo), mettendo lo zoom al 100% e sovrapponendo sul foglio nello schermo un foglio reale di carta in A4: se le dimensioni sono uguali il calcolo e la configurazione sono andati a buon fine.

Info.png 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 di KDE, okular). Provando ad installare ed usare evince (il visualizzatore predefinito di GNOME) su KDE 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 | grep -i dpi

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 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 ~/.config/fontconfig/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. 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 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 è meglio non usare questa, perché appunto di sistema. I font vanno inseriti in ~/.local/share/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 (archivio .zip), basta estrarli direttamente nella directory dei font dell'utente e aggiornare la cache dei font con:

$ unzip ubuntu-font-family-0.83.zip -d ~/.local/share/fonts/
$ fc-cache -fv

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

# unzip ubuntu-font-family-0.83.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.x / 10: Segoe UI
- Mac OS X: Lucida Grande
- iOS: Helvetica Neue
- ultime versioni di OSX e iOS: San Francisco
- Android (< 4.0): famiglia di caratteri Droid (presente in Debian)
- Android: Roboto (presente in Debian)
- Ubuntu: la già citata famiglia di caratteri Ubuntu
- Gnome 3: Cantarell (presente in Debian)
- KDE 5: Oxygen (presente da Debian Stretch)
Sul web ci sono tanti siti con collezioni di font, come Google 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

Guida rapida

Questa guida è un estratto di quanto scritto finora e serve da riferimento rapido, ma tralascia dei particolari (come ad esempio il DPI). Se non siete alle prime armi e volete più controllo sulla configurazione, consiglio di leggere tutta la guida.

Configurazione di sistema

Come utente root creare il file /etc/fonts/local.conf con un editor di testi (es. nano):

# nano /etc/fonts/local.conf

e incollare quanto segue:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="pattern">
    <edit mode="append" name="antialias">
      <bool>true</bool>
    </edit>
    <edit mode="append" name="hinting">
      <bool>true</bool>
    </edit>
    <edit mode="append" name="hintstyle">
      <const>hintslight</const>
    </edit>
    <edit mode="append" name="rgba">
      <const>rgb</const>
    </edit>
    <edit mode="append" name="lcdfilter">
      <const>lcddefault</const>
    </edit>
    <edit mode="append" name="embeddedbitmap">
      <bool>false</bool>
    </edit>
  </match>
  <selectfont><rejectfont><pattern>
    <patelt name="scalable"><bool>false</bool></patelt>
  </pattern></rejectfont></selectfont>
  <selectfont><rejectfont><pattern>
    <patelt name="fontformat"><string>Type 1</string></patelt>
  </pattern></rejectfont></selectfont>
</fontconfig>

Il rendering ottenuto con queste impostazioni sarà adottato in modo predefinito da tutti gli utenti del sistema, anche dalla schermata iniziale di login. Ma ogni utente può cambiare queste impostazioni nel proprio profilo, come spiegato di seguito (e spesso deve farlo perché alcuni ambienti desktop tendono a sovrascrivere le preferenze di sistema in modo predefinito, anche se non impostate dall'utente).

Configurazione utente

A livello utente:

  • se si usa Wheezy (o versioni precedenti) creare o cambiare il file ~/.fonts.conf
  • se si usa Jessie (o versioni successive) creare o cambiare il file ~/.config/fontconfig/fonts.conf

Il contenuto del file è il seguente:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="font">
    <edit mode="assign" name="antialias">
      <bool>true</bool>
    </edit>
    <edit mode="assign" name="hinting">
      <bool>true</bool>
    </edit>
    <edit mode="assign" name="hintstyle">
      <const>hintslight</const>
    </edit>
    <edit mode="assign" name="rgba">
      <const>rgb</const>
    </edit>
    <edit mode="assign" name="lcdfilter">
      <const>lcddefault</const>
    </edit>
    <edit mode="assign" name="dpi">
      <double>96</double>
    </edit>
  </match>
</fontconfig>

che è quasi uguale a local.conf ma con l'uso di mode="assign" invece di mode="append", che permette di sovrascrivere le impostazioni di sistema ai singoli utenti.
Creare anche il file ~/.Xresources con il seguente contenuto (se già esistente aggiungere semplicemente queste righe):

Xft.antialias: 1
Xft.hinting: 1
Xft.hintstyle: hintslight
Xft.rgba: rgb
Xft.lcdfilter: lcddefault
Xft.dpi: 96

Attivare le nuove impostazioni riavviando il server X (riavviando la sessione oppure il sistema).
Le impostazioni usate nel file creano un rendering uguale a quello di Ubuntu, che piace a molti utenti. Ovviamente sono delle impostazioni consigliate e potrete cambiarle a vostro piacimento. Ma, cosa molto importante, assicurarsi che i due file dell'utente utilizzino le stesse impostazioni, o si avranno problemi di omogeneità nella visualizzazione.

Ambienti desktop

L'utente deve poi usare gli strumenti messi a disposizione dall'ambiente desktop in uso per modificare le impostazioni dei font, al fine di riprendere quelle dei due file utente appena esposti. Questo perché, come già detto sopra, alcuni ambienti desktop impostano i loro parametri predefiniti andando a sovrascrivere quelli di sistema e a volte anche quelli dei due file utente.

KDE 4
GNOME 3
Xfce


KDE 4/5

In KDE le impostazioni si trovano in "Impostazioni di sistema" > "Aspetto delle applicazioni" > "Caratteri" > "Utilizza l'antialiasing per i caratteri". Qui è possibile scegliere tra Abilitato (consigliato), Disabilitato (sconsigliato) e Impostazioni di sistema (che funziona solo su KDE 5). L'unica scelta logica per KDE 4 rimane quindi Abilitato, dove poi è possibile con il tasto Configura cambiare le impostazioni (valori consigliati nell'immagine a destra).
KDE salva le impostazioni in ~/.config/fontconfig/fonts.conf, modificandolo se già esistente (quindi in tal caso meglio controllare che non abbia stravolto qualcosa).


GNOME 3

GNOME Shell imposta automaticamente una configurazione generica che non sfrutta bene le caratteristiche degli schermi LCD (e che va a sovrascrivere quella di sistema), per cui sarà necessario cambiarla. Per farlo bisogna prima installare il pacchetto gnome-tweak-tool, successivamente andare in "Preferenze" > "Impostazioni avanzate" > "Tipi di carattere" e da qui cambiare i valori di Hinting e Antialiasing con quelli che avete inserito nei due file utente.


Xfce

In Xfce le impostazioni si trovano in "Impostazioni" > "Aspetto" > "Caratteri".


LXDE, Mate, Cinnamon

Anche questi ambienti desktop, come i precedenti, includono dei pannelli di configurazione per cambiare il rendering dei font.


Altri desktop

Altri ambienti desktop o windows manager (come Enlightenment, Openbox, ecc.) potrebbero avere degli strumenti di configurazione dei font poco pratici, incompleti o non averne affatto. In questi casi, basta usare i due file utente per avere tutto configurato a dovere.


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 Swirl-auth80.png Debianized 80%
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)
Usmnunter 07:22 17 ago 2014 (CEST)

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