Linuxtrent: Come usare i tasti "balenghi" con X [lunghetto]

  • From: ianezz@xxxxxxxxxx
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Wed, 20 Feb 2002 18:25:22 +0100


Tempo addietro andavo affermando che non c'era speranza di usare con
XFree86 i tasti ``extra'' che si sono su certe tastiere, come ad
esempio il tasto ``calcolatrice'' o il tasto ``play'' o il tasto
``internet'', etc.

Mentre con le console testuali e` piu` che altro una questione di
usare ``setkeycodes'' e loadkeys, con X non sembrava ci fosse speranza
(a parte per i soliti Windows sinistro e destro). 

In realta` sembra proprio che ora abbia torto (per fortuna!).

Dicevo che non c'era speranza in quanto col buon comando ``xev'' (che
mostra tutti gli eventi che arrivano ad una certa finestra) non vedevo
alcun evento (nessun keycode, per la precisione) per i tasti in
questione. 

L'altro giorno, un po' per caso e un po' ispirato dal fatto che Ettore
e Daniele avevan fatto qualcosa di simile a suo tempo, provo con il
computer del fratellone che ha una di queste tastiere ``estese'',
kernel 2.4.x e XFree86 4.1.0, e scopro che invece qui gli eventi (i
keycode) arrivano. Kernel 2.4, modifica a XFree86 o cosa? Boooh. Vai a
sapere...

Cmq, ecco una brevissima guida a come funziona la tastiera in X e come
si possono usare i tasti extra (e scusate se mi dilungo in dettagli,
ma per come era scritta nella Keyboard-And-Console-HOWTO non l'avevo
mai capita finora...)

----------------------------------------------------------------------

1) Le tastiere generano degli ``scancode'' (sequenze di uno o due
   byte). XFree86 li legge (tramite il kernel) e ad essi associa dei
   ``keycode'' (un codice numerico).

2) A ogni keycode si possono associare uno o piu` ``keysym'': essi
   sono dei nomi simbolici che indicano univocamente un tasto
   all'interno dell'X Window System, ovvero delle varie
   implementazioni esistenti.

   Questa mappatura keycode -> keysym serve per il semplice motivo che
   se cosi` non fosse sarebbe impossibile usare applicazioni
   remotamente (visto che i keycode cambiano da modello di tastiera a
   modello di tastiera e non e` pensabile che ogni applicazione debba 
   sapere tutto su tutti i possibili modelli di tastiere :-).

   L'elenco completo dei keysym si puo` vedere nel file
       
       /usr/include/X11/keysymdef.h 

   e ne esistono innumerevoli: molti di essi indicano dei caratteri
   alfanumerici, altri indicano funzioni particolari (esempio:
   backspace, delete, compose, meta, super, hyper, multi,
   etc.). Questo perche` in passato le varie workstation e i vari X
   terminal disponevano di un'ampia gamma di tastiere con i tasti piu`
   inconsueti che si potessero concepire (oggi un po' meno).

3) Tipicamente con X un keycode ha associato a se` al piu`
   4 keysym:

    - il primo viene usato se il tasto indicato dal keycode viene
      premuto da solo
  
    - il secondo viene usato quando il tasto indicato dal keycode
      viene premuto con shift
  
    - il terzo viene usato quando il tasto indicato dal keycode viene 
      premuto insieme al tasto mod1 (che solitamente e` l'ALT sinistro)
  
    - il quarto viene usato quando il tasto indicato dal keycode viene
      premuto insieme a shift e a mod1

   Le applicazioni stanno in ascolto per vedere che keysym e` stato
   premuto, e agiscono di conseguenza.

4) Di serie con l'X Window System arriva un programmino che si chiama
   ``xmodmap'' che permette di variare al volo le associazioni tra
   keycode e keysym (e anche altre cose). Permette anche di
   visualizzare le mappature correnti con ``xmodmap -pk'' oppure
   ``xmodmap -pke''

   Esempio pratico: le tastiere di oggi hanno i tasti ``Windows
   sinistro'' e ``Windows destro'', che con Linux di solito non
   servono a un tubo... essi solitamente hanno keycode 115 e 116
   (sulle tastiere italiane). 

   Con xmodmap e` possibile utilizzarli in maniera piu` proficua, come
   ad esempio assegnando loro la graffa aperta e chiusa (utile a chi
   programma), e le quadre con shift

   Ovvero:
   
       xmodmap -e 'keycode 115 = braceleft bracketleft'
       xmodmap -e 'keycode 116 = braceright bracketright'

   Fatto questo, premendo il tasto windows sinistro da solo verra`
   prodotta la graffa aperta, e premendo il tasto windows destro da
   solo verra` prodotta la graffa chiusa. Idem con shift, ma ci son le
   parentesi quadre.


5) Ritornando ai fantomatici tasti "in piu`", con i vecchi XFree86 non
   venivano manco beccati i keycode, quindi nulla da fare con X.

   Con i nuovi XFree86 (>= 4.1 ?) invece i keycode ci sono.

   Ad essi non e` pero` associato alcun keysym, per cui le
   applicazioni normali non se ne possono far granche`. Ma da quanto
   sopra risulta chiaro che possiamo associare dei keysym a questi
   keycode usando xmodmap.

6) Non mi pare ci sia uno standard di qualche genere per i keycode
   generati dai tasti ``extra'' delle tastiere estese, per cui bisogna
   innanzitutto avviare `xev', portare il puntatore del mouse
   all'interno della sua finestra, premere i tasti estesi e annotarsi
   il loro keycode.

7) A questo punto bisogna associar loro dei keysym.

   Sfortunatamente non mi pare che siano ancora previsti dei keysym
   per essi (del tipo ``volume+'' o ``volume-'' o ``calcolatrice''),
   ma non e` da escludere che in una futura release dell'X Window
   System ci siano.

   Fortunatamente ci sono molti keysym che normalmente non vengono
   usati se non con tastiere molto particolari: io ho usato quelli da
   F13 a F35.

   Esempio: se il tasto ``calcolatrice'' genera il keycode 156, gli si
   puo` associare F15 con

       xmodmap -e 'keycode 156 = F15'

   Una volta fatto questo, se si preme il tasto ``calcolatrice'', le
   applicazioni X vedranno che e` stato premuto il tasto F15.

8) Fatta questa operazione per tutti i tasti estesi, associando via
   via keysym diversi, rimane solo da trovare un modo per associare
   dei comandi ai keysym.
 
   Questa e` una possibilita` offerta da diversi window manager.  Ad
   esempio sawfish permette di eseguire delle azioni (anche lanciare
   comandi) sul ricevimento di un certo keysym. E` solo questione di
   configurarlo tramite l'apposita GUI. Idem credo per il window
   manager di KDE, e probabilmente anche per WindowMaker.

   Per cui non resta che dire al nostro window manager preferito
   (tramite la sua GUI di configurazione) che se si accorge che uno ha
   premuto F15 (che per noi e` il tasto ``calcolatrice'')
   deve avviare il programma xcalc.

Semplice, no? :-) Pero` funziona.

Cercando in giro per la rete si trova anche questo documento che
riassume la cosa (l'ho trovato solo dopo aver scritto la gran parte di
questa mail):

    http://www.linuxdude.co.uk/docs/Special-Keys/

Per modificarsi un po' piu` comodamente le tastiere esiste anche il
buon Xkeycaps, che e` una GUI per creare piu` intuitivamente dei file
per xmodmap (ma nel seppur lungo elenco di layout disponibili non mi
par di vederne alcuno che includa anche i tasti extra di cui sopra)

    http://www.jwz.org/xkeycaps/

Alcune note: 

1) Le modifiche effettuate con xmodmap non sono persistenti, ma
   sussistono solo fintantoche` il server X sta in funzione.

   Ne consegue che se vogliamo delle modifiche persistenti, bisogna
   invocare xmodmap ad ogni nuovo avvio dell'X server e rifare il
   tutto.

2) Finora ho lanciato molte volte xmodmap, ma se le modifiche da fare
   son tante (ed e` il nostro caso) basta creare un file di testo che
   contenga una istruzione per riga, ad esempio

       ...
       keycode 115 = braceleft
       keycode 116 = braceright
       keycode 156 = F15
       ...
   
   e poi invocarlo con ``xmodmap nomefile''. 

   Riagganciandoci alla nota precedente, si puo` notare che in alcune
   (tutte?) distribuzioni cio` viene gia` fatto automaticamente dagli
   script che avviano l'X server, i quali sostanzialmente eseguono
   ``xmodmap /etc/X11/Xmodmap'' e/o ``xmodmap ~/.xmodmap''

   Per cui possiamo mettere le nostre modifiche/aggiunte in quei file
   e ritrovarcele in seguito.

3) Side effect interessante: esistono alcuni programmi per cambiare da
   tastera italiana a tastiera inglese e viceversa, ma con xmodmap e`
   possibile farne una versione ``povera'' che funziona sempre e
   ovunque:
   
     - configurare XFree86 in modo da usare la tastiera inglese
     - eseguire ``xmodmap -pke > ~/tastiera_inglese.xmodmap''
     - configurare XFree86 in modo da usare la tastiera italiana
     - eseguire ``xmodmap -pke > ~/tastiera_italiana.xmodmap''

     Per passare al volo alla tastiera inglese basta quindi un bel

     ``xmodmap ~/tastiera_inglese.xmodmap''

     e per ritornare a quella italiana basta un 

     ``xmodmap ~/tastiera_italiana.xmodmap''

-- 
 |   \    \  | ___|_  |_  | ianezz AT sodalia.it
 |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
_|_/  _\_|  _|____|___|___| http://www.linuxtrent.it
-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con SOGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx


Other related posts:

  • » Linuxtrent: Come usare i tasti "balenghi" con X [lunghetto]