“Vincular” o teclado USB exclusivamente a uma aplicação específica

6

O que eu tenho:

  • Máquina Linux (estável debian) sem monitor, teclado, sem X executando
  • Dispositivo USB que funciona como um teclado USB (como muitos leitores de códigos de barras [1])

O que eu (não) quero:

  • Quero usar este dispositivo apenas para um aplicativo específico.
  • Eu não quero que este dispositivo interfira com, e. o processo login após a inicialização ou qualquer outra coisa - exceto a única aplicação.
  • De qualquer forma, eu quero ser capaz de conectar um teclado USB antigo e usá-lo como tal - independente de quantos outros dispositivos USB como o mencionado acima podem estar conectados ou não.

O que eu não sei:

  • Encontrei alguns códigos de exemplo sobre como ler diretamente dos dispositivos de eventos e usá-los em meu aplicativo, se necessário.
  • Eu não sei como desabilitar um teclado específico para todo o sistema, exceto esse aplicativo específico? Isso é possível?

Obrigado por qualquer dica ...!

[1] Quando o dispositivo lê um código de barras, ele envia o código detectado como pressionamentos de tecla única e confirma com return .

    
por m.sr 02.05.2012 / 14:54

2 respostas

2

Uma pergunta desafiadora e interessante!

Acho que udev é capaz de fazer exatamente isso. Crie um arquivo /etc/udev/rules.d/99-barcode-reader.rules e coloque algo parecido com isto:

ACTIONS!="add", GOTO="barcode_end"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", PROGRAM="/bin/sh -c 'logger -p user.info Hey, I see a new device $env{BUSNUM} $env{DEVNUM}'", RUN+="/bin/sh -c '/usr/local/bin/your_barcode_application &'"
LABEL="barcode_end"

Substitua "dead" e "beef" pelos valores que você obtém para idVendor e idProduct com lsusb .

Reinicie o udevd ou simplesmente o seu servidor e veja o que acontece.

    
por 02.05.2012 / 16:13
1

Por que vale a pena e por qualquer pessoa com um problema semelhante ao encontrar isso;

Não sei se é possível desabilitar um "teclado", mas como o sistema está sem cabeçalho, você pode simplesmente executar um serviço para manipular a entrada em TTY1, substituindo o prompt de login normal. Você ainda pode fazer o login normalmente via ssh ou qualquer outro TTY, mas na inicialização, por padrão, a entrada do leitor de código de barras é tratada adequadamente sem ação adicional.

Um bom bônus é executar tudo isso dentro de uma sessão de tela, para que você possa se conectar a ele usando ssh.

Para obter instruções, confira minha resposta sobre SU aqui .

    
por 02.03.2018 / 11:41