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
xevSi 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: FalseLe 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 -pkemostra 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 bracerightPer 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 bracerightBisogna farci l'abitudine, ma questa nuova configurazione può risultare molto conveniente.