Trovo la configurazione della tastiera italiana su GNU/Linux (guardate l'ultima figura
qui) abbastanza comoda, però tutto si può sempre migliorare. In questo post spiegherò come si cambiano le funzioni dei tasti.
Gli strumenti che servono sono due:
xev (per scoprire il codice del tasto e il nome della funzione da eseguire) e
xmodmap (per modificare le funzioni associate ai tasti). Entrambi questi programmi, che si usano da linea di comando, fanno parte del server grafico X.org e sono preinstallati nella maggior parte delle distribuzioni. I pacchetti che forniscono questi programmi su Debian e Ubuntu sono
x11-utils e
x11-xserver-utils.
Per prima cosa bisogna scoprire qual è il codice associato a un tasto. Per fare ciò bisogna eseguire in un terminale il comando
xev
Si aprirà una finestra grafica, mentre sul terminale scorreranno dei messaggi. I messaggi che appaiono appena si avvia il programma non sono importanti. A questo punto bisogna premere il tasto di cui si vuole conoscere il codice. Per esempio, premendo il tasto
m apparirà nel terminale il messaggio
KeyRelease event, serial 40, synthetic NO, window 0x4600001,
root 0x251, subw 0x0, time 7126899, (-210,874), root:(330,897),
state 0x10, keycode 58 (keysym 0x6d, m), same_screen YES,
XLookupString gives 1 bytes: (6d) "m"
XFilterEvent returns: False
Le righe che dobbiamo guardare sono la terza e la quarta: nella terza è riportato il
keycode, il codice del tasto (nell'esempio il codice è
58) e il nome della funzione fra parentesi, dopo
keysym e un numero esadedecimale (nell'esempio la funzione è
m). Invece nella quarta riga possiamo vedere qual è il simbolo effettivamente inserito (
m nell'esempio). Il codice del tasto è indipendente dagli eventuali tasti modificatori premuti, come
SHIFT e
ALT GR, il codice è sempre lo stesso, quello che cambieranno saranno le funzioni associate e i caratteri inseriti.
Facciamo un'altra prova: premiamo il tasto
n in una sessione di
xev, il corrispondente output sarà
KeyRelease event, serial 40, synthetic NO, window 0x4600001,
root 0x251, subw 0x0, time 8118563, (523,450), root:(1063,473),
state 0x10, keycode 57 (keysym 0x6e, n), same_screen YES,
XLookupString gives 1 bytes: (6e) "n"
XFilterEvent returns: False
Il comando
xmodmap permette di rimappare le funzioni dei tasti. La sintassi del comando da usare è
xmodmap -e "keycode CODICE = FUNZIONE"
sostituendo a
CODICE il codice del tasto e a
FUNZIONE la funzione da eseguire. Per esempio, per inserire una
n premendo il tasto
m si deve usare il comando
xmodmap -e "keycode 58 = n"
Dopo l'uguale si possono inserire fino a otto funzioni differenti, separate da uno spazio: la prima è la funzione eseguita premendo il tasto da solo, la seconda è quella corrispondente all'azione
SHIFT + tasto, la terza è quella eseguita premendo
ALT GR + tasto, la quarta è quella corrispondente a
SHIFT + ALT GR + tasto. Le ultime quattro funzioni non sono generalmente utilizzate. Quindi per inserire una
n premendo il tasto
m e una
N premendo
SHIFT + m bisogna cambiare il comando precedente in
xmodmap -e "keycode 58 = n N"
Il comando
xmodmap -pke
mostra sullo schermo tutte le funzioni associate a tutti i tasti della propria tastiera. L'output sarà qualcosa del tipo:
...
keycode 22 = BackSpace BackSpace BackSpace BackSpace BackSpace BackSpace
keycode 23 = Tab ISO_Left_Tab Tab ISO_Left_Tab Tab ISO_Left_Tab
keycode 24 = q Q q Q at Greek_OMEGA at
keycode 25 = w W w W lstroke Lstroke lstroke Lstroke
keycode 26 = e E e E EuroSign cent EuroSign
keycode 27 = r R r R paragraph registered paragraph
keycode 28 = t T t T tslash Tslash tslash Tslash
keycode 29 = y Y y Y leftarrow yen leftarrow
keycode 30 = u U u U downarrow uparrow downarrow
keycode 31 = i I i I rightarrow idotless rightarrow
keycode 32 = o O o O oslash Oslash oslash Oslash
keycode 33 = p P p P thorn THORN thorn THORN
keycode 34 = egrave eacute egrave eacute bracketleft braceleft bracketleft
keycode 35 = plus asterisk plus asterisk bracketright braceright bracketright
keycode 36 = Return NoSymbol Return NoSymbol Return
keycode 37 = Control_L NoSymbol Control_L NoSymbol Control_L
keycode 38 = a A a A ae AE ae AE
keycode 39 = s S s S ssharp section ssharp
keycode 40 = d D d D eth ETH eth ETH
...
Possiamo sfruttare queste informazioni per scambiare completamente due tasti senza cercare manualmente una a una tutte le funzioni associate a un tasto, insieme ai possibili modificatori. Per esempio, per scambiare i tasti
q (codice
24) e
p (codice
33) si possono usare i comandi:
xmodmap -e "keycode 33 = q Q q Q at Greek_OMEGA at"
xmodmap -e "keycode 24 = p P p P thorn THORN thorn THORN"
Il comando
xmodmap modifica le associazioni dei tasti solo per la sessione corrente del server X.org. Per rendere permanenti le modifiche bisogna salvare le espressioni
keycode CODICE = FUNZIONI in un file e fare in modo che
xmodmap carichi quel file ogni volta che si avvia il server grafico X.org. Generalmente il file in cui si salvano queste impostazioni si chiama
~/.xmodmaprc (il nome in realtà è lasciato alla libera scelta dell'utente, il nome suggerito deriva solo da una convenzione diffusa), mentre nel file
~/.xinitrc si aggiungerà (se il file non esiste bisogna crearlo) il comando
xmodmap .xmodmaprc
Nelle tastiere dotate di tastierino numerico sono presenti due tasti per inserire ciascuna cifra. Per eliminare questa ridondanza si possono scambiare, nei tasti numerici sopra le lettere, i simboli con i numeri. Per essere più chiari, si può fare in modo che premendo il tasto
1 sia inserito il simbolo
!, premendo il tasto
2 sarà inserito il simbolo
", premendo
3 si inserirà
£ ecc... mentre per inserire i corrispondenti numeri bisognerà premere
SHIFT + tasto. Nelle tastiere con layout italiano l'output del comando
xmodmap -pke corrispondente a questi dieci tasti numerici è
keycode 10 = 1 exclam 1 exclam onesuperior exclamdown onesuperior
keycode 11 = 2 quotedbl 2 quotedbl twosuperior dead_doubleacute twosuperior
keycode 12 = 3 sterling 3 sterling threesuperior dead_tilde threesuperior
keycode 13 = 4 dollar 4 dollar onequarter oneeighth onequarter
keycode 14 = 5 percent 5 percent onehalf threeeighths onehalf
keycode 15 = 6 ampersand 6 ampersand notsign fiveeighths notsign
keycode 16 = 7 slash 7 slash braceleft seveneighths braceleft
keycode 17 = 8 parenleft 8 parenleft bracketleft trademark bracketleft
keycode 18 = 9 parenright 9 parenright bracketright plusminus bracketright
keycode 19 = 0 equal 0 equal braceright dead_ogonek braceright
Per realizzare quanto suggerito basta inserire nel file
~/.xmodmaprc le espressioni precedenti invertendo le funzioni numeriche con i simboli (per esempio bisogna invertire
exclam con
1 nella riga corrispondente al tasto con codice
10). Per concretezza riporto qui il codice da inserire nel file:
keycode 10 = exclam 1 exclam 1 onesuperior exclamdown onesuperior
keycode 11 = quotedbl 2 quotedbl 2 twosuperior dead_doubleacute twosuperior
keycode 12 = sterling 3 sterling 3 threesuperior dead_tilde threesuperior
keycode 13 = dollar 4 dollar 4 onequarter oneeighth onequarter
keycode 14 = percent 5 percent 5 onehalf threeeighths onehalf
keycode 15 = ampersand 6 ampersand 6 notsign fiveeighths notsign
keycode 16 = slash 7 slash 7 braceleft seveneighths braceleft
keycode 17 = parenleft 8 parenleft 8 bracketleft trademark bracketleft
keycode 18 = parenright 9 parenright 9 bracketright plusminus bracketright
keycode 19 = equal 0 equal 0 braceright dead_ogonek braceright
Bisogna farci l'abitudine, ma questa nuova configurazione può risultare molto conveniente.