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-events
Sin 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 evdev
reglas. 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. evdev
es 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 evdev
y base
se 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 base
reglas cargan inet
símbolos para modelos de teclado específicos, mientras que las evdev
reglas 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 evdev
reglas, mientras que la base
versión tiene unas 60 líneas de largo. El evdev.m_s.part
archivo es la plantilla fuente para esa sección de las reglas; es un mapeo de modelo a símbolo (la !model = symbol
línea al comienzo de esa sección; de ahí el m_s
nombre del archivo). La única otra sección de las reglas específica de evdev proviene del evdev.m_k.part
archivo, que es una asignación de modelo a códigos clave (la !model = keycodes
secció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/evdev
y /usr/share/X11/xkb/symbols/inet
). Quizás te intereseeste artículo del formato de reglas XKB.