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

3

Eu apenas mudei de xf86-input-evdev para xf86-input-libinput e ele quebrou meu layout de teclado - teclas de seta com alt correto, tecla de menu de contexto, delete key, numpad enter, etc. tudo estranhamente trocado. libinput debug-events mostrou a chave correta, no entanto. Depois de verificar Xorg.conf , notei o 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 várias regras, mas não entra em detalhes sobre sua diferença.

Qual é a diferença entre os dois layouts? Está tudo bem em usar as regras do evdev mesmo com libinput?

    
por Jan Tojnar 24.11.2017 / 01:19

1 resposta

3

tl; dr: No Linux, você deve usar as regras evdev . Como diz no guia XKB, você vincula:

On Linux systems, the evdev rules are most commonly used, on other systems the base rules are used.

A diferença é em grande parte histórica. evdev é o subsistema moderno de entrada do kernel do Linux e não existia quando o XKB foi escrito pela primeira vez. Se você olhar o código-fonte para xkeyboard-config , verá que evdev e% As regrasbase são geradas a partir (principalmente) dos mesmos modelos. Compare os arquivos gerados no banco de dados do seu sistema XKB com diff , no entanto. Você verá muitas entradas nas quais as regras base carregam inet símbolos para modelos de teclado específicos, enquanto as regras evdev eliminam a maioria dessas entradas específicas de 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 modelo-para-símbolos das regras evdev , enquanto a versão base tem 60 linhas ímpares. O arquivo evdev.m_s.part é o modelo de origem para essa seção das regras; é um mapeamento de modelo para símbolo (a linha !model = symbol no início dessa seção; portanto, o m_s no nome do arquivo). A única outra seção específica do evdev das regras vem do arquivo evdev.m_k.part , que é um mapeamento de códigos modelo-para-tecla (a seção !model = keycodes das regras) e as diferenças são semelhantes.

Para mais detalhes, consulte os arquivos códigos de teclas e símbolos referenciados por essas regras (especialmente /usr/share/X11/xkb/keycodes/evdev e /usr/share/X11/xkb/symbols/inet ). Você pode estar interessado em este writeup do formato de regras XKB .

    
por 28.12.2017 / 12:06