Estou fazendo um programa Ruby para que eu possa tocar sons diferentes quando uma tecla é pressionada. A tecla A fará um som diferente da tecla S e assim por diante. Eu quero obter insumos brutos em vez de usar algumas gemas de rubi.
Por exemplo, posso ler /dev/input/mice para todos os eventos de mouse. Eu posso usá-lo no meu código para que ele possa fazer algum trabalho com base nos movimentos do mouse.
Ao abrir qual arquivo posso pegar todos os eventos dos teclados?
Existem duas camadas envolvidas aqui: A
input
camada do kernel, que traduz vários teclados, mouses, joysticks/dev/input/*
etc. sua distro, Wayland), que lê esses arquivos e os traduz em eventos X que são entendidos por aplicativos gráficos. Este último combina os dispositivos de entrada e os disponibiliza como "eventos de teclado de qualquer dispositivo" e "eventos de mouse de qualquer dispositivo" (isso é uma simplificação, mas ok é a primeira aproximação).A maneira natural de um aplicativo é interagir com a camada X (e tenho certeza de que existe uma abstração Ruby para isso). Isso é especialmente recomendado se seu aplicativo não apenas reproduzir sons, mas também exibir algo (e mesmo se não exibir nada).
Claro, se você insistir, você também pode abrir todos os arquivos em
/dev/input/*
, e interpretar os eventos vindos deles, mas isso falhará no momento em que um novo teclado for conectado a um mouse, e você quiser reagir a esses eventos também.A
/dev/input/mice
abstração existe apenas para mouses, e é uma espécie de solução herdada inventada na época em que as pessoas usavam um único teclado PS/2, mas já existiam todos os tipos de dispositivos de mouse diferentes. Esse arquivo pode não corresponder ao que a camada X considera dispositivos de entrada de mouse ativos e não há abstração equivalente para teclados.