From fbd7bd6081d173ec7fee189db7769d0646c04c84 Mon Sep 17 00:00:00 2001 From: dakkar Date: Tue, 15 Sep 2009 15:20:28 +0200 Subject: page about the evdev patch --- src/SW/xf86-input-evdev/document.en.rest.txt | 58 +++++++++++++++++++++++++++ src/SW/xf86-input-evdev/document.it.rest.txt | 59 ++++++++++++++++++++++++++++ src/SW/xf86-input-evdev/du2html.xsl | 1 + 3 files changed, 118 insertions(+) create mode 100644 src/SW/xf86-input-evdev/document.en.rest.txt create mode 100644 src/SW/xf86-input-evdev/document.it.rest.txt create mode 120000 src/SW/xf86-input-evdev/du2html.xsl diff --git a/src/SW/xf86-input-evdev/document.en.rest.txt b/src/SW/xf86-input-evdev/document.en.rest.txt new file mode 100644 index 0000000..a1ce1be --- /dev/null +++ b/src/SW/xf86-input-evdev/document.en.rest.txt @@ -0,0 +1,58 @@ +========================================= + Code-remapping for ``xf86-input-evdev`` +========================================= +:CreationDate: 2009-09-15 12:49:41 +:Id: SW/xf86-input-evdev +:tags: - software + - keyboard + +The standard ``xf86-input-evdev`` driver that comes with `xorg` only +uses keycodes between 8 and 255, dropping all others. This is fine +most of the time (who ever saw a keyboard with more than 247 keys on +it?), but it causes problems when the keycodes generated are not +compact. + +For example, the Apple Aluminum Keyboard (USB ID ``05ac:0221``) +produces at least one code above 255: the "fn" key is 464. People have +found other cases, and have `reported them as a bug +`_. + +Since I needed my keyboard to work as I want it, I did the only +sensible thing: I `cloned the repository +`_ and patched the +code. + +My patch adds a configuration option, called ``event_key_remap``. Its +value must be a (whitespace-separated) list of "assignments" of the +format ``$evdev_code = $x11_code``; the ``$evdev_code`` can be +obtained with ``showkey -k``, the ``$x11_code`` can be found in +``/usr/share/X11/xkb/keycodes/evdev`` (or wherever your distribution +put it). + +The implementation is rather simple, creating a look-up table from the +configuration; the table is not implemented as a simple array, since +that would have meant taking 64KiB for each device (`evdev` uses 16 +bits for a key event). Instead, I allocate "pages" of 256 bytes, and +only the pages needed. This way, devices with no remapping use only +one more pointer in their structures, and devices with very few codes +to remap use only 256 bytes. + +Of course, the configuration can be set either in the ``xorg.conf`` +file, or via `HAL`. My ``/etc/hal/fdi/policy/10-x11-input.fdi`` file +contains:: + + + + + compose:ralt + altwin:meta_win + + + dakkar + evdev + dvorak-apple-al + 464=118 120=210 204=211 + + + +(Details about my keyboard layout are `elsewhere <../my-layout/>`_. diff --git a/src/SW/xf86-input-evdev/document.it.rest.txt b/src/SW/xf86-input-evdev/document.it.rest.txt new file mode 100644 index 0000000..88910a4 --- /dev/null +++ b/src/SW/xf86-input-evdev/document.it.rest.txt @@ -0,0 +1,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 +`_. + +Siccome la tastiera mi serve funzionante, e come dico io, ho fatto +l'unica cosa sensata: ho `clonato il repository +`_ 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:: + + + + + compose:ralt + altwin:meta_win + + + dakkar + evdev + dvorak-apple-al + 464=118 120=210 204=211 + + + +(I dettagli sul mio layout di tastiera stanno `altrove <../my-layout/>`_. diff --git a/src/SW/xf86-input-evdev/du2html.xsl b/src/SW/xf86-input-evdev/du2html.xsl new file mode 120000 index 0000000..e2487e0 --- /dev/null +++ b/src/SW/xf86-input-evdev/du2html.xsl @@ -0,0 +1 @@ +../../../templates/du2html.xsl \ No newline at end of file -- cgit v1.2.3