3.1 La tastiera e l’interfaccia a caratteri

La tastiera è il dispositivo tramite il quale l’utente impartisce i comandi al sistema, ma come è stato evidenziato nella sez. 1.10 i tasti presenti su di essa possono variare dipendentemente dal layout della stessa e per questo il sistema deve essere opportunamente configurato per interpretare correttamente le informazioni da essa inviate.

La tastiera invia dei segnali al sistema ogni volta che viene premuto o rilasciato un tasto. In corrispondenza di ognuno di tali eventi viene infatti generata una sequenza di codici, detti scancode, che viene inviata al driver della tastiera (che fa parte del kernel).

Gli scancode possono essere interpretati dal driver della tastiera e convertiti in altri codici, detti keycode. I keycode possono essere ulteriormente convertiti in altri codici (ASCII o UTF-8) o stringhe per mezzo di una tabella detta keymap.

Tutti questi possibili strati di conversione permettono di personalizzare la configurazione della tastiera intervenendo al livello più opportuno.

Il driver della tastiera può funzionare in una delle seguenti modalità

La modalità di funzionamento del driver della tastiera può essere visualizzata o impostata per mezzo del comando kbd_mode (man page kbd_mode(1)).

____________________________________________________________________

Comando: kbd_mode
Path: /bin/kbd_mode

SINTASSI  
$ kbd_mode [option]  
DESCRIZIONE

Nel caso in cui option non sia specificato, viene visualizzata la modalità corrente._________

La corrispondenza (keybinding) tra gli scancode ed i keycode viene stabilita in base ad una tabella che può essere visualizzata per mezzo del comando getkeycodes (man page getkeycodes(8)), mentre il comando setkeycodes (man page setkeycodes(8)) può essere utilizzato per modificarla.

[da completare ...] ... esempi ...

Un esempio di keybinding tra scancode e keycode è riportato di seguito (output di getkeycodes)

Plain scancodes xx (hex) versus keycodes (dec)
for 1-83 (0x01-0x53) scancode equals keycode
 0x50:   80  81  82  83  99   0  86  87
 0x58:   88 117   0   0  95 183 184 185
 0x60:    0   0   0   0   0   0   0   0
 0x68:    0   0   0   0   0   0   0   0
                                                                        
                                                                        
0x70:   93   0   0  89   0   0  85  91
0x78:   90  92   0  94   0 124 121   0
Escaped scancodes e0 xx (hex)
e0 00:    0   0   0   0   0   0   0   0
e0 08:    0   0   0   0   0   0   0   0
e0 10:  165   0   0   0   0   0   0   0
e0 18:    0 163   0   0  96  97   0   0
e0 20:  113 140 164   0 166   0   0   0
e0 28:    0   0 255   0   0   0 114   0
e0 30:  115   0 150   0   0  98 255  99
e0 38:  100   0   0   0   0   0   0   0
e0 40:    0   0   0   0   0 119 119 102
e0 48:  103 104   0 105 112 106 118 107
e0 50:  108 109 110 111   0   0   0   0
e0 58:    0   0   0 125 126 127 116 142
e0 60:    0   0   0 143   0 217 156 173
e0 68:  128 159 158 157 155 226   0 112
e0 70:    0   0   0   0   0   0   0   0
e0 78:    0   0   0   0   0   0   0   0
Gli scancode sono costituiti da codici (plain scancode) di 7 bit (XXH) o da codici (escaped scancode) da 15 bit (E0H XXH) e nell’intervallo 01H - 53H gli scancode corrispondono esattamente ai keycode.

Le corrispondenze tra keycode e caratteri (ASCII o UTF-8), cioè la keymap, possono essere visualizzate per mezzo de comando dumpkeys. La keymap viene generalmente caricata in memoria all’avvio del sistema, ma è possibile modificarla in qualunque momento per mezzo del comando loadkeys, che permette di caricare in memoria una keymap contenuta in un file (che generalmente si trova nella directory /usr/lib/kbd/keytables), il cui formato è illustrato dalla man page keymaps(5). Per la definizione della keymap può essere utile anche il comando setmetamode.

[da completare ...] ... esempio di keymap ...

La keymap indica le azioni da compiere in corrispondenza del verificarsi di ogni specifico keycode.

Una volta configurata la tastiera, può essere opportuno configurare il terminale (v. man page console_codes(4)), impostandolo a gestire i caratteri Unicode (UTF-8), per mezzo del comando unicode_start (man page unicode_start(1)).

____________________________________________________________________

Comando: unicode_start
Path: /bin/unicode_start

SINTASSI  
$ unicode_start [font [font_map]]  
DESCRIZIONE

___________________________

Il terminale e la tastiera possono essere disabilitati a scambiarsi caratteri Unicode con il comando unicode_stop (man page unicode_stop(1)), che li imposta a funzionare in modalità ad 8 bit (ASCII standard).

Nelle recenti distribuzioni di GNU/Linux, la tastiera, nei terminali a carattere è configurata in modalità Unicode (UTF-8) e di conseguenza il terminale a carattere è impostato per visualizzare i caratteri Unicode.

Alcuni programmi possono avere un proprio file di configurazione che indica il comportamento da tenere in base ai vari segnali che arrivano dalla tastiera (ad esempio il file ~/.lessrc costituisce il file di configurazione per less).

I simboli utilizzati per la visualizzazione dei caratteri possono essere impostati con il comando setfont o consolechars (???).

Per cancellare quanto visualizzato sullo schermo del terminale si può utilizzare il comando clear (man page clear(1)).

____________________________________________________________________

Comando: clear
Path: /usr/bin/clear

SINTASSI  
$ clear  
___________________________________________________________________________

Il comando reset (man page tset(1)) invece, permette di inizializzare il terminale. Questo può essere utile qualora il terminale finisse per trovarsi in uno stato anormale.

__________________________________________________________________________________________________________

Comando: reset
Path: /usr/bin/reset

SINTASSI  
$ reset option term  
___________________________________________________________________________