Chaves não são detectadas no Xorg usando xev

1

Eu tenho um novo teclado mecânico e quero usar alguns acréscimos de chave personalizados (C1, C2, C3, C4, C5).

O problema que encontro é que essas chaves não são detectadas no Xorg quando executo xev .

Eu posso vê-los quando corro:

$ sudo showkey --keycodes                                                        
keycode 264 press
keycode 264 release
caught signal 2, cleaning up...

Quando tento mapear o código de acesso fornecido com xmodmap , por exemplo, ele não funciona. Nada acontece quando pressiono essa tecla.

xmodmap -e 'keycode 264=a' 

Eu suspeito que seja porque meu teclado está em dois teclados virtuais (não sei por quê?)

$ xinput list                                                               
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ USB OPTICAL MOUSE                         id=8    [slave  pointer  (2)]
⎜   ↳ Genius USB Optical Mouse                  id=9    [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Mad Catz Mad Catz S.T.R.I.K.E.TE Mechanical Gaming Keyboard   id=10   [slave  keyboard (3)]
    ↳ Mad Catz Mad Catz S.T.R.I.K.E.TE Mechanical Gaming Keyboard   id=11   [slave  keyboard (3)]

Quando executo sudo evtest /dev/input/event2 , a chave "normal" é detectada, mas não a chave personalizada.

E quando eu executo a tecla sudo evtest /dev/input/event3 "normal" não são mais detectados, mas o personalizado está com a mesma keycodes encontrada usando o comando showkey .

Eu também tentei executar xev de uma sessão X limpa, mas o resultado é o mesmo ...

Há algum outro teste que eu possa realizar ou outras sugestões?

    
por hg8 14.09.2017 / 16:43

1 resposta

1

(1) códigos-chave X e códigos-chave do kernel não são os mesmos, você tem que adicionar 8 ao último para obter o primeiro. Experimente com xev , showkey e uma letra normal, digamos a .

(2) Se bem me lembro, códigos de teclas maiores que 256 não são suportados em X.

Portanto, você precisa de um teclado de kernel personalizado ou mapeamento de HID que mapeie seu código de tecla 264 e o restante para outros códigos de tecla não usados que estejam no intervalo admissível.

Editar

Você pode fazer isso globalmente com getkeycodes resp. setkeycodes , ou por dispositivo com o banco de dados do udev hw , ou por dispositivo usando seu próprio programa com EVIOCGKEYCODE_V2 e EVIOCSKEYCODE_V2 ioctl's.

    
por 14.09.2017 / 19:08