Como o X mapeia os códigos de verificação de chave do kernel para um keysym?

4

De acordo com esta página , não há um mapeamento direto dos mapeamentos de chave do udev para o X, ele tem seus próprios mapeamentos.

X has a (quasi) total independent way of mapping keys: X reads the kernel keycode table at startup, then maps the keycode to its independent keycode table (it is the same as the kernel keycodes but different :))

Alguém poderia elaborar e também talvez explicar ou apontar explicações de por que X faz isso, ignorando o udev?

    
por Dave E 08.01.2012 / 12:24

2 respostas

3

Você está fazendo várias suposições erradas: que X ignora o udev (não o faz); que o udev intervém diretamente nos mapeamentos de teclado (ele apenas os configura, além de ser a atuação do kernel); esse X é baseado no Linux (ele roda em outras variantes unix também).

O Udev desempenha apenas um papel muito limitado no manuseio do teclado: ele detecta modelos de teclado específicos e declara suas chaves específicas do fornecedor. O Udev não atua em teclas padrão como A e F1 , apenas em chaves específicas do fornecedor como Brilho acima ou Wifi ligado / off (normalmente marcado por ícones). Essas chaves geralmente não são usadas pelo aplicativo, mas mapeadas para eventos da ACPI.

O kernel do Linux possui seu próprio esquema de mapeamento para as chaves usuais, que você pode definir com o comando loadkeys . Se você tiver vários teclados conectados, as configurações realizadas pelo udev serão específicas de um teclado, enquanto loadkeys atuará no mapa de teclado do kernel global.

Os mapeamentos de teclado do kernel não cobrem quase todas as nuances oferecidas pelo X. Então, o X tem seu próprio esquema e, na maior parte, ignora as configurações do kernel. O X leva em consideração os mapeamentos específicos do teclado através do udev.

    
por 08.01.2012 / 17:24
1

Você adivinhou certo: o driver de teclado X11 fala diretamente com o dispositivo de teclado para receber pressionamentos de tecla brutos como códigos de tecla.

Isso porque o X11 quer acesso de baixo nível ao teclado, não apenas eventos preparados. O mapeamento entre códigos de teclas e keyyms pode ser especificado de várias maneiras:

  • definindo o mapa do teclado com setxkbmap
  • definindo chaves individuais com xmodmap
  • programaticamente com o XChangeKeyboardMapping etc
por 08.01.2012 / 17:10