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.