Il comando xev
ed il tastierino numerico su Linux
Recentemente mi è capitato di reinstallare il PC a mio padre e, data l’età dell’hardware, ho messo Lubuntu per guadagnare un po’ in prestazioni. Utilizzando spesso il tastierino numerico per inserire le cifre in un programma di contabilità, è emersa la necessità di sostituire il punto con la virgola nel set di pulsanti sulla parte destra della tastiera.
Dopo una prima ricerca ho scoperto che, tra i layout di tastiera italiani presenti a sistema, ci dovrebbe essere anche un IBM 142
che codifica il pulsante proprio come serve a noi. Testandone il funzionamento mi sono però accorto che le combinazioni di pulsanti per scrivere i caratteri @
e #
non funzionavano più e ho quindi pensato di scartare questa opzione.
Continuando ad indagare ho scoperto che i vari layout si trovano nella directory /usr/share/X11/xkb/symbols
e, in particolare, la parte riguardante il tastierino numerico si trova in un file separato di nome keypad
, come se fosse in comune a tutte le lingue. La sintassi è abbastanza complessa, ma intuisco che ad ogni pulsante corrisponde una codifica alla quale viene quindi associato un carattere da stampare. Nel caso di pulsanti speciali il carattere viene identificato da una descrizione (in inglese) facilmente leggibile: riesco quindi a riconoscere underscore _
, less <
, greater >
, equal =
e… comma ,
!!! Purtroppo però non riesco a trovare come viene codificato il punto.
A questo proposito mi viene in mente un comando che utilizzavo in passato per scoprire i codici dei pulsanti (di sicuro lo facevo per personalizzare qualche window manager minimale a cui mi ero affezionato da giovane xD), xev
.
Lanciando questo programma da terminale in output vi ritroverete un sacco di informazioni riguardanti gli input che il sistema riceve da tastiera e mouse. Se premete a ripetizione il punto del tastierino numerico, per esempio, compariranno a ripetizione le seguenti informazioni:
KeyRelease event, serial 37, synthetic NO, window 0x3800001,
root 0x9b, subw 0x0, time 3308106, (-270,391), root:(929,443),
state 0x10, keycode 91 (keysym 0xffae, KP_Decimal), same_screen YES,
XKeysymToKeycode returns keycode: 129
XLookupString gives 1 bytes: (2e) "."
XFilterEvent returns: False
La parte che ci interessa è la terza riga, dove compare la descrizione KP_Decimal
, che sembra essere proprio il nostro punto nel tastierino numerico. Per conferma possiamo premere ripetutamente la virgola che sta tra le lettere, comparirà come output qualcosa del genere:
KeyRelease event, serial 37, synthetic NO, window 0x3800001,
root 0x9b, subw 0x0, time 3308106, (-270,391), root:(929,443),
state 0x10, keycode 91 (keysym 0xffae, KP_Decimal), same_screen YES,
XKeysymToKeycode returns keycode: 129
XLookupString gives 1 bytes: (2e) "."
XFilterEvent returns: False
Nel punto in cui prima compariva KP_Decimal
ora troviamo comma
, che è appunto la nostra virgola.
Procediamo quindi a sostituire tutte le occorrenze di KP_Decimal
in comma
nel file /usr/share/X11/xkb/symbols/keypad
. Personalmente per queste operazioni utilizzo l’editor vim, un po’ per abitudine ed un po’ perché è facilmente usabile con sudo (per editare il nostro file, infatti, abbiamo bisogno dei permessi di root). Il comando per editare il file sarà quindi:
$ sudo vim /usr/share/X11/xkb/symbols/keypad
Una volta aperto l’editor la sequenza da digitare per effettuare la sostituzione sarà:
:%s/KP_Decimal/comma/g
seguita dal tasto INVIO. Nella sequenza inserita, i due punti iniziali indicano che si sta per inserire un comando, il carattere %
indica che vogliamo eseguirlo su tutto il file (altrimenti viene eseguito solo sulla riga in cui si trova il cursore) e la lettera s
è il comando di sostituzione substitute. Seguono quindi i parametri necessari al comando, separati dal carattere /
. Il primo è la stringa da cercare (che andrà dunque sostituita, ovvero KP_Decimal
), il secondo il valore con il quale effettueremo la sostituzione (comma
) ed il terzo (g
sta per global) indica che la sostituzione deve avvenire per tutte le occorrenze trovate (altrimenti si ferma alla prima).
Una volta effettuata la sostituzione occorre salvare e chiudere il file, operazioni che con vim possono essere fatte in una volta sola digitando :wq
sempre seguito da INVIO.
Per rendere effettive le modifiche occorre ricaricare l’ambiente grafico, nel mio caso logout e login hanno funzionato, altrimenti riavviate la macchina.
Spero possa tornare utile a qualcuno, anche solo come curiosità e per capire quanto possa essere semplice ed accessibile un sistema Linux 😀