[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 134.   Configurazione e personalizzazione

Durante la fase di installazione di un sistema GNU, è normale per le varie distribuzioni di prendersi cura di un minimo di configurazione del sistema, soprattutto per ciò che riguarda le convenzioni nazionali. A questo proposito è bene conoscere l'uso di due termini comuni:

Ci sono aspetti della configurazione che riguardano il sistema nel suo complesso, come la definizione della mappa della tastiera, oppure solo una sessione di lavoro particolare. Questo significa che parte della configurazione è riservata all'amministratore, mentre il resto può essere modificato dal singolo utente, senza interferire sull'attività degli altri.

In questo capitolo si fa riferimento a concetti che possono essere chiariti solo in capitoli successivi, in particolare ciò che riguarda la shell e con essa la definizione delle variabili di ambiente. In particolare, gli esempi mostrati fanno riferimento alle shell compatibili con quella di Bourne.

Nei capitoli 110 e 111 viene descritta la configurazione della tastiera per l'uso con la console di un sistema GNU/Linux.

Nel capitolo 219 viene descritta la configurazione della tastiera con il sistema grafico X.

134.1   Frammentazione del sistema di configurazione

Lo sconforto maggiore per chi si avvicina a un sistema operativo Unix (quali i sistemi GNU) per la prima volta, è dato dalla complessità del sistema di configurazione. Il problema è che non esiste una «autorità» unica di configurazione, perché le esigenze di questo tipo sono dinamiche, in funzione delle caratteristiche particolari dei programmi utilizzati.

A ben guardare, questo problema riguarda qualunque sistema operativo che abbia un minimo di complessità.

134.1.1   Collocazione

In linea di massima si distinguono due livelli: la configurazione globale del sistema, definita nei file contenuti nella directory /etc/ che sono di competenza dell'amministratore del sistema; la configurazione particolare di ogni utente, definita da una serie di file contenuti nelle rispettive directory personali (home), che si distinguono perché generalmente iniziano con un punto singolo.

La configurazione globale dovrebbe essere predisposta in modo da garantire i servizi previsti e la sicurezza richiesta dalle caratteristiche del sistema. Oltre a questo, dovrebbe offrire un'impostazione standard per gli utenti che poi potrebbero limitarsi a modificare il minimo indispensabile.

134.1.2   Sequenza

Si possono distinguere tre fasi nella definizione della configurazione del sistema:

  1. la procedura di inizializzazione del sistema (Init);

  2. lo script di configurazione globale della shell (nel caso di quelle derivate dalla shell di Bourne si tratta di /etc/profile);

  3. lo script di configurazione personale della shell (per esempio ~/.profile, o qualcosa di simile);

  4. i programmi avviati successivamente utilizzano i loro metodi di configurazione, basati eventualmente su file di configurazione globale collocati nella directory /etc/, su file di configurazione personalizzata collocati nelle directory personali degli utenti che li utilizzano, sulla presenza e sul contenuto di variabili di ambiente determinate.

La prima fase viene eseguita una volta sola all'atto dell'avvio del sistema. Serve per attivare i servizi previsti, generalmente in forma di programmi demone, oltre che per fissare alcuni elementi di configurazione che non possono essere demandati in alcun caso alla gestione da parte degli utenti comuni.

In questa fase, tra le altre cose, viene impostata la mappa della tastiera, si definiscono le interfacce di rete e gli instradamenti.

Tutto questo, naturalmente, può essere modificato dall'amministratore durante il funzionamento del sistema, attraverso comandi opportuni, ma è bene che il meccanismo funzioni correttamente all'avvio, in modo da ridurre i problemi.

La maggior parte delle distribuzioni GNU è organizzata in modo che uno script di questa procedura di avvio del sistema sia destinato a essere eseguito per ultimo. Il nome è solitamente rc.local e potrebbe trovarsi nella directory /etc/rc.d/ o /etc/init.d/. Questo script è il luogo conveniente per aggiungere l'avvio di alcuni servizi eccezionali o per definire parte della configurazione di rete, quando non si riesce a intervenire in modo più elegante.

Superata la fase di avvio sotto il controllo della procedura di inizializzazione del sistema, Init mette in funzione i programmi Getty che si occupano di attivare la procedura di accesso attraverso i terminali previsti (console inclusa). L'accesso attraverso uno di questi terminali fa sì che venga avviata la shell definita per quell'utente particolare.

Le shell usuali utilizzano uno script di configurazione globale, collocato nella directory /etc/ e almeno uno personalizzato nella directory personale dell'utente: prima viene eseguito quello globale, quindi quello personalizzato.

Gli script di configurazione delle shell sono utilizzati prevalentemente per definire alcune variabili di ambiente utili per controllare il comportamento della shell stessa e di tutti i programmi che ne possono avere bisogno.

134.1.3   Effetto

È importante rendersi conto che le variabili di ambiente sono delle entità definite all'interno di un processo e si trasmettono ai processi discendenti con gli stessi valori, fino a quando non vengono modificate in qualche modo.

Questo significa anche che processi paralleli, avviati dallo stesso utente, possono avere configurazioni differenti per ciò che riguarda le variabili di ambiente, proprio perché questo «ambiente» viene modificato.

I programmi consentono spesso l'utilizzo di una configurazione basata sulla combinazione dell'uso di file e di variabili di ambiente, dove queste ultime hanno il sopravvento.

134.2   Configurazione in base alla nazionalità: localizzazione

La configurazione più importante a cui dovrebbe provvedere ogni singolo utente, è la definizione della localizzazione. Attraverso questa, con i programmi che sono in grado di riconoscerla e di adattarsi di conseguenza, si può specificare il linguaggio, l'insieme di caratteri e altre opzioni che dipendono tipicamente dalle convenzioni nazionali e locali.

Questo tipo di configurazione avviene attraverso la definizione di variabili di ambiente opportune.

La sigla «i18n» rappresenta scherzosamente il termine internationalization, in quanto la prima e l'ultima lettera, «i» e «n», sono separate da 18 caratteri. Nello stesso modo e con lo stesso ragionamento, la sigla «l10n» rappresenta il termine localization.

134.2.1   Disponibilità della localizzazione

Prima di configurare determinate variabili per attivare la localizzazione nei programmi che ne sono predisposti, occorre verificare che il sistema sia in grado di fornire le informazioni necessarie ai programmi. Infatti, a parte l'uso di variabili di ambiente, cosa che rappresenta solo l'aspetto più esterno del problema, occorre che siano stati definiti una serie di file di conversione per il tipo di localizzazione che si intende ottenere.

Si ottiene un elenco dei nomi utilizzabili per definire la localizzazione con il comando seguente:

locale -a[Invio]

Il vero problema nella localizzazione sta nel fatto che i nomi utilizzabili per definirla non sono standard e occorre almeno fare una piccola verifica in questo modo, una volta stabilito come si vuole agire.

I file di conversione utilizzati dal sistema per sostenere la localizzazione dovrebbero trovarsi a partire dalla directory /usr/share/locale/, dalla quale si diramano tante directory quanti sono effettivamente i tipi di localizzazioni gestibili.

Se nell'elenco ottenuto non c'è ciò che serve alla propria lingua, è molto probabile che non siano state compilate le informazioni necessarie a partire dai sorgenti di queste. A tale proposito si può consultare il capitolo 103.

134.2.2   Scelta della definizione

La localizzazione, così come risulta organizzata in questo momento, può essere definita solo in base all'appartenenza a un certo paese, o al massimo, in alcuni casi, a una certa regione. Per la precisione, questa regionalizzazione si basa sulla scelta di una lingua e di una nazione (si pensi al caso della Svizzera che ha tre lingue nazionali). Eventualmente è consentito scegliere l'insieme di caratteri.

La tabella 134.1 mostra l'elenco di alcuni codici tipici per la definizione della localizzazione.

Tabella 134.1. Alcuni codici per la definizione della localizzazione.

Nome Descrizione
it_IT
Lingua italiana, nazionalità italiana, codifica predefinita.
it_IT.ISO-8859-1
Lingua italiana, nazionalità italiana, codifica ISO 8859-1.
it_IT.UTF-8
Lingua italiana, nazionalità italiana, codifica UTF-8.
de_DE
Lingua tedesca, nazionalità tedesca, codifica predefinita.
de_DE.ISO-8859-1
Lingua tedesca, nazionalità tedesca, codifica ISO 8859-1.
de_DE.UTF-8
Lingua tedesca, nazionalità tedesca, codifica UTF-8.
fr_FR
Lingua francese, nazionalità francese, codifica predefinita.
fr_FR.ISO-8859-1
Lingua francese, nazionalità francese, codifica ISO 8859-1.
fr_FR.UTF-8
Lingua francese, nazionalità francese, codifica UTF-8.
it_CH
Lingua italiana, nazionalità svizzera, codifica predefinita.
it_CH.ISO-8859-1
Lingua italiana, nazionalità svizzera, codifica ISO 8859-1.
it_CH.UTF-8
Lingua italiana, nazionalità svizzera, codifica UTF-8.
de_CH
Lingua tedesca, nazionalità svizzera, codifica predefinita.
de_CH.ISO-8859-1
Lingua tedesca, nazionalità svizzera, codifica ISO 8859-1.
de_CH.UTF-8
Lingua tedesca, nazionalità svizzera, codifica UTF-8.
fr_CH
Lingua francese, nazionalità svizzera, codifica predefinita.
fr_CH.ISO-8859-1
Lingua francese, nazionalità svizzera, codifica ISO 8859-1.
fr_CH.UTF-8
Lingua francese, nazionalità svizzera, codifica UTF-8.
de_AT
Lingua tedesca, nazionalità austriaca, codifica predefinita.
de_AT.ISO-8859-1
Lingua tedesca, nazionalità austriaca, codifica ISO 8859-1.
de_AT.UTF-8
Lingua tedesca, nazionalità austriaca, codifica UTF-8.

Per l'Italia, la definizione corretta, completa, dovrebbe essere it_IT.UTF-8, oppure it_IT.ISO-8859-1 se si preferisce usare una codifica tradizionale.

Prima di proseguire, è il caso di insistere sul fatto che tra un sistema Unix e l'altro, le definizioni usate per distinguere i vari tipi di localizzazione potrebbero essere anche molto diverse. Seguono gli esempi di alcuni modi possibili, ma non sempre validi, per rappresentare la localizzazione italiana, specificando eventualmente la codifica UTF-8:

134.2.3   Variabili per la localizzazione

Una volta stabilita la definizione da adottare per l'impostazione corretta della localizzazione, si deve passare alla «attivazione» delle variabili di ambiente desiderate, assegnando loro le scelte rispettive. Per controllare l'effetto di una configurazione particolare, basta usare locale senza argomenti.

LC_ALL

Questa variabile serve a definire in un colpo solo tutta la localizzazione, sovrapponendosi a tutte le altre variabili di ambiente destinate a questo scopo, qualunque sia il loro contenuto effettivo. Per questo motivo è decisamente sconsigliabile il suo utilizzo, almeno in una configurazione accurata.

Un buon motivo per evitare di utilizzare questa variabile è quello per cui alcuni applicativi, come Perl, non accettano l'incoerenza tra questa variabile e altre del gruppo LC_*, rendendo inutile l'uso di una variabile che si impone sulle altre.

LANG

LANG permette di definire la localizzazione predefinita per le variabili del gruppo LC_* che non siano state definite. Per questo, è molto importante definire e assegnare un valore alla variabile LANG, in modo da garantire il supporto per tutti i vari aspetti della localizzazione, anche se non specificati esplicitamente. Segue un esempio di script per configurare la variabile LANG secondo la localizzazione italiana predefinita:

#!/bin/sh
...
LANG=it_IT.UTF-8
export LANG
LC_COLLATE

Questa variabile permette di definire l'ordine dei caratteri, influenzando le operazioni di ordinamento (vero e proprio) e in generale quelle di confronto. Segue un esempio:

#!/bin/sh
...
LC_COLLATE=it_IT.UTF-8
export LC_COLLATE
LC_CTYPE

Questa variabile permette di definire l'insieme di caratteri. Ciò può avere effetto sulla loro rappresentazione, sull'abbinamento tra minuscole e maiuscole, sulla classificazione dei caratteri; per esempio: numerici, alfabetici, di punteggiatura e diversi. Segue un esempio:

#!/bin/sh
...
LC_CTYPE=it_IT.UTF-8
export LC_CTYPE
LC_NUMERIC

Questa variabile permette di definire il modo di rappresentazione dei numeri. A livello pratico, quello che si può ottenere è lo scambio tra il punto e la virgola per la rappresentazione della parte numerica decimale e per la separazione delle migliaia. Segue un esempio:

#!/bin/sh
...
LC_NUMERIC=it_IT.UTF-8
export LC_NUMERIC
LC_MONETARY

Questa variabile permette di definire il modo di rappresentazione delle valute: il simbolo di valuta, il numero di decimali da adottare e altre caratteristiche eventuali.

LC_TIME

Questa variabile permette di definire la rappresentazione delle informazioni data-orario. Si tratta di un'impostazione importante, perché, tra le altre cose, fa sì che i comandi di sistema restituiscano i nomi dei mesi e dei giorni della settimana in italiano. Segue un esempio:

#!/bin/sh
...
LC_TIME=it_IT.UTF-8
export LC_TIME

L'esempio successivo mostra come potrebbe essere visualizzata la data dal comando date, quando la variabile LC_TIME è configurata per la localizzazione italiana.

date[Invio]

dom ago  2 15:35:48 CEST 1998

134.2.4   Definizioni standard di localizzazione

Esistono due definizioni locali standard che è bene conoscere: C e POSIX. Entrambe rappresentano la stessa impostazione: quella predefinita in mancanza di altre definizioni.

134.2.5   Utilizzo di «locale»

Il programma locale (1) permette di conoscere l'impostazione del proprio sistema di localizzazione ed è utile per verificare la configurazione delle variabili di ambiente relative.

locale [opzioni]

Tabella 134.8. Alcune opzioni.

Opzione Descrizione
-a
--all-locale
Emette l'elenco di tutti i nomi utilizzabili nelle definizioni di localizzazione.
-m
--charmaps
Emette l'elenco di tutti i nomi riferiti a definizioni di mappe di caratteri.

Utilizzando locale senza argomenti, si ottiene la situazione corrente dell'impostazione della localizzazione. Si supponga di ottenere quanto segue:

locale[Invio]

LANG=POSIX
LC_CTYPE=it_IT
LC_NUMERIC="POSIX"
LC_TIME=it_IT.UTF-8
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_ALL=

Quanto ottenuto in questo esempio rappresenta l'impostazione delle sole variabili LC_CTYPE e LC_TIME, con impostazioni simili e di fatto equivalenti. Tutte le altre variabili, non essendo state definite, sono impostate secondo la localizzazione POSIX, che è quella predefinita.

134.3   Insieme di caratteri

In linea di massima, la localizzazione definita attraverso le variabili di ambiente LC_*, descritte nelle sezioni precedenti, dovrebbe essere sufficiente per stabilire implicitamente anche le esigenze relative all'insieme dei caratteri utilizzato per la visualizzazione dei dati. In pratica, la localizzazione it_IT.UTF-8 dovrebbe stabilire che l'insieme dei caratteri è quello universale (ISO 10646), secondo la codifica UTF-8. In pratica, alcuni programmi ignorano la localizzazione, oppure sono configurati in modo predefinito in senso contrario.

134.3.1   Variabile di ambiente «LESSCHARSET»

Il programma less, utilizzato generalmente per lo scorrimento a video del testo delle pagine di manuale, è sensibile al contenuto della variabile LESSCHARSET. In situazioni particolari, per visualizzare correttamente del testo che contenga lettere accentate e altri simboli utilizzati nella codifica UTF-8 (insieme di caratteri universale ISO 10646), potrebbe essere necessario che contenga la stringa utf-8.

#!/bin/sh
...
LESSCHARSET=utf-8
export LESSCHARSET

L'esempio mostra un pezzo di uno script attraverso cui viene definita la variabile LESSCHARSET nel modo descritto.

134.3.2   File «/etc/man.config» o «/etc/manpath.config»

Il programma man può essere configurato attraverso il file /etc/man.config o /etc/manpath.config. Questo file serve a definire una serie di comportamenti di man e in particolare gli argomenti da utilizzare per i programmi usati per la formattazione del testo della documentazione tradizionale.

I programmi groff e geqn, quando vengono usati per generare il testo da visualizzare a video (testo che poi viene gestito attraverso more o less), potrebbero richiedere l'uso dell'opzione -T con l'argomento utf8 (quando si intende utilizzare tale codifica), in modo da consentire l'emissione di caratteri secondo la codifica UTF-8. Nel caso si dovessero riscontrare problemi a visualizzare le lettere accentate, la configurazione con il file /etc/man.config potrebbe essere cambiata in modo simile a quella seguente:

TROFF           /usr/bin/groff -Tps -mandoc
NROFF           /usr/bin/groff -Tutf8 -mandoc
EQN             /usr/bin/geqn -Tps
NEQN            /usr/bin/geqn -Tutf8
TBL             /usr/bin/gtbl
# COL           /usr/bin/col
REFER           /usr/bin/grefer
PIC             /usr/bin/gpic
VGRIND          
GRAP            
PAGER           /usr/bin/less -is
CAT             /bin/cat

Nell'esempio appena mostrato si vede in particolare l'uso dell'opzione -Tutf8 per groff e geqn, quando questi programmi servono per generare testo da visualizzare attraverso lo schermo a caratteri. Nell'esempio successivo si vede come potrebbe essere necessario modificare il file /etc/manpath.config:

DEFINE  pager   exec /usr/bin/pager -s
DEFINE  cat     /bin/cat
DEFINE  tr      /usr/bin/tr '\255\267\264\327' '\055\157\047\170'
DEFINE          grep    /bin/grep
DEFINE  troff   /usr/bin/groff -mandoc
DEFINE  nroff   /usr/bin/nroff -Tutf8 -mandoc
DEFINE  eqn     /usr/bin/eqn
DEFINE  neqn    /usr/bin/neqn -Tutf8
DEFINE  tbl     /usr/bin/tbl
DEFINE  col     /usr/bin/col
DEFINE  vgrind  /usr/bin/vgrind
DEFINE  refer   /usr/bin/refer
DEFINE  grap    /usr/bin/grap
DEFINE  pic     /usr/bin/pic -S

DEFINE          decompressor    /bin/gzip -dc
DEFINE          compressor      /bin/gzip -c7

Si osservi, comunque, che nelle situazioni comuni, l'uso dell'opzione -T non è necessario, perché i programmi rispondono correttamente alla configurazione stabilita con le variabili di ambiente LC_* e LANG.

134.4   Configurazioni comuni varie

Alcuni tipi di configurazione comune, sono di minore importanza e in parte già descritti altrove in questo documento, ma può essere utile raccoglierli come riferimento.

134.4.1   Invito della shell

Per quanto banale, la configurazione dell'invito della shell può essere molto importante. Il suo aspetto e la sua configurazione dipendono dalla shell stessa.

Chi utilizza le shell derivate da quella di Bourne deve impostare la variabile di ambiente PS1. Nel caso di Bash si può utilizzare eventualmente la definizione seguente, nel file /etc/profile, se deve riguardare la configurazione standard per tutti gli utenti, oppure nel file ~/.bash_profile se si tratta della configurazione personale (o in mancanza il file ~/.profile).

PS1='\u@\h:\w\$ '
export PS1

Sempre nell'ipotesi di una shell Bash, potrebbe essere piacevole avere un modo per visualizzare il successo o meno dell'esecuzione dell'ultimo programma; in pratica, si tratta di un modo per controllare il contenuto del parametro $?:

dynamic_prompt () {
    if [ $? = 0 ]
    then
        echo ":)"
    else
        echo ":("
    fi
}
export -f dynamic_prompt
#
PS1='\u@\h:\w\$ '
#
if [ "$BASH" != "" ]
then
    #
    # This is BASH.
    #
    PS1="\$(dynamic_prompt) $PS1"
fi
export PS1

Come si vede, si tratta di una funzione, denominata dynamic_prompt, che viene utilizzata nella stringa della variabile PS1 solo se ci si accerta che si tratta proprio della shell Bash.

134.4.2   Prevenzione dalla cancellazione involontaria

Più volte, in questo documento, è ripetuto quanto sia facile eliminare inavvertitamente dei file, per un utilizzo improprio del comando di cancellazione, rm, oppure per una sovrascrittura involontaria attraverso la copia o lo spostamento dei file.

La shell Bash permette di creare degli alias a comandi normali, definendo l'utilizzo sistematico di opzioni determinate. I comandi seguenti definiscono tre alias ai comandi rm, cp e mv, in modo che venga usata sempre l'opzione -i, con la quale si ottiene una richiesta di conferma nel momento in cui si richiede la cancellazione di un file per qualunque motivo.

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Successivamente, per evitare la seccatura di dover confermare la cancellazione o la sovrascrittura di file, è sufficiente utilizzare l'opzione -f (force).

134.4.3   Libreria Readline

Molti programmi che funzionano in modo interattivo mostrando un invito all'inserimento dei comandi (un prompt) e offrendo una riga di comando, sfruttano una libreria molto sofisticata per farlo: si tratta generalmente della libreria Readline. La shell Bash è l'applicativo più comune che utilizza questa libreria.

Può essere utile definire la configurazione di questa libreria attraverso il file ~/.inputrc (il file di configurazione generale, /etc/inputrc, potrebbe essere ignorato), in modo da facilitare l'uso della tastiera e l'inserimento di caratteri che utilizzano anche l'ottavo bit. L'esempio seguente si riferisce alla configurazione necessaria per l'uso ottimale di una console virtuale su un elaboratore con architettura x86.

# Abilita l'inserimento di caratteri a 8 bit.
set meta-flag           on

# Disabilita la conversione dei caratteri con l'ottavo bit attivo
# in sequenze di escape.
set convert-meta        off

# Abilita la visualizzazione di caratteri a 8 bit.
set output-meta         on

# Modifica l'abbinamento con i tasti rispetto a determinati comportamenti.
"\e[1~": beginning-of-line      # [home]                era C-a
"\e[4~": end-of-line            # [fine]                era C-e
"\e[3~": delete-char            # [canc]                era C-d
"\e[5~": backward-word          # [pagina su]           era M-b
"\e[6~": forward-word           # [pagina giù]          era M-f

134.5   Fuso orario

Nei sistemi Unix in generale, l'orologio «fisico» dell'elaboratore viene regolato sul tempo universale (UT, in passato noto come GMT), in modo tale che il sistema operativo possa fornire l'ora locale in base alla configurazione, che potrebbe variare anche a livello di ogni utente.

Lo standard comune prevede la presenza di un file di configurazione costituito da /usr/share/zoneinfo/localtime; tuttavia, se esiste la variabile di ambiente TZ (Time zone), il suo contenuto prende il sopravvento.

Il file /usr/share/zoneinfo/localtime deve essere realizzato secondo un formato particolare, pertanto sono spesso presenti file già pronti per i vari fusi orari utilizzati, così che /usr/share/zoneinfo/localtime può essere semplicemente un collegamento simbolico al file effettivo. Per maggiore semplicità, succede normalmente che /usr/share/zoneinfo/localtime sia un collegamento simbolico a /etc/localtime, che a sua volta è un altro collegamento simbolico al file che contiene l'informazione.

A titolo di esempio, per fare riferimento al fuso orario che riguarda le convenzioni italiane, si prende in considerazione il file /usr/share/zoneinfo/Europ/Rome e si puntano su questo file, direttamente o indirettamente, i collegamenti simbolici /usr/share/zoneinfo/localtime e /etc/localtime.

La configurazione, eventuale, della variabile di ambiente TZ, prevede l'indicazione delle informazioni in diversi modi alternativi; per maggiori dettagli, si veda la pagina di manuale tzset(3).

134.6   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) GNU C Library   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome configurazione_e_personalizzazione.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!