Qui si vogliono trattare quelle localizzazioni che sono un po' piú hardware-dipendenti, meno standard e in particolar modo che riguardano i PC compatibili. Molto probabilmente molte di queste cose non si applicano alle altre piattaforme su cui gira Linux, ne chiedo venia. Ma o mi regalate un PPC, una Sparc, un Alpha, un A4000, un MAC, ... oppure se avete altre note per queste piattaforme da aggiungere fatemelo sapere. ;-)
Linux permette di cambiare il font standard presente nella ROM della scheda video, in modo da avere il set di caratteri ISO-8859-1 completo a disposizione. La cosa può essere semplicemente ottenuta con uno script del genere, da eseguire al boot (in Debian basta copiarlo nella directory /etc/rc.boot
e renderlo eseguibile):
#!/bin/sh # qualche variabile... # # font Latin1 (ISO-8859-1) CONSOLE_FONT=lat1u-16.psf # mappa nulla CONSOLE_MAP=trivial if [ -x /usr/bin/setfont ]; then echo -n "Setting up ISO 8859-1 font" setfont /usr/share/consolefonts/$CONSOLE_FONT echo -n "." mapscrn /usr/share/consoletrans/$CONSOLE_MAP echo -n "." for do echo -ne '\033(B' > /dev/tty$N done echo ". done." fi
Il primo comando carica un nuovo set di caratteri, il secondo permette di eseguire una traduzione ``al volo'' tra caratteri richiesti e voluti e il terzo rende attiva la nuova coppia tabella-tavola di traslazione in ogni console.
Ad esempio di default non viene caricata nessuna tabella e viene eseguita la traduzione da Latin1 (quello che Linux vuole) a CP437 (quello che il PC ha). Ovviamente le manpages di setfont(1) e mapscrn(1) sono utili letture.
Se si ha un sistema Debian 2.0 semplicemente il file /etc/kbd/config
è il posto dove mettere la mappa dei caratteri ed il font da utilizzare: per l'italiano, la scelta giusta è:
CONSOLE_FONT=lat1u-16.psf CONSOLE_MAP=trivial
(da Lorenzo Maria Catucci).
Ma c'è una soluzione piú elegante. Esiste un programma che si chiama SVGATextMode(8) che fa tutta una serie di operazioni sulla console testo molto simpatiche.
Permette di definire dimensioni ``non standard'' per la console (diverse da 80x25, insomma), permette di alzare la frequenza di refresh del video di modo da stancare meno gli occhi, gestisce chipset avanzati...
Ha un file di configurazione, /etc/TextConfig
che ha una sintassi molto simile al file di configurazione di XFree e che permette in un sol colpo di definire il font da caricare. Ci penserà poi il programma stesso ad attivare il font e renderlo disponibile.
Basta modificare leggermente il file, facendo in modo che si presenti all'incirca come:
[...] Option "LoadFont" FontProg "/usr/bin/setfont" FontPath "/usr/share/consolefonts" FontSelect "lat1u-16.psf" 8x16 9x16 8x15 9x15 FontSelect "lat1u-14.psf" 8x14 9x14 8x13 9x13 FontSelect "lat1u-12.psf" 8x12 9x12 8x11 9x11 FontSelect "lat1u-08.psf" 8x8 9x8 8x7 9x7 FontSelect "lat1u-08.psf" 8x32 9x32 8x31 9x31 [...]
e si ottengono magicamente i caratteri Latin1, e molto di piú.
Buona parte dei caratteri installati con X seguono lo standard Latin1, e idem i font PostScript normalmente reperibili (come quelli dell'ATM).
Inoltre sta facendo la sua comparsa il primo font server TrueType; I font TrueType sono organizzati secondo un set di caratteri che è un superset del Latin1 (MicroSoft chiaramente fa sempre di testa sua, e mette caratteri dove lo standard lo vieta esplicitamente...), e quindi non dovrebbero dare problemi neanche loro.
Se stampate file DVI, PostScript o comunque in grafica, non ci sono problemi. Ci penserà il vostro programma per la stampa a convertire il vostro file nel formato matrice-di-punti più consono alla vostra stampante. Ma se volete stampare in puro testo, senza formattazioni? Resta, soprattutto per le stampanti ad aghi, il metodo più veloce. Ma quanto è standard il set ISO-8859-1?
ISO-8859-1 è il set di caratteri di Unix in generale, di Windows, Amiga, OS/2. Mancano all'appello il DOS e Macintosh. Ma in DOS la CP850 è in pratica il set Latin1, con i caratteri rimescolati un po' per essere compatibile verso il basso con la CP437. Sentitevi liberi quindi da qualsiasi ``sindrome da 8 bit'', e usate tranquillamente questo set di caratteri. Se dovete importare dei testi Linux in Macintosh, semplicemente usate il filtro per ``puro testo Windows'' o cose simili.
Se volete stampare puro testo con le accentate da Linux, a questo punto non vi resta che provare una delle soluzioni seguenti:
recode latin1:cp850 file
dove file
è il file da convertire, che viene sovrascritto. Per automatizzare la procedura si può anche installare come filtro per la stampa.Chiaramente, per le ultime tre soluzioni, è il caso di utilizzare anche da DOS (se avete un sistema dual boot) la CP819 o in mancanza d'altro la CP850; per configurare la gestione del set di caratteri DOS, leggete le manpage, hem (la forza dell'abitudine! O;) il manuale dei comandi COUNTRY e MODE CON.
Inoltre se la confusione attorno alle sigle dei vari set di caratteri sale, potete anche leggere le man page ascii(7) e latin1(7).
Per avere automaticamente la conversione, si può utilizzare questo filtro:
#!/bin/sh if /usr/local/bin/recode latin1:cp850 then exit 0 else exit -1 fi
potete salvare questo filtro come /usr/local/bin/iso2850
e poi dargli i permessi di esecuzione (chmod ugo+x /usr/local/bin/iso2850
). ora non vi resta che aggiungere nel file di configurazione delle stampanti /etc/printcap
:
# esempio di filtro, sostituire ``lp2'' con il device corretto # i file log e acct vanno creati se utilizzati, nei contesti # normali non serve sapere chi usa e quante pagine stampa ogni # utente! ;) # cp850|dos:\ :lp=/dev/lp2:\ :sd=/var/spool/lp2:\ :lf=/var/spool/lp2/log:\ :af=/var/spool/lp2/acct:\ :if=/var/local/bin/iso2850:\ :sh:
Ora, se la stampante è impostata per usare la codepage 850, basta un bel lpr -Pcp850 nomefile
per stampare un file latin1 con tutte le accentate al loro posto.
Libpaper è una piccola libreria e un programmino che dovrebbe ``standardizzare'' la gestione dei formati di carta sotto linux. In pratica fornisce delle funzioni da linkare al proprio programma che permettono di usare delle informazioni sul formato di carta centralizzate (prese da /etc/papersize
o dalla variabile d'ambiente PAPERSIZE.
In Debian è installata di default e gs la usa. Potrebbe essere una cosa utile, e va incentivata.
Maggiori informazioni le potete trovare alla manpage di paperconf(1), ovviamente se avete libpaper installata nel vostro sistema.