summaryrefslogtreecommitdiff
path: root/src/SW/xf86-input-evdev/document.it.rest.txt
blob: 88910a4cc54f4eca9d840790a7c07e91c155e3c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
================================================
 Rimappatura dei codici in ``xf86-input-evdev``
================================================
:CreationDate: 2009-09-15 12:49:41
:Id: SW/xf86-input-evdev
:tags: - software
       - keyboard
 
Il driver ``xf86-input-evdev`` che viene di serie con `xorg` usa
soltanto i keycode tra 8 e 255, ignorando tutti gli altri. Questo
funziona per la maggior parte dei casi (chi ha mai visto una tastiera
con più di 247 tasti?), ma causa problemi quando i keycode con sono
consecutivi.
 
Ad esempio, la tastiera Apple Alluminio (ID USB ``05ac:0221``) emette
qualche codice oltre 255: il tasto "fn" è 464. Altri hanno trovato
altri casi, e li hanno `segnalati come bug
<http://bugs.freedesktop.org/show_bug.cgi?id=11227>`_.
 
Siccome la tastiera mi serve funzionante, e come dico io, ho fatto
l'unica cosa sensata: ho `clonato il repository
<http://www.thenautilus.net/cgit/xf86-input-evdev/>`_ e ho modificato
il codice.
 
La mia modifica aggiunge un'opzione di configurazione, chiamata
``event_key_remap``. Il valore deve essere una lista (separata da
spazi) di "assegnamenti" nella forma ``$evdev_code = $x11_code``; il
``$evdev_code`` può essere ottenuto con ``showkey -k``, il
``$x11_code`` può essere trovato nel file
``/usr/share/X11/xkb/keycodes/evdev`` (o dove la vostra distribuzione
l'ha messo)
 
L'implementazione è piuttosto semplice: crea una tabella dalla
configurazione; la tabella non è implementata come un semplice array,
visto che in quel caso allocherei 64KiB per device (`evdev` usa 16 bit
per un evento "tasto"). Invece, alloco "pagine" di 256 byte, e solo le
pagine che servono. In questo modo, i device senza rimappature
occupano solo un puntatore in più nelle loro strutture, e i device con
pochi codici da mappare occupano 256 byte in più.
 
Ovviamente, la configurazione può essere impostata sia dal file
``xorg.conf`` sia tramite `HAL`. Il mio file
``/etc/hal/fdi/policy/10-x11-input.fdi`` contiene::
 
 <?xml version="1.0" encoding="utf-8"?>
 <deviceinfo version="0.2">
  <match key="info.capabilities" contains="input.keyboard">
   <append key="input.x11_options.XkbOptions" type="strlist">compose:ralt</append>
   <append key="input.x11_options.XkbOptions" type="strlist">altwin:meta_win</append>
  </match>
  <match key="input.product" string="Apple, Inc Apple Keyboard">
   <merge key="input.x11_options.XkbLayout" type="string">dakkar</merge>
   <merge key="input.x11_options.XkbModel" type="string">evdev</merge>
   <merge key="input.x11_options.XkbVariant" type="string">dvorak-apple-al</merge>
   <merge key="input.x11_options.event_key_remap" type="string">464=118 120=210 204=211</merge>
  </match>
 </deviceinfo>
 
(I dettagli sul mio layout di tastiera stanno `altrove <../my-layout/>`_.