[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


42. Configurazione e personalizzazione

Durante la fase di installazione di GNU/Linux, è 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 particolare sessione di lavoro. 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 verranno chiariti 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.

42.1 Frammentazione del sistema di configurazione

Lo sconforto maggiore per chi si avvicina a un sistema operativo Unix (quale è GNU/Linux) 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à.

42.1.1 Collocazione

In linea di massima, si distingue tra la configurazione globale del sistema, definita nei file contenuti nella directory `/etc/' che sono di competenza dell'amministratore del sistema, e quella particolare di ogni utente, definita da una serie di file contenuti nelle rispettive directory personali (home), generalmente quelli che 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.

42.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/', file di configurazione personalizzata, collocati nelle directory personali degli utenti che li utilizzano, ed eventualmente sulla presenza e sul contenuto di determinate variabili di ambiente.

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, e 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, la definizione delle interfacce di rete, 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/Linux è 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/'. 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, e quindi quello personalizzato.

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

42.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.

42.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 adeguarvisi, 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 lettera, `i', e l'ultima, `n', sono separate da 18 caratteri. Nello stesso modo e con lo stesso ragionamento, la sigla `l10n' rappresenta il termine localization.

42.2.1 Supporto 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

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.

42.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, ma in pratica, le definizioni disponibili impongono già l'insieme di caratteri più appropriato alla scelta linguistico-nazionale definita.

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

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

Tabella 42.1: Alcuni codici per la definizione della localizzazione.

Per l'Italia, la definizione corretta, completa, dovrebbe essere `it_IT.ISO-8859-1'.

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.

it
italian
it_IT
it_IT.ISO-8859-1
italian.ISO-8859-1
it_IT.ISO_8859_1
it_IT.ISO8859-1
it_IT.iso8859-1
it_IT.ISO88591
...

42.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.

42.2.3.1 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_*', mandando così in fumo l'utilità di una variabile che si impone sulle altre.

42.2.3.2 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.

#!/bin/sh
#...
LANG=it_IT.ISO-8859-1
export LANG

L'esempio mostra un pezzo di uno script attraverso cui definire la variabile `LANG' per la localizzazione italiana predefinita.

42.2.3.3 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.

#!/bin/sh
#...
LC_COLLATE=it_IT.ISO-8859-1
export LC_COLLATE

L'esempio mostra un pezzo di uno script attraverso cui definire la variabile `LC_COLLATE' per la localizzazione italiana dell'ordinamento dei caratteri.

42.2.3.4 LC_CTYPE

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

#!/bin/sh
#...
LC_CTYPE=it_IT.ISO-8859-1
export LC_CTYPE

L'esempio mostra un pezzo di uno script attraverso cui definire la variabile `LC_CTYPE' per la localizzazione italiana dell'insieme di caratteri.

42.2.3.5 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.

#!/bin/sh
#...
LC_NUMERIC=it_IT.ISO-8859-1
export LC_NUMERIC

L'esempio mostra un pezzo di uno script attraverso cui definire la variabile `LC_NUMERIC' per la localizzazione italiana della rappresentazione dei valori numerici.

42.2.3.6 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.

42.2.3.7 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.

#!/bin/sh
#...
LC_TIME=it_IT.ISO-8859-1
export LC_TIME

L'esempio mostra un pezzo di uno script attraverso cui definire la variabile `LC_TIME' per la localizzazione italiana della rappresentazione dei valori data-orario.

date[Invio]

dom ago  2 15:35:48 CEST 1998

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

42.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.

42.2.5 $ locale

locale [<opzioni>]

`locale' permette di conoscere l'impostazione del proprio sistema di localizzazione, ed è utile per verificare la configurazione delle variabili di ambiente relative.

Alcune opzioni

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

Esempi

locale[Invio]

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

LANG=POSIX
LC_CTYPE=it_IT
LC_NUMERIC="POSIX"
LC_TIME=it_IT.ISO-8859-1
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.

42.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.ISO-8859-1' dovrebbe avere stabilito che la codifica che si vuole gestire è ISO 8859-1. In pratica, alcuni programmi ignorano la localizzazione, oppure sono configurati in modo predefinito in senso contrario.

42.3.1 Variabile 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 normali, per visualizzare correttamente del testo che contenga lettere accentate e altri simboli utilizzati nella codifica ISO 8859-1, occorre che contenga la stringa `latin1'.

#!/bin/sh
#...
LESSCHARSET=latin1
export LESSCHARSET

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

42.3.2 /etc/manconfig

Il programma `man' può essere configurato attraverso il file `/etc/man.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'), richiedono l'uso dell'opzione `-T' con l'argomento `latin1', in modo da consentire l'emissione di caratteri che facciano parte della codifica ISO 8859-1. Senza questa accortezza, le lettere accentate e altri simboli vengono esclusi dal testo generato.

TROFF		/usr/bin/groff -Tps -mandoc
NROFF		/usr/bin/groff -Tlatin1 -mandoc
EQN		/usr/bin/geqn -Tps
NEQN		/usr/bin/geqn -Tlatin1
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

L'esempio mostra un pezzo del file di configurazione `/etc/man.config' nel quale si deve osservare l'uso dell'opzione `-Tlatin1' per `groff' e `geqn', quando questi programmi servono per generare testo da visualizzare attraverso lo schermo a caratteri.

42.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.

42.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 eventuale, dipende dalla shell stessa.

Chi utilizza le shell derivate da quella di Bourne si 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.

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

42.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, basterà utilizzare l'opzione `-f' (force).

42.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 un'unica 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 i386.

# 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

42.5 Riferimenti

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]