[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 228.   X: configurazione più dettagliata della tastiera e del mouse

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.

228.1   Componenti della configurazione

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:

  1. 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>;

  2. i tipi, annotati all'interno della directory xkb/types/, dove si definisce il comportamento dei tasti modificatori (quelli che servono a creare delle combinazioni);

  3. 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;

  4. i simboli, annotate all'interno della directory xkb/symbols/, dove si definiscono i caratteri associati effettivamente ai nomi simbolici dei tasti;

  5. 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.

228.2   Modificatori

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.

228.3   Configurazione

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:

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"

    Option "AutoRepeat" "500 30"

#   Option "XkbKeycodes"        "xfree86"
    Option "XkbKeycodes"        "xorg"
    Option "XkbTypes"           "default"
    Option "XkbSymbols"         "en_US(pc102)+it"
    Option "XkbGeometry"        "pc(pc102)"
    Option "XkbCompat"          "basic+pc+iso9995"
EndSection

Quello che si vede rappresenta una configurazione minima per l'utilizzo di una tastiera italiana tipica in un elaboratore x86 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 x86:

! model         =       keycodes
  macintosh_old =       macintosh
  powerpcps2    =       powerpcps2
  pc98          =       xfree98(pc98)
  abnt2         =       xfree86(abnt2)
  jp106         =       xfree86(jp106)
  *             =       xfree86

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:

default xkb_keycodes "xfree86" {
    include "xfree86(basic)"
    <BKSL> =  51;
    <LSGT> =  94;
};

xkb_keycodes "basic" {

    minimum= 8;
    maximum= 255;

    <TLDE> =  49;
    <AE01> =  10;
    <AE02> =  11;
    ...
    indicator 1 = "Caps Lock";
    indicator 2 = "Num Lock";
    indicator 3 = "Scroll Lock";

    alias <ALGR> = <RALT>;
};
...
xkb_keycodes "abnt2" {
    include "xfree86(basic)"
    <BKSL> = 94;
    <AC12> = 51;
    <KPPT> = 134;
};

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:

default xkb_keycodes "xfree86" {
    include "xfree86(basic)"
...

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ì:

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"

    Option "AutoRepeat" "500 30"

    Option "XkbKeycodes"        "xorg(xfree86)"
    Option "XkbTypes"           "default"
    Option "XkbSymbols"         "en_US(pc102)+it"
    Option "XkbGeometry"        "pc(pc102)"
    Option "XkbCompat"          "basic+pc+iso9995"
EndSection

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:

default xkb_types "default" {
    include "basic"
    include "pc"
    include "iso9995"
    include "extra"
    include "mousekeys"
};

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:

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"

    Option "AutoRepeat" "500 30"

    Option "XkbKeycodes"        "xorg(xfree86)"
    Option "XkbTypes"           "basic+pc+iso9995+extra+mousekeys"
    Option "XkbSymbols"         "en_US(pc102)+it"
    Option "XkbGeometry"        "pc(pc102)"
    Option "XkbCompat"          "basic+pc+iso9995"
EndSection

Naturalmente si possono rendere esplicite le sezioni; osservando il contenuto dei vari file, si dovrebbe scrivere così:

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"

    Option "AutoRepeat" "500 30"

    Option "XkbKeycodes"        "xorg(xfree86)"
    Option "XkbTypes"           "basic(basic)+pc(default)+\
  \iso9995(default)+extra(default)+mousekeys(default)" Option "XkbSymbols" "en_US(pc102)+it" Option "XkbGeometry" "pc(pc102)" Option "XkbCompat" "basic+pc+iso9995" EndSection

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:

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"

    Option "AutoRepeat" "500 30"

    Option "XkbKeycodes"        "xorg(xfree86)"
    Option "XkbTypes"           "basic(basic)+pc(default)+\
  \iso9995(default)+extra(default)+mousekeys(default)" Option "XkbSymbols" "en_US(pc102)+it(basic)" Option "XkbGeometry" "pc(pc102)" Option "XkbCompat" "basic+pc+iso9995" EndSection

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:

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"

    Option "AutoRepeat" "500 30"

    Option "XkbKeycodes"        "xorg(xfree86)"
    Option "XkbTypes"           "basic(basic)+pc(default)+\
  \iso9995(default)+extra(default)+mousekeys(default)" Option "XkbSymbols" "en_US(pc102)+it(basic)" Option "XkbGeometry" "pc(pc102)" Option "XkbCompat" "basic(basic)+pc(basic)+iso9995(default)" EndSection

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:

    ...
    Option "XkbSymbols"         "en_US(pc102)+it(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:

    ...
    Option "XkbSymbols"         "en_US(pc105)+it(basic)"
    Option "XkbGeometry"        "pc(pc105)"
    ...

228.3.1   Sintesi della configurazione

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.

228.3.2   Aggiungere nuovi file di configurazione

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:

-dp----- a------- it(basic)
--p----- a------- it(Sundeadkeys)
--p----- a------- it(sundeadkeys)
--p----- a------- it(nodeadkeys)

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:

Lettera Significato mnemonico Descrizione
h
hidden Sezione nascosta da utilizzare soltanto all'interno di altre.
d
default Sezione predefinita.
p
partial Sezione parziale.
a
alphanumeric Funzione riferita alla parte della tastiera che serve a ottenere simboli alfanumerici e non.
m
modifier Funzione riferita all'uso dei tasti modificatori.
k
keypad Funzione riferita alla gestione della tastiera numerica.
f
function Funzione riferita alla gestione di tasti con funzioni speciali.
g
group Funzione riferita alla gestione di gruppi alternativi.

228.4   Configurazione con «xmodmap»

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.

Figura 228.15. Il programma xev in funzione.

xev

Per esempio, premendo il tasto [Ctrl] sinistro di una tastiera comune si dovrebbe ottenere un risultato simile a quello seguente:

KeyPress event, serial 29, synthetic NO, window 0x1000001,
    root 0x36, subw 0x0, time 2064092, (336,380), root:(339,399),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:  ""

KeyRelease event, serial 29, synthetic NO, window 0x1000001,
    root 0x36, subw 0x0, time 2064203, (336,380), root:(339,399),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:  ""

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.

228.4.1   Utilizzo di «xmodmap»

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]

Tabella 228.17. Alcune opzioni.

Opzione Descrizione
-display schermo
Permette di specificare a quale servente grafico fare riferimento.
-grammar
Genera un promemoria della sintassi da usare per la configurazione.
-n
Simula l'operazione, senza eseguirla veramente.
-e espressione
Esegue l'espressione fornita, che in pratica è l'equivalente di una direttiva di configurazione. Si può usare questa opzione più volte.
-pm
print modifier
Emette la configurazione attuale dei modificatori.
-pk
print keymap
Emette la configurazione attuale della mappa della tastiera.
-pke
print keymap expression
Emette la configurazione attuale della mappa della tastiera, usando un formato compatibile con quello necessario per la configurazione.
-pp
print pointermap
Emette la configurazione attuale del puntatore grafico.

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ì:

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"

    Option "AutoRepeat" "500 30"

    Option "XkbKeycodes"        "xorg(xfree86)"
    Option "XkbTypes"           "basic(basic)+pc(default)+\
  \iso9995(default)+extra(default)+mousekeys(default)" Option "XkbSymbols" "en_US(pc102)+it(basic)" Option "XkbGeometry" "pc(pc102)" Option "XkbCompat" "basic(basic)+pc(basic)+iso9995(default)" EndSection

228.4.2   Configurazione della tastiera numerica

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:

keycode  79 = KP_7
keycode  80 = KP_8
keycode  81 = KP_9
keycode  83 = KP_4
keycode  84 = KP_5
keycode  85 = KP_6
keycode  87 = KP_1
keycode  88 = KP_2
keycode  89 = KP_3
keycode  90 = KP_0
keycode  91 = KP_Decimal

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]

228.4.3   Configurazione dei tasti del mouse

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:

pointer = 3 2 1

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

228.4.4   Riconfigurazione della mappa della tastiera

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:

clear shift
clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod5 = Scroll_Lock

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:

clear shift
clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod5 = Scroll_Lock
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 =

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 xkb/.

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ì:

keycode  50 = Shift_L
keycode  62 = Shift_R
keycode  66 = Caps_Lock
keycode  37 = Control_L
keycode 109 = Control_R
keycode  64 = Alt_L Meta_L
keycode  77 = Num_Lock Pointer_EnableKeys
keycode 113 = Mode_switch
keycode  78 = Scroll_Lock

228.5   Riferimenti


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


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


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] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory