Qual é a diferença entre as regras base e evdev xkb?

Qual é a diferença entre as regras base e evdev xkb?

Acabei de mudar de xf86-input-evdev para xf86-input-libinput e ele quebrou o layout do meu teclado – teclas de seta com alt direito, tecla de menu de contexto, tecla delete, enter do teclado numérico, etc., todas estranhamente trocadas. libinput debug-eventsmostrou a chave correta, no entanto. Depois de checarXorg.conf, notei a seguinte linha:

Option "XkbRules" "base"

Depois de alterá-lo para evdev, o teclado funcionou corretamente.

Eu encontrei "O Guia de Configuração XKB”que menciona as diversas regras, mas não entra em detalhes sobre suas diferenças.

Qual é a diferença entre os dois layouts? Posso usar as regras do evdev mesmo com libinput?

Responder1

dr:No Linux, você deve usar as evdevregras. Como diz no guia XKB, você vincula:

Em sistemas Linux, oevdevregras são mais comumente usadas, em outros sistemas obaseregras são usadas.


A diferença é em grande parte histórica. evdevé o subsistema de entrada do kernel Linux moderno e não existia quando o XKB foi escrito pela primeira vez. Se você olhar o código-fonte paraxkeyboard-config, você descobrirá que as regras evdeve basesão geradas (principalmente) a partir dos mesmos modelos. No entanto , compare os arquivos gerados no banco de dados XKB do seu sistema com diff. Você verá muitas entradas onde as baseregras carregam inetsímbolos para modelos de teclado específicos, enquanto as evdevregras eliminam a maioria dessas entradas específicas do modelo e carregam um conjunto mais 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

Não, na verdade, essa é toda a seção de modelo para símbolos das evdevregras, enquanto a baseversão tem 60 linhas ímpares. O evdev.m_s.partarquivo é o modelo de origem para aquela seção das regras; é um mapeamento de modelo para símbolo (a !model = symbollinha no início dessa seção; daí o m_snome do arquivo). A única outra seção das regras específica do evdev vem do evdev.m_k.partarquivo, que é um mapeamento de modelo para códigos-chave (a !model = keycodesseção das regras), e as diferenças são semelhantes.

Para mais detalhes, consulte ocódigos-chaveesímbolosarquivos referenciados por essas regras (especialmente /usr/share/X11/xkb/keycodes/evdeve /usr/share/X11/xkb/symbols/inet). Você pode estar interessadoesta redação do formato de regras XKB.

informação relacionada