¿Cuál es la diferencia entre las reglas base y evdev xkb?

¿Cuál es la diferencia entre las reglas base y evdev xkb?

Acabo de cambiar de xf86-input-evdev a xf86-input-libinput y se rompió la distribución de mi teclado: teclas de flecha con alt derecho, tecla de menú contextual, tecla de borrar, tecla de entrada del teclado numérico, etc., todas intercambiadas de manera extraña. libinput debug-eventsSin embargo, mostró la clave correcta. Después de revisarXorg.conf, noté la siguiente línea:

Option "XkbRules" "base"

Después de cambiarlo a evdev, el teclado funcionó correctamente.

Encontré "La guía de configuración de XKB” que menciona las distintas reglas pero no entra en detalles sobre sus diferencias.

¿Cuál es la diferencia entre los dos diseños? ¿Está bien utilizar las reglas evdev incluso con libinput?

Respuesta1

tl;dr:En Linux, deberías utilizar las evdevreglas. Como dice en la guía XKB que enlazas:

En los sistemas Linux, elevdevLas reglas son las más comúnmente utilizadas, en otros sistemas lasbaseSe utilizan reglas.


La diferencia es en gran medida histórica. evdeves el subsistema de entrada del kernel de Linux moderno y no existía cuando se escribió XKB por primera vez. Si miras el código fuente dexkeyboard-config, encontrará que ambas reglas evdevy basese generan a partir (en su mayoría) de las mismas plantillas. Sin embargo , compare los archivos generados en la base de datos XKB de su sistema con diff. Verá muchas entradas donde las basereglas cargan inetsímbolos para modelos de teclado específicos, mientras que las evdevreglas eliminan la mayoría de esas entradas específicas del modelo y cargan un conjunto más generalizado:

/usr/share/X11/xkb/rules/base:
[...]
! model         =       symbols
  a4techKB21    =       +inet(media_nav_common)
  asus_laptop   =       +inet(media_common)
  acer_tm_800   =       +inet(acer_laptop)
  benqx730      =       +inet(benqx)
  btc9116u      =       +inet(btc9019u)
  chromebook    =       +inet(chromebook)
  dellsk8125    =       +inet(dell)
// and about 50 more lines
// generated from xkeyboard-config/rules/base.m_s.part

/usr/share/X11/xkb/rules/evdev
[...]
! model         =       symbols
  $evdevkbds    =   +inet(evdev)+inet(%m)
  chromebook    =   +inet(evdev)+inet(chromebook)
  applealu_jis  =   +inet(evdev)+macintosh_vndr/jp(alujiskeys)
  *             =   +inet(evdev)
// ...that's all.
// generated from xkeyboard-config/rules/evdev.m_s.part

En realidad no, esa es toda la sección de modelo a símbolo de las evdevreglas, mientras que la baseversión tiene unas 60 líneas de largo. El evdev.m_s.partarchivo es la plantilla fuente para esa sección de las reglas; es un mapeo de modelo a símbolo (la !model = symbollínea al comienzo de esa sección; de ahí el m_snombre del archivo). La única otra sección de las reglas específica de evdev proviene del evdev.m_k.partarchivo, que es una asignación de modelo a códigos clave (la !model = keycodessección de las reglas), y las diferencias allí son similares.

Para más detalles, consulte elcódigos claveysimbolosarchivos a los que hacen referencia esas reglas (especialmente /usr/share/X11/xkb/keycodes/evdevy /usr/share/X11/xkb/symbols/inet). Quizás te intereseeste artículo del formato de reglas XKB.

información relacionada