No espaço de usuário do Linux, como posso obter o tipo (ou seja, mouse ou teclado) de um dispositivo evdev/input_event?
Eu sei que posso enumerá-los lendo /proc/bus/input/handlers
ou listando /sys/class/input/
, mas não está claro quais dispositivos são mouses ou teclados.
linhas /proc/bus/input/handlers
como H: Handlers=sysrq kbd event3 leds
parecem sugerir que este é um teclado com a presença de 'kbd', mas não consigo encontrar nenhuma documentação real para esse efeito.
O kernel realmente não raciocina em termos de tipos de dispositivos, mas mais em termos dos tipos de eventos que os dispositivos podem produzir (veja a documentação de códigos de eventos no kernel).
Como resultado, você precisa de algumas heurísticas para identificar os tipos de dispositivos. Muitos dispositivos podem produzir eventos importantes; os teclados têm a particularidade de produzir tanto eventos de tecla (
EV_KEY
) como eventos de repetição (EV_REP
). Os ratos são, penso eu, os únicos dispositivos que produzem eventos relativos (EV_REL
).Os dispositivos expõem os tipos de eventos que podem gerar no
ev
arquivo em seucapabilities
diretório de classe. Cada tipo par tem um certo deslocamento de bit, definido em/usr/include/linux/input-event-codes.h
;EV_KEY
é 1,EV_REP
20,EV_REL
2. Você pode procurar esses bits nos valores fornecidos por/sys/class/input/input*/capabilities/ev
para encontrar os dispositivos nos quais está interessado.