Desativar o teclado, mas ainda permitir a leitura dele

2

Eu tenho um numpad USB que eu quero usar para controlar um aplicativo específico em execução como um daemon em segundo plano. O daemon está escrito em Python e atualmente estou lendo a entrada usando python-evdev , o que funciona muito bem.

No entanto, tudo o que eu digito no teclado também é processado normalmente, o que significa que pressionamentos de tecla também são inseridos em qualquer aplicativo que lide com entrada de teclado (incluindo o prompt de login mostrado quando o computador é inicializado). Isso é um pouco chato.

Existe uma maneira de desabilitar o processamento "normal" de eventos de teclado e permitir somente a leitura manual dos estados das teclas? Espero que um que não dependa da execução do X.

Tudo que eu encontrei até agora parece estar lidando com a desativação completa do teclado ou usando o X.

Uma ideia que tenho é criar um mapa de teclado que mapeie todas as chaves para chaves inativas, o que impede qualquer saída, mas ainda me permite ler os códigos de tecla reais. No entanto, parece que deveria haver uma solução mais fácil para esse problema.

    
por pafcu 07.02.2017 / 23:46

1 resposta

3

Se eu entendi as fontes do kernel diretamente, não é possível desconectar dispositivos de entrada específicos dos manipuladores globais (consulte /proc/bus/input/handlers ): O manipulador kbd sempre receberá todos os eventos de entrada e converterá os principais eventos em pressionamentos de tecla.

No entanto, você pode pegar um dispositivo de entrada para uso exclusivo com um EVIOCGRAB ioctrl no dispositivo, diretamente do seu programa, ou usando ferramentas como evtest --grab /dev/input/eventX (para teste). Enquanto a captura estiver ativa, os eventos não devem ser processados por qualquer outra coisa.

Eu não estou familiarizado com python-evdev , mas mesmo que não suporte o modo agarrar, não é difícil executar ioctls em Python.

(Eu era preguiçoso e testado apenas sob X, onde funciona, mas não vejo razão para que não funcione sem X).

    
por 09.02.2017 / 11:29