O kernel do Linux descarta códigos de varredura de teclado personalizados

16

Eu tenho um teclado IBM M modelo de chave vintage 122 que estou adaptando para uso em um computador moderno. Eu estou usando um Teensy 2.0 para fazer a codificação e lidar com o lado USB das coisas. Eu peguei emprestado o firmware do projeto de teclado do Humble Hacker ( link ) e adicionei as chaves extras na configuração da compilação. Até agora tudo bem.

Todas as teclas "regulares" funcionam, mas o kernel parece estar perdendo as chaves extras ( F13 - F24 , etc.).

A execução de /lib/udev/keymap -i input/event0 mostra os códigos de verificação de todas as chaves normais, mas nada para as chaves extras.

A execução de wireshark para a captura de pacotes da porta USB mostra que o teclado está enviando os códigos de verificação, mas parece que o kernel está apenas soltando-os a princípio.

Eu sinto que isso é algo nos drivers do kernel que simplesmente não está entregando códigos de verificação que ele não espera.

Eu pensaria que haveria algum tipo de mapa-chave "mestre" em algum arquivo .h na fonte do kernel em algum lugar, mas até agora, não tenho tido sucesso em meus esforços para encontrá-lo.

Vale ressaltar que não estou perguntando sobre o mapeamento das chaves extras no X, como tantas outras antes de mim. Este é um problema de baixo nível, aparentemente relacionado ao kernel. Suponha, no momento, que eu não usarei X de jeito nenhum. O que eu preciso é que os códigos de verificação apareçam quando eu corro /lib/udev/keymap -i , eu posso fazer o resto de lá.

    
por user2543941 10.07.2014 / 14:34

2 respostas

1

O kernel vê os estranhos códigos de varredura e os descarta. Eu tentaria obter esses valores de códigos de verificação e atualizar o índice de banco de dados de hardware. Então, em suma, o plano é este:

  • obtenha os códigos da saída do dmesg - o dmesg deve produzir algo assim quando o código de tecla desconhecido é pressionado:

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
    

a0 é o valor do código.

  • crie um arquivo de mapeamento de código-chave personalizado. Os exemplos e a ajuda estão no arquivo padrão
    ( /usr/lib/udev/hwdb.d/60-keyboard.hwdb para o Arch, pode ser diferente em outras distribuições).

  • atualize e acione o banco de dados de hardware executando os comandos:

    > udevadm hwdb --update
    > udevadm trigger /dev/input/eventXX
    

onde eventXX corresponde ao seu teclado (você pode obtê-lo executando evtest ). Você também pode reiniciar em vez de disparar.

Procure em Arch wiki e o arquivo de mapeamento de código-chave padrão para obter uma descrição mais detalhada (ou em sua documentação de distribuição se não é Arch).

Este é o método confiável e simples, faz o mapeamento no nível do kernel, assim funciona qualquer servidor de exibição, DE etc é.

    
por 27.09.2015 / 22:26
1

Este site oferece conversões de teclado personalizadas link

Com base nas informações deste site: link

    
por 06.10.2015 / 11:23