Home/
 www.icosaedro.it 

 Configurazione della tastiera

Ultimo aggiornamento: 2009-06-11

Come configurare la tastiera USA o GB in Linux per ottenere le vocali accentate italiane premendo una combinazione di tasti, sia in modalità testo che in modalità grafica X Window.

Indice

Storico degli aggiornamenti
La tastiera
Configurazione per la modalità testuale
Configurazione per la modalità X Window
Generare caratteri Unicode arbitrari
Ok, 60'000 caratteri, ma come li visualizzo?
Bibliografia
Riferimenti utili

Storico degli aggiornamenti

2006-12-22 Come generare caratteri Unicode arbitrari.

2001-10-19 Inaugurata questa sezione.

La tastiera

Molti programmatori preferiscono usare una tastiera USA o UK piuttosto della tastiera italiana: la tastiera italiana dispone delle vocali accentate, ma costringe a premere complicate sequenze di tasti per ottenere le parentesi quadre, graffe e altri simboli che ricorrono frequentemente nei sorgenti dei programmi.

Tuttavia talvolta è comunque necessario scrivere qualche bel testo nella lingua natia, e sarebbe brutto simulare gli accenti con l'apostrofo. Qui propongo la mia soluzione di configurazione per la tastiera USA (ovvero "americana") oppure quella UK o GB o "internazionale", come talvolta si può trovare in commercio. Le differenze tra questi modelli sono comunque minime.


Tipico layout tastiera UK e USA

Tipico layout tastiera UK e USA (clicca per ingrandire).


La ricetta prevede l'uso del tasto "bandiera" di sinistra, quello introdotto per aprire il menu principale di Microsoft Windows, ma che in Linux di solito non viene utilizzato (nella figura è il tasto a fianco di Alt). Per ottenere una vocale accentata basterà premere il tasto bandiera sinistro, poi il tasto dell'accento acuto o grave voluto, poi il tasto della vocale minuscola o maiuscola. Ad esempio, per ottenere "è" si premeranno in successione:

  1. il tasto bandiera sinistro;
  2. il tasto dell'accento grave "`" (subito sotto Esc, nella figura);
  3. il tasto della lettera "e".

Magari non sarà comodissimo, ma è sempre meglio che niente...

Purtroppo la configurazione di questo sistema in modalità testuale è completamente differente dalla configurazione in modalità grafica X Window:

Configurazione per la modalità testuale

Le schede video degli "IBM PC-compatibili" hanno due modalità: quella testuale e quella grafica. Nella modalità testuale lo schermo viene suddiviso in una griglia di 80 colonne e 25 righe dove in ogni cella viene visualizzato un carattere il cui font è precaricato nella ROM della scheda grafica. Per ogni carattere viene riservato un solo byte di codice e un altro byte di attributi (campo inverso, sottolineato, lampeggiante, ecc.) per cui il font default è limitato ai soli caratteri occidentali. La modalità testuale è quella preferita dagli amministratori di sistema perché è veloce, non ha i pesanti requisiti HW/SW della modalità grafica, non richiede il mouse e funziona sempre.

Durante l'installazione di Linux avremo sicuramente già configurato la tastiera in modo appropriato. Nel mio caso (Red Hat 7.1) la tastiera ha il layout USA, per cui il file che mappa questo layout è /usr/lib/kbd/keymaps/i386/qwerty/us.kmap.gz. Per non rischiare di fare pasticci, ho fatto una copia del file e quindi l'ho decompressa per editarla:

        # cd /usr/lib/kbd/keymaps/i386/qwerty
        # cp us.kmap.gz miamappa.kmap.gz
        # gunzip miamappa.kmap.gz

ottenendo infine il file miamappa.kmap. Ora edito il file aggiungendo in fondo queste righe:

        ##########################################
        # Quale tasto uso come "compose"?
        # bandiera di sx:
        keycode 125 = Compose
        # bandiera di dx:
        #keycode 126 = Compose
        # menu di dx:
        #keycode 127 = Compose
        # Decommentare la riga corrispondente al
        # tasto che si vuole usare!
        ##########################################

        compose '\`' 'a' to agrave
        compose '\`' 'e' to egrave
        compose '\`' 'i' to igrave
        compose '\`' 'o' to ograve
        compose '\`' 'u' to ugrave

        compose '\'' 'a' to aacute
        compose '\'' 'e' to eacute
        compose '\'' 'i' to iacute
        compose '\'' 'o' to oacute
        compose '\'' 'u' to uacute

        compose '\`' 'A' to Agrave
        compose '\`' 'E' to Egrave
        compose '\`' 'I' to Igrave
        compose '\`' 'O' to Ograve
        compose '\`' 'U' to Ugrave

        compose '\'' 'A' to Aacute
        compose '\'' 'E' to Eacute
        compose '\'' 'I' to Iacute
        compose '\'' 'O' to Oacute
        compose '\'' 'U' to Uacute

Possiamo subito provare il risultato caricando questa mappa con il comando:

        # loadkeys miamappa

Se è tutto ok, mettiamo questo comando nel solito file /etc/rc.d/rc.local perché venga eseguito ad ogni avvio della macchina. Se invece qualcosa è andato storto, basta dare il comando loadkeys us per ricaricare la mappa originaria.

Il comando loadkeys può essere impartito anche da un utente senza privilegi di root.

Configurazione per la modalità X Window

Una volta avviato X Window nel modo solito, da una finestra terminale dare il comando:

        $ xmodmap -e "keycode 115 = Multi_key"
Stesso funzionamento che in console. Notare che il tasto bandiera sx ha qui un codice diverso che in console. Testato in gnome-terminal, rxvt e in AbiWord (e quest'ultimo, lasciatemelo dire, e' un gran bel programmetto che sta venendo su bene).

Per rendere automatico l'avviamento di questo comando quando parte X Window, basta mettere questo comando nel file $HOME/.xinitrc, subito prima dell'avviamento del window manager preferito. Ecco come appare il mio:

        # PER LE LETTERE ACCENTATE:
        # egrave: bandiera-sx + ` + e
        # Similmente per le altre vocali. Usa SHIFT per le maiuscole.
        xmodmap -e "keycode 115 = Multi_key"
        # 115=bandiera-sx, 116=bandiera-dx, 117=menu
        # In alternativa:
        # xmodmap -e "keycode 115 = dead_grave"
        # xmodmap -e "keycode 116 = dead_acute"
        # per cui i tasti bandiera sx e dx si usano come uno SHIFT.

        #twm
        #AnotherLevel
        fvwm2

Come suggeriscono i commenti, se il tasto bandiera sinistra è utilizzato dal window manager, è sempre possibile utilizzare un altro tasto che sia libero. Poi, per uniformità, bisognerà cambiare in modo corrispondente anche la configurazione in ambiente testuale.

I commenti che ho messo nel file illustrano un altro paradigma di funzionamento che prevede l'uso dei tasti bandiera sinistro e destro come modificatori simili al tasto SHIFT: premendo il tasto bandiera di sinistra insieme a una vocale si ottiene la vocale con accento grave, mentre usando il tasto bandiera destra si ottiene l'accento acuto. Questa soluzione potrebbe essere più comoda, ma non ho trovato modo di implementarla anche nella modalità testuale.

Generare caratteri Unicode arbitrari

Sono circa 60'000 i caratteri Unicode, impensabile riprodurli tutti con una combinazione di tasti. Nelle recenti versioni di X Window prodotte da X.org ho notato una interessante funzionalità per introdurre un codice Unicode arbitrario: basta tenere premuti i tasti SHIFT+CTRL mentre si compone il codice esadecimale del carattere:

SHIFT+CTRL HHHH

Il codice esadecimale di un carattere Unicode può arrivare fino a 4 cifre esadecimali. Per esempio, il simbolo dell'Euro ha codice 20ac. Se vuoi vedere tutti i 60'000 caratteri possibili, vai al sito www.unicode.org.

Ricordiamo che il charset ISO-8859-1, noto anche come "Latin 1", è un sotto-insieme dell'Unicode, cioè i primi 256 codici, che vanno dall'esadecimale 0 fino a ff, coincidono. La tabella Latin 1 è decisamente più piccola, comprende tutti i simboli in uso in occidente, e la puoi consultare qui: http://czyborra.com/charsets/iso8859.html.

Ok, 60'000 caratteri, ma come li visualizzo?

Ricordiamo che, sebbene il codice del carattere si possa introdurre, non è detto che il programma che gira sotto X Window sia poi in grado di interpretarlo correttamente. Ci sono molti programmi che non ne sono in grado, oppure che vanno configurati in modo opportuno. La soluzione generale in Unix, Linux e simili è quella di adottare la codifica UTF-8 dell'Unicode. Per la precisione, l'UTF-8 è capace di rappresentare tutto l'UCS (Universal Character Set, uno standard ISO che usa 31 bit per carattere e di cui l'Unicode è il sotto-insieme a 16 bit per carattere). Il bello dell'UTF-8 è che passa indenne attraverso i programmi che non conoscono altro che l'ASCII, ed inoltre è molto compatto: un normale file ASCII è già di per sè un file UTF-8 valido!

A me è bastato mettere questa riga nel mio .bash_profile:

export LC_CTYPE=en_US.UTF-8

Grazie a questa variabile di ambiente, tutti i programmi che ne sono capaci si "sintonizzano" sull'UTF-8. Quindi, file system, browser, gnome-terminal, vim, ecc. passano dal limitato mondo dell'ASCII al routilante mondo dei famosi 60'000 caratteri, e finalmente i testi possono contenere una miscela arbitraria di scritti esotici. Che comunque non capirei, ma fa piacere che una barriera tecnologia si possa superare.

AVVERTENZA. UTF-8 usa una codifica multi-byte: ogni carattere può richiedere da uno fino a tre byte per codificare l'Unicode (quello che ci interessa), e fino a 6 byte per tutto l'UCS (che non ci interessa, per adesso). Quindi, la lunghezza in byte dei file non corrisponde al numero dei caratteri in essi contenuto, e un campo VARCHAR(30) del database SQL può ospitare fino a 10 caratteri Unicode, a meno che il database non sia stato correttamente configurato per supportare l'Unicode.

Suggerimento finale: passate tutto a UTF-8 e basta. L'ISO-8859-* sono roba antiquata, una pezza messa nel passato. L'orientamento attuale è di usare sempre e solo l'UTF-8 per lo scambio dei testi, della posta, delle pagine WEB, dei sorgenti dei programmi, ecc. Il programma iconv permette di convertire un file di testo dalla codifica attuale a UTF-8 (come alsolito, man iconv per i dettagli).

Bibliografia

Per la configurazione della tastiera nella modalità testuale, ho trovato le info qui:

Per la configurazione della tastiera nella modalità grafica X Window, ho trovato le info qui:

UTF-8 and Unicode FAQ for Unix/Linux (www.cl.cam.ac.uk/~mgk25/unicode.html). Pagina davvero ricca sugli argomenti del titolo.

Riferimenti utili


Umberto Salsi
Commenti
Contatto
Mappa
Home/
Still no comments to this page. Use the Comments link above to add your contribute.