[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
XFree86 e X.Org prevedono un tipo di configurazione più dettagliato; eventualmente è possibile intervenire a livello brutale anche attraverso il programma xmodmap. In ogni caso, occorre ricordare che la configurazione della tastiera interferisce anche con quella del mouse; pertanto, un errore fatto da una parte può anche ripercuotersi dall'altra.
Si tenga in considerazione che, a causa della complessità del sistema di gestione della tastiera di X, le indicazioni che appaiono in questo capitolo possono essere imprecise o troppo semplificate.
Nelle situazioni più comuni, i componenti usati da XFree86 e X.Org per la configurazione della tastiera e del mouse, si trovano a partire dalla directory /usr/lib/X11/xkb/
, oppure da /etc/X11/xkb/
. Per semplicità, qui vengono indicati percorsi del tipo xkb/...
. I componenti principali sono cinque:
i codici dei tasti (key code), annotati all'interno della directory xkb/keycodes/
, dove si abbinano i codici numerici della tastiera a dei nomi simbolici, secondo la forma <xxxx>;
i tipi, annotati all'interno della directory xkb/types/
, dove si definisce il comportamento dei tasti modificatori (quelli che servono a creare delle combinazioni);
le mappe di compatibilità, annotate all'interno della directory xkb/compatibility/
, dove si definiscono gli adattamenti da applicare quando i programmi non sono in grado di interpretare correttamente tutte le funzionalità disponibili;
i simboli, annotate all'interno della directory xkb/symbols/
, dove si definiscono i caratteri associati effettivamente ai nomi simbolici dei tasti;
i disegni delle tastiere (geometry), annotati all'interno della directory xkb/geometry/
, dove si descrivono le tastiere in modo da poterne riprodurre una mappa stampata.
I modificatori sono i tasti o le combinazioni di tasti che servono a cambiare significato ad altri tasti. La configurazione di XFree86 e X.Org distingue tra modificatori reali e modificatori virtuali.
I modificatori reali sono i tasti [Maiuscole], [Fissamaiuscole], [Ctrl] e altri cinque modificatori generici da stabilire, denominati Mod1, Mod2, Mod3, Mod4 e Mod5. A questi modificatori generici si possono associare tasti come [Alt], [Meta], [BlocNum], che in tal caso sono da considerare dei modificatori virtuali. Eventualmente, un modificatore virtuale può essere costituito in pratica da una combinazione di tasti.
Storicamente, i modificatori presenti praticamente in tutte le tastiere sono solo i primi tre modificatori reali appena descritti; questo spiega la necessità di attribuire gli altri ai modificatori generici.
La configurazione della tastiera può avvenire nel file XF86Config
in un modo più dettagliato rispetto a quanto si descrive di solito. Si osservi l'esempio seguente:
|
Quello che si vede rappresenta una configurazione minima per l'utilizzo di una tastiera italiana tipica in un elaboratore i386 con X.Org. Le varie opzioni rappresentano le cinque componenti principali di configurazione, che si trovano all'interno dei file contenuti nelle directory xkb/keycodes/
, xkb/types/
, xkb/symbols/
, xkb/geometry/
e xkb/compat/
rispettivamente.
In questo caso, l'opzione XkbKeycodes contiene il valore xorg, che rimanda ai file xkb/rules/xorg
e xkb/rules/xorg.lst
; nel primo di questi due file c'è un riferimento esplicito alla voce xfree86 per ciò che riguarda i codici della tastiera di un elaboratore i386 o derivato:
|
Ciò corrisponde a selezionare il file di configurazione xkb/keycodes/xfree86
che contiene l'abbinamento tra codici numerici della tastiera e codici simbolici, come si può vedere dall'estratto seguente:
|
Come appena descritto, assegnare il valore xfree86 all'opzione XkbKeycodes significa indicare l'uso del file xkb/keycodes/xfree86
, il cui contenuto, come si può vedere dall'estratto di esempio, è suddiviso in sezioni. Quando si indica il file, occorrerebbe anche specificare la sezione a cui si fa riferimento; in questo caso la sezione predefinita a essere presa in considerazione è quella denominata nello stesso modo del file, xfree86, come si vede all'inizio:
|
Si può vedere che questa sezione richiama la sezione basic dello stesso file. In pratica, la configurazione di X (/etc/X11/XF86Config*
, /etc/X11/xorg.conf
, ecc.) avrebbe potuto essere più precisa specificandola così:
|
L'opzione XkbTypes, che si riferisce alla gestione dei tasti modificatori, contiene il valore default, che corrisponde alla selezione del file xkb/types/default
, utilizzando la sezione predefinita con lo stesso nome. Il contenuto del file potrebbe essere questo:
|
In pratica, viene dichiarato l'uso di altri file della stessa directory secondo la sequenza che si può vedere. La stessa cosa, si può esprimere nel file di configurazione di X (/etc/X11/XF86Config*
, /etc/X11/xorg.conf
, ecc.), come si vede dall'esempio seguente:
|
Naturalmente si possono rendere esplicite le sezioni; osservando il contenuto dei vari file, si dovrebbe scrivere così:
|
Dopo aver espanso le opzioni precedenti, XkbSymbols comincia a essere più intuitiva: evidentemente viene usata la sezione pc102 del file xkb/symbols/en_US
e la sezione predefinita del file xkb/symbols/it
. In questo modo si fa riferimento alla mappa inglese con tutte le estensioni del caso, compreso il fatto che si usa una tastiera a 102 tasti, a cui si sovrappone la mappa italiana, che va a sostituire alcuni tasti. Dall'osservazione dei file, si determina che la sezione predefinita del file xkb/symbols/it
è basic:
|
L'opzione XkbGeometry serve a dichiarare la forma che ha la tastiera. Come ormai si intende, viene indicata la sezione pc102 del file xkb/geometry/pc
. Ovviamente è opportuno che la geometria della tastiera sia conforme a quanto dichiarato nell'opzione XkbSymbols.
L'opzione XkbCompat dichiara le «mappe di compatibilità». Come si vede si fa riferimento alle sezioni predefinite dei file xkb/compat/basic
, xkb/compat/pc
e xkb/compat/iso9995
. Dall'osservazione dei file si determinano le sezioni predefinite:
|
Questa modalità di configurazione diventa utile quando si vuole fare qualcosa di diverso da ciò che sarebbe predefinito. Per questo, l'opzione più interessante per gli interventi manuali è XkbSymbols. Per esempio, per attribuire una «variante» alla mappa della tastiera prescelta, occorre trovare presumibilmente una sezione appropriata nel file, che in questo caso è xkb/symbols/it
; così, volendo disabilitare i tasti morti, occorre specificare la sezione nodeadkeys:
|
Con lo stesso criterio, per cambiare la geometria della tastiera, occorre intervenire tra le opzioni di xkb/symbols/en_US
e di xkb/geometry/pc
; in questo caso si passa a una tastiera a 105 tasti:
|
Una volta definita in qualche modo la configurazione per la tastiera, si può ottenere una sintesi di tutto ciò che viene coinvolto con l'aiuto del programma xkbcomp,(1) usando l'opzione -xkb:
$
xkbcomp -xkb :0
[Invio]
In questo modo si richiede di analizzare la configurazione relativa alla tastiera associata allo schermo nelle coordinate :0 (ovvero :0.0). Ciò che si ottiene in questo caso è il file server-0.xkb
, la cui consultazione può essere molto utile per comprendere meglio la configurazione della propria tastiera.
A parte ogni considerazione sulla difficoltà che comporta la modifica e l'aggiunta di altri file nella struttura che si articola a partire dalla directory xkb/
, occorre considerare che i file in questione (e le sezioni in essi contenute) sono riepilogati all'interno di indici; uno per ogni sottodirectory. Per esempio, il file xkb/symbols.dir
si riferisce al contenuto della directory xkb/symbols/
. Ecco un estratto di questo file:
|
L'elenco è composto da tre parti: una prima serie di indicatori, una seconda serie e alla fine il file e la sezione a cui si riferiscono. Questi indicatori possono essere teoricamente quelli seguenti:
hdp----- amkfg--- nome(sezione) |
Questi indicatori servono a classificare la sezione che appare a fianco, secondo la logica della tabella seguente:
|
Nella necessità di modificare o di costruire una mappa personalizzata della tastiera, piuttosto di addentrarsi nei meandri del contenuto delle varie sottodirectory che si articolano a partire da xkb/
, può essere più conveniente l'uso del programma xmodmap.(2) Per poter usare questo programma è necessario conoscere il codice numerico dei tasti. Per acquisire questa informazione si può utilizzare il programma xkbprint, che si avvale delle informazioni contenute nella directory xkb/geometry/
, ma in presenza di una tastiera differente dal previsto, occorre usare il programma xev.(3)
Il programma xev si avvia da una finestra di terminale e si traduce in un riquadro con sfondo bianco, contenente un piccolo rettangolo. Quando la sua finestra è in primo piano o comunque quando è attiva, le azioni che si compiono con la tastiera o con il mouse, vengono descritte nella finestra di terminale da cui il programma è stato avviato. La figura successiva dà un'idea di questo comportamento.
|
Per esempio, premendo il tasto [Ctrl] sinistro di una tastiera comune si dovrebbe ottenere un risultato simile a quello seguente:
|
Da questo esempio si comprende che il codice del tasto [Ctrl] sinistro è il numero 37.
Con queste informazioni si può usare il programma xmodmap per sostituire la funzione di qualche tasto, oppure per ridefinire completamente la tastiera.
Il programma xmodmap si avvale normalmente di un file di configurazione, che, se non lo si specifica espressamente, corrisponde a .xmodmap
contenuto nella directory personale dell'utente. Per questa ragione il programma può fare a meno di argomenti nella riga di comando:
xmodmap [opzioni] [file_di_configurazione] |
Segue la descrizione di alcuni esempi di interrogazione sullo stato attuale della configurazione, quando il servente grafico è stato avviato avendo il file di configurazione di X (/etc/X11/XF86Config*
, /etc/X11/xorg.conf
, ecc.) con la sezione InputDevice organizzata così:
|
$
xmodmap -grammar
[Invio]
xmodmap accepts the following input expressions: pointer = default reset pointer buttons to default pointer = NUMBER ... set pointer button codes keycode NUMBER = [KEYSYM ...] map keycode to given keysyms keysym KEYSYM = [KEYSYM ...] look up keysym and do a keycode operation clear MODIFIER remove all keys for this modifier add MODIFIER = KEYSYM ... add the keysyms to the modifier remove MODIFIER = KEYSYM ... remove the keysyms from the modifier where NUMBER is a decimal, octal, or hex constant; KEYSYM is a valid Key Symbol name; and MODIFIER is one of the eight modifier names: Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, or Mod5. Lines beginning with an exclamation mark (!) are taken as comments. Case is significant except for MODIFIER names. Keysyms on the left hand side of the = sign are looked up before any changes are made; keysyms on the right are looked up after all of those on the left have been resolved. This makes it possible to swap modifier keys. |
$
xmodmap -pm
[Invio]
xmodmap: up to 2 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x6d) mod1 Alt_L (0x40) mod2 Num_Lock (0x4d) mod3 Mode_switch (0x71) mod4 Super_L (0x73) mod5 Scroll_Lock (0x4e) |
$
xmodmap -pk
[Invio]
There are 4 KeySyms per KeyCode; KeyCodes range from 8 to 255. ... 8 9 0xff1b (Escape) 10 0x0031 (1) 0x0021 (exclam) 0x00b9 (onesuperior) 0x00a1 (exclamdown) 11 0x0032 (2) 0x0022 (quotedbl) 0x00b2 (twosuperior) 0xfe59 (dead_doubleacute) 12 0x0033 (3) 0x00a3 (sterling) 0x00b3 (threesuperior) 0xfe53 (dead_tilde) ... 115 0xffeb (Super_L) 116 0xff20 (Multi_key) 117 0xff67 (Menu) 118 119 ... 254 255 |
$
xmodmap -pke
[Invio]
keycode 8 = keycode 9 = Escape keycode 10 = 1 exclam onesuperior exclamdown keycode 11 = 2 quotedbl twosuperior dead_doubleacute keycode 12 = 3 sterling threesuperior dead_tilde ... keycode 115 = Super_L keycode 116 = Multi_key keycode 117 = Menu keycode 118 = keycode 119 = ... keycode 254 = keycode 255 = |
$
xmodmap -pp
[Invio]
There are 3 pointer buttons defined. Physical Button Button Code 1 1 2 2 3 3 |
In presenza di una tastiera comune, con la quale si intende sfruttare il blocco dei tasti numerici esclusivamente per questo, eliminando del tutto la possibilità di usare quei tasti anche per il movimento del cursore e altro, si possono ridefinire le funzioni associate ai tasti, senza distinzione tra i livelli. Per cominciare occorre ottenere la configurazione attuale:
$
xmodmap -pke
[Invio]
... keycode 79 = KP_Home KP_7 keycode 80 = KP_Up KP_8 keycode 81 = KP_Prior KP_9 ... keycode 83 = KP_Left KP_4 keycode 84 = KP_Begin KP_5 keycode 85 = KP_Right KP_6 ... keycode 87 = KP_End KP_1 keycode 88 = KP_Down KP_2 keycode 89 = KP_Next KP_3 keycode 90 = KP_Insert KP_0 keycode 91 = KP_Delete KP_Decimal ... |
Con questi dati si può costruire un file di configurazione contenente le righe seguenti:
|
Queste righe possono essere inserite all'interno del file ~/.xmodmap
, oppure in un altro file da indicare espressamente nella riga di comando di xmodmap. In alternativa si può usare anche l'opzione -e, in questo modo:
$
xmodmap -e "keycode 79 = KP_7"
[Invio]
$
xmodmap -e "keycode 80 = KP_8"
[Invio]
$
xmodmap -e "keycode 81 = KP_9"
[Invio]
$
xmodmap -e "keycode 83 = KP_4"
[Invio]
$
xmodmap -e "keycode 84 = KP_5"
[Invio]
$
xmodmap -e "keycode 85 = KP_6"
[Invio]
$
xmodmap -e "keycode 87 = KP_1"
[Invio]
$
xmodmap -e "keycode 88 = KP_2"
[Invio]
$
xmodmap -e "keycode 89 = KP_3"
[Invio]
$
xmodmap -e "keycode 90 = KP_0"
[Invio]
$
xmodmap -e "keycode 91 = KP_Decimal"
[Invio]
Normalmente i tasti del mouse sono configurati in modo da avere il primo tasto, ovvero quello premuto più spesso, sotto al dito indice della mano destra. Una persona che volesse usare il mouse con la mano sinistra dovrebbe ridefinire la sequenza dei tasti con una configurazione per xmodmap pari all'esempio seguente:
|
Usando l'opzione -e basta il comando seguente:
$
xmodmap -e "pointer = 3 2 1"
[Invio]
Si può verificare l'inversione con l'opzione -pp:
$
xmodmap -pp
[Invio]
There are 3 pointer buttons defined. Physical Button Button Code 1 3 2 2 3 1 |
La riconfigurazione della mappa della tastiera può essere eseguita facilmente se si dispone già di una mappa abbastanza simile a quella che si vuole ottenere. Per prima cosa occorre osservare l'associazione dei tasti modificatori:
$
xmodmap -pm
[Invio]
xmodmap: up to 2 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x6d) mod1 Alt_L (0x40) mod2 Num_Lock (0x4d) mod3 Mode_switch (0x71) mod4 Super_L (0x73) mod5 Scroll_Lock (0x4e) |
Per riprodurre la stessa cosa attraverso direttive di configurazione di xmodmap, occorrono le righe seguenti:
|
Successivamente, si può riprodurre la mappa attuale, direttamente in forma di direttive di configurazione per xmodmap, con l'opzione -pke:
$
xmodmap -pke
[Invio]
keycode 8 = keycode 9 = Escape keycode 10 = 1 exclam onesuperior exclamdown keycode 11 = 2 quotedbl twosuperior dead_doubleacute ... keycode 115 = Super_L keycode 116 = Multi_key keycode 117 = Menu keycode 118 = keycode 119 = ... keycode 254 = keycode 255 = |
Per ottenere quasi la stessa cosa, basta assemblare le due parti in un file da dare in pasto a xmodmap:
|
Naturalmente, una volta verificato che tutto funziona (quasi) come prima, si può fare qualche modifica. Dovrebbe essere evidente che ogni direttiva keycode ha alla destra del segno = la sequenza dei quattro livelli per il tasto corrispondente.
È importante osservare che l'associazione dei modificatori non è uniforme tra le definizioni delle tastiere dei vari paesi. Per esempio, non è detto che la funzione per il passaggio al terzo livello sia associata al modificatore virtuale Mode_switch, come invece avviene in questo caso; inoltre non è detto che sia associata al modificatore reale Mod3. Purtroppo, l'associazione dei modificatori non può essere cambiata, se non seguendo attentamente le caratteristiche della configurazione contenuta a partire da |
Se si dispone di una tastiera che, pur risultando compatibile dal punto di vista elettronico, mostra di avere un'associazione differente dei codici numerici, occorre usare il programma xev per scoprire l'abbinamento corretto, quindi si può cercare di adattare una mappa già esistente, secondo la modalità già mostrata. Naturalmente ciò richiede un lavoro più lungo, tenendo conto che la prima cosa da associare correttamente sono proprio i modificatori che si vogliono usare. Tornando all'esempio già mostrato, i vari tasti [Maiuscole], [Fissamaiuscole], [Ctrl], [Alt],... sono associati così:
|
Erik Fortune, The X keyboard extension: protocol specification
Kamil Toman, Ivan U. Pascal, The XKB configuration guide
Kamil Toman, Ivan U. Pascal, How to further enhance XKB configuration
Doug Palmer, An unreliable guide to XKB configuration
Ivan U. Pascal, X keyboard extension
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
1) X MIT più altre licenze per porzioni particolari di codice
2) X MIT più altre licenze per porzioni particolari di codice
3) X MIT più altre licenze per porzioni particolari di codice
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome x_configurazione_piu_dettagliata_della_tastiera_e_del_mouse.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]