mercoledì 17 agosto 2011

Configurazione della tastiera!!!!

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
.



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 usper 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 sitowww.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:
  • man loadkeys e guardare anche la sezione "SEE ALSO" della man page.
  • man showkey per trovare i codici dei tasti da inserire nel file di configurazione.
Per la configurazione della tastiera nella modalità grafica X Window, ho trovato le info qui:
  • man xmodmap e guardare anche la sezione "SEE ALSO" della man page.
  • man xev per trovare i codici dei tasti da inserire nel file di configurazione. Ricordare che questi codici differiscono da quelli usati nella modalità testuale.
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
  • xvkbd - virtual keyboard for X window system (http://homepage3.nifty.com/tsato/xvkbd). Programma che mostra sullo schermo la tastiera con il layout voluto, anche non corrispondente al layout della tastiera fisica in uso. Utile per simulare sistemi di scrittura che fanno uso di tastiere esotiche.
  • How to enter Unicode characters in Microsoft Windows (www.fileformat.info/tip/microsoft/enter_unicode.htm). Poiché molti visitatori di questa mia pagina WEB spesso me lo chiedono, questo documento spiega come si compone da tastiera il generico carattere Unicode sotto Microsoft Windows. Ovviamente per vedere apparire sullo schermo il corrispondente simbolo grafico occorre aver installato il font necessario.
  • Typing Spanish Accents (www.studyspanish.com/accents/typing.htm). Spiega vari sistemi per introdurre le lettere accentate con Windows XP, Windows Vista e Macintosh. In particolare, con Vista suggerisce di aggiungere una tastiera United States-International (virtuale!) nel pannello di controllo Regional and Language Options. Così facendo si possono introdurre i caratteri accentati semplicemente premendo il tasto dell'accento voluto, seguito dalla vocale. Purtroppo non tutte le applicazioni supportano questo sistema, per cui bisogna provare.


Nessun commento:

Posta un commento