1) Como configurar o X para ignorar o teclado
Use lsusb
para encontrar o ID do seu scanner de código de barras (no formato 0123:4567
). Crie ou modifique um arquivo xorg.conf
(geralmente em /etc/X11/
). Adicione uma seção InputClass
com o ID que você acabou de encontrar:
Section "InputClass"
Identifier "barcode"
MatchUSBID "0123:4567"
Option "Ignore" "true"
EndSection
Reinicie o X, verifique em Xorg.log
se o seu dispositivo é reconhecido por esta seção e foi ignorado.
2) A conversão de keypresses para códigos ASCII (ou outros) é bastante envolvida, para permitir diferentes layouts de teclado, chaves inativas, personalizações etc. Agora que você desabilitou a camada de conversão X, você pode receber eventos keypress e keyrelease from o dispositivo /dev/input/eventX
apropriado. O número pode mudar; para o seu leitor de código de barras, haverá um link simbólico em /dev/input/by-id/
, que não muda. Então use o link simbólico.
Você pode executar evtest
nesse arquivo para ver que tipo de evento ele gera. Eles mapeamento para o seu leitor de código de barras será simples, então uma pesquisa de tabela de keysym para código ASCII fará. Você pode processar esses eventos em seu próprio programa, ver a evtest
source ou, por exemplo, aqui . Você também pode escrever um pequeno programa em C que apenas leia este dispositivo e produza ASCII em stdout, e então integre-o em seu aplicativo usando um pipe, etc.
"Mapeando-o como um dispositivo de fluxo ASCII" não é possível, esses dispositivos não existem no kernel do Linux.
3) Definindo permissões
Você precisa escrever uma regra udev
personalizada para definir permissões para seu dispositivo de entrada. SUBSYSTEM
deve corresponder a input
, ACTION
deve corresponder ADD
, o ambiente ENV
deve conter informações para corresponder ao dispositivo (use udevadm
para descobrir detalhes) e você pode definir OWNER
, GROUP
e MODE
para o dispositivo /dev/input/eventX
recém-criado. Aqui está um howto um tanto geral, não consegui encontrar um mais específico 1. Google para melhores tutoriais.