[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
La gestione della tastiera della console di un sistema GNU/Linux avviene in modo piuttosto complesso. Solitamente si fa riferimento al programma loadkeys come unico responsabile della definizione delle funzioni associate ai tasti, ma questo non basta per comprendere il problema.
I segnali della tastiera vengono ricevuti direttamente dal kernel che poi li fornisce ai programmi, in vario modo, a seconda di una data modalità selezionata.
Il programma kbd_mode permette di conoscere o di modificare la modalità di funzionamento della tastiera, ma la modifica è da riservare solo a occasioni particolari, di solito utilizzando una connessione remota, quando un programma ha modificato la modalità della tastiera rendendo inutilizzabile la console.
In generale, ciò che conta è fare in modo che funzioni correttamente la tastiera connessa al proprio elaboratore. Questo è importante perché, quando si utilizza una connessione remota, per esempio attraverso il protocollo TELNET, la tastiera che si adopera dipende, per la sua configurazione, dall'elaboratore a cui è connessa fisicamente: non dipende quindi dall'elaboratore al quale si è collegati. Leggendolo così potrebbe sembrare una cosa evidente, ma quando ci si trova a farlo veramente, non lo è più così tanto.
In questo senso, se da una connessione remota viene dato un comando per modificare la modalità di funzionamento o la mappa della tastiera, l'effetto si risente sulla console dell'elaboratore che riceve il comando e non nel terminale remoto.
Queste considerazioni permettono anche di comprendere che la connessione remota è indipendente da qualunque configurazione che riguardi la tastiera di un certo elaboratore. Perciò, una configurazione errata che renda inutilizzabile una console, può essere corretta attraverso una connessione remota.
Un sistema GNU/Linux, come altri sistemi Unix, consente di gestire diversi terminali sull'unica console esistente effettivamente. Questi vengono definiti console virtuali. Attraverso alcune combinazioni di tasti si riesce a passare da una console virtuale all'altra. Queste combinazioni sono normalmente [Alt F1], [Alt F2],... oppure [Ctrl Alt F1], [Ctrl Alt F2],... ma possono essere modificate (anche se ciò non è consigliabile).
La console vera e propria corrisponde quasi sempre alla console virtuale in funzione in un dato momento.
La configurazione della tastiera, a seconda del tipo di modalità su cui si interviene, può avere effetto su tutte le console virtuali, oppure solo su quella attiva.
Il programma kbd_mode (1) permette di conoscere o di modificare la modalità di funzionamento della tastiera della console. Ciò significa, implicitamente, che l'effetto riguarda la console virtuale attiva; pertanto, quando viene utilizzato a distanza, attraverso il protocollo TELNET o un altro metodo di connessione simile, ha effetto sulla console virtuale attiva nell'elaboratore al quale si è connessi.
kbd_mode [opzioni] |
L'utilizzo di questo programma deve essere fatto con prudenza: la visualizzazione della modalità di funzionamento della tastiera non provoca alcun inconveniente, ma la modifica errata della modalità, comporta l'impossibilità di continuare a utilizzarla.
È meglio evitare di utilizzare questo programma per modificare la modalità della tastiera, da una finestra di terminale, all'interno del sistema grafico X. |
|
Se la console di un elaboratore è rimasta bloccata e comunque esiste la possibilità di connettersi a questo da un'altra postazione funzionante, si può ripristinare la modalità corretta della tastiera da lì. Nell'esempio seguente, l'elaboratore da sistemare è dinkel.brot.dg
e quello dal quale si interviene è roggen.brot.dg
.
roggen.brot.dg$
telnet dinkel.brot.dg
[Invio]
Trying dinkel.brot.dg... Connected to dinkel.brot.dg. Escape character is '^]'. |
login:
root
[Invio]
Password:
********
[Invio]
dinkel.brot.dg#
kbd_mode -a
[Invio]
dinkel.brot.dg#
exit
[Invio]
Questo esempio presume che si possieda già una certa conoscenza di come si instaura una connessione remota attraverso un cliente TELNET. L'utente inesperto che dovesse tentare una cosa del genere potrebbe non essere capace di completare l'accesso a causa del fatto che normalmente viene impedito all'utente root di accedere da una postazione remota, per motivi di sicurezza. |
Il programma setleds (2) interviene esclusivamente su una console virtuale attiva, o meglio, quella da cui proviene lo standard input. Non può essere utilizzato in altre situazioni. Lo scopo del programma è di intervenire sull'impostazione dei tasti [Fissamaiuscole] (capslock), [BlocNum] (numlock) e [BlocScorr] (ScrollLock).
setleds [opzioni] [modalità...] |
Solitamente, questi tasti attivano o disattivano la modalità corrispondente, che viene segnalata anche da una spia luminosa sulla tastiera, una per ogni modalità. Queste spie sono notoriamente dei led (Light emitting diode) e spesso sono chiamati così anche in italiano.
Il programma permette di intervenire sia attivando o disattivando queste modalità, sia accendendo o spegnendo i led.
|
Segue la descrizione di alcuni esempi.
$
setleds
[Invio]
Mostra la configurazione attuale.
$
setleds +num
[Invio]
Attiva i numeri nella tastiera numerica.
$
setleds -L +scroll
[Invio]
Accende il led BlocScorr (o ScrollLock che sia) senza altro effetto sull'uso della tastiera.
$
setleds -L
[Invio]
#
setleds +num < /dev/tty1
[Invio]
Attiva i numeri nella tastiera numerica della prima console virtuale.
Il primo problema che si incontra dal punto di vista dell'internazionalizzazione di un sistema operativo, è la disposizione dei tasti sulla tastiera. Quando la tastiera viene utilizzata in modalità ASCII o Unicode, il kernel utilizza una tabella di conversione prima di trasmettere alle applicazioni i tasti premuti.
In fase di compilazione del kernel viene definita una tabella di partenza attraverso il file sorgenti_linux/driver/char/defkeymap.c
. Normalmente questo file corrisponde alla mappa della tastiera statunitense, ma può anche essere cambiato come viene mostrato in seguito.
Di solito, la mappa della tastiera viene ridefinita attraverso il programma loadkeys indicando come argomento il nome di un file contenente la mappa desiderata. I file delle varie mappe disponibili sono contenuti normalmente a partire dalla directory /usr/share/keymaps/
.
Il sistema della mappa della tastiera che si descrive qui e nelle sezioni seguenti, riguarda solo le console virtuali di GNU/Linux e non l'impostazione fatta dal sistema grafico X per i programmi che si avviano al suo interno.
Il programma showkey (3) permette di visualizzare, attraverso lo standard output, il codice corrispondente ai tasti che si premono e si rilasciano. Dal momento che ciò impegna totalmente la tastiera, showkey conclude il suo funzionamento dopo 10 s di inattività.
showkey [opzioni] |
Questo programma non può funzionare in una finestra di terminale nel sistema grafico X. |
|
Segue la descrizione di alcuni esempi.
$
showkey -s
[Invio]
kb mode was XLATE press any key (program terminates after 10s of last keypress)... |
[Esc]
0x01 0x81 |
[Alt]
0x38 0xb8 |
[AltGr]
0xe0 0x38 0xe0 0xb8 |
$
showkey -k
[Invio]
kb mode was XLATE press any key (program terminates after 10s of last keypress)... |
[Esc]
0x01 0x81 |
[Alt]
0x38 0xb8 |
[AltGr]
0x64 0xe4 |
$
showkey -m
[Invio]
kb mode was XLATE press any key (program terminates after 10s of last keypress)... |
[Esc]
keycode 27 press |
[F1]
keycode 27 press keycode 91 press keycode 91 press keycode 65 press |
[F2]
keycode 27 press keycode 91 press keycode 91 press keycode 66 press |
Il programma loadkeys (4) viene usato normalmente per cambiare la mappa della tastiera utilizzata in tutte le console virtuali, attraverso le indicazioni contenute in un file fornito come argomento o attraverso lo standard input. Il file fornito come argomento, se non contiene l'indicazione di un percorso, viene cercato a partire dalla directory /usr/share/keymaps/piattaforma/
.
loadkeys [opzioni] [file] |
È importante considerare che la modifica interviene su tutte le console virtuali; pertanto, se si tenta qualcosa del genere attraverso una connessione remota si interviene sull'elaboratore con il quale si è connessi e non su quello dal quale si sta operando.
Il programma loadkeys può essere utilizzato anche solo per generare un file sorgente da utilizzare al posto di sorgenti_linux/drivers/char/defkeymap.c
quando si compila un nuovo kernel.
Segue la descrizione di alcuni esempi.
$
loadkeys /usr/share/keymaps/i386/qwerty/it.kmap
[Invio]
Carica la mappa contenuta nel file /usr/share/keymaps/i386/qwerty/it.kmap
.
$
loadkeys it.kmap
[Invio]
Esattamente come nell'esempio precedente, supponendo di operare su una piattaforma i386.
$
loadkeys it
[Invio]
Esattamente come nell'esempio precedente.
$
loadkeys -u it
[Invio]
Come nell'esempio precedente, usando però la modalità Unicode.
$
loadkeys -m it > drivers/char/defkeymap.c
[Invio]
Genera il file drivers/char/defkeymap.c
in base alla mappa it.kmap.
Il programma dumpkeys (5) viene usato normalmente per emettere attraverso lo standard output la mappa attuale della tastiera.
dumpkeys [opzioni] |
Attraverso le opzioni si può controllare la quantità delle informazioni ottenute e il modo in cui queste vengono visualizzate.
|
Segue la descrizione di alcuni esempi.
$
dumpkeys -i
[Invio]
keycode range supported by kernel: 1 - 255 max number of actions bindable to a key: 256 number of keymaps in actual use: 8 of which 2 dynamically allocated ranges of action codes supported by kernel: 0x0000 - 0x00ff 0x0100 - 0x01ff 0x0200 - 0x0213 0x0300 - 0x0313 0x0400 - 0x0405 0x0500 - 0x05ff 0x0600 - 0x0603 0x0700 - 0x0708 0x0800 - 0x08ff 0x0900 - 0x0919 0x0a00 - 0x0a07 0x0b00 - 0x0bff 0x0c00 - 0x0c07 0x0d00 - 0x0dff number of function keys supported by kernel: 256 max nr of compose definitions: 256 nr of compose definitions in actual use: 68 |
$
dumpkeys -l
[Invio]
... Symbols recognized by dumpkeys: (numeric value, symbol) 0x0000 nul 0x0001 Control_a 0x0002 Control_b ... 0x00fe thorn 0x00ff ydiaeresis 0x0100 F1 0x0101 F2 ... 0x0112 F19 0x0113 F20 0x0114 Find 0x0115 Insert 0x0116 Remove ... 0x01fe F245 0x01ff F246 0x0200 VoidSymbol 0x0201 Return ... 0x0404 dead_diaeresis 0x0405 dead_cedilla 0x0500 Console_1 0x0501 Console_2 ... 0x0c06 SCtrlL 0x0c07 SCtrlR The following synonyms are recognized: Control_h for BackSpace Control_i for Tab ... Recognized modifier names and their column numbers: shift 1 altgr 2 control 4 alt 8 shiftl 16 shiftr 32 ctrll 64 ctrlr 128 |
$
dumpkeys > prova.map
[Invio]
Crea il file prova.map
contenente la configurazione attuale della tastiera. Il file potrebbe avere l'aspetto seguente:
$
cat prova.map
[Invio]
keymaps 0-2,4,6,8-9,12 keycode 1 = Escape Escape alt keycode 1 = Meta_Escape keycode 2 = one exclam alt keycode 2 = Meta_one shift alt keycode 2 = Meta_exclam ... keycode 83 = KP_Period altgr control keycode 83 = Boot control alt keycode 83 = Boot ... string F1 = "\033[[A" string F2 = "\033[[B" string F3 = "\033[[C" ... compose 't' 'h' to 'þ' compose 's' 's' to 'ß' compose '"' 'y' to 'ÿ' compose 's' 'z' to 'ß' compose 'i' 'j' to 'ÿ' |
$
dumpkeys | loadkeys --unicode
[Invio]
Riconfigura la tastiera in modo da emettere simboli secondo la codifica UTF-8.
$
dumpkeys -h > /dev/null
[Invio]
Visualizza esclusivamente lo standard error, dal quale si ottiene l'elenco delle codifiche disponibili:
iso-8859-{1,2,3,4,5,7,8,9,10,15},koi8-{r,u},mazovia,cp-1250,\ |
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
1) Linux console font and keytable utilities dominio pubblico, salva la licenza particolare di alcuni tipi speciali di carattere
2) Linux console font and keytable utilities dominio pubblico, salva la licenza particolare di alcuni tipi speciali di carattere
3) Linux console font and keytable utilities dominio pubblico, salva la licenza particolare di alcuni tipi speciali di carattere
4) Linux console font and keytable utilities dominio pubblico, salva la licenza particolare di alcuni tipi speciali di carattere
5) Linux console font and keytable utilities dominio pubblico, salva la licenza particolare di alcuni tipi speciali di carattere
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome tastiera_della_console_di_un_sistema_gnu_linux.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]