Esta apresentação tem por objetivo explicar como o kernel Linux expôe suas interfaces de entrada, e de que forma o usuário pode criar devices virtuais para enviar eventos, como cliques de mouse ou teclado.
Utilizando o uinput, o usuário consegue ler eventos, e converte-los como quiser.
2. Quem sou eu
● Marcos Paulo de Souza - Prazer :)
● Bacharel em Ciência da Computação pela FURB
● Engenheiro de Software
● Contribuidor do LibreOffice
● Contribuidor do Kernel Linux
3. Agenda
● O que é o kernel
● Device Drivers
● Classes de drivers
● Input
● HID
● Juntando tudo
● Referências
4. O que é o kernel
● Gerenciador de recursos
● Provê recursos os programas quando requisitado
● Controle de acessos
● A camada abaixo dele “da choque”
9. Input
Camada base para toda interação de “entrada” do kernel:
● Mouse
● Teclado
● Force feedback
● LEDs dos input devices
● Tablets
● Touch screen
10. Input
Para mouse e teclado, input utiliza os protocolos para interagir diretamente com o
device:
● PS/2
● RMI4
● I2C
● AT
● USB
● Bluetooth
● ...
11. Input -> hid
hid == Human Interface Devices
● Utiliza as interfaces do input
● Mapeia entrada/saída para o kernel de devices como um controle
● Exemplos de drivers HID
○ DragonRise controller
○ PS{2,3,4} controller
○ Nintendo Wii/WiiU devices
○ IR controller
12. Input - evdev
● Cada device manipulado pelo input tem eventos relacionados a ele
● Esses eventos podem ser “lidos” por um programa e então efetuar
● Emuladores conseguem pegar eventos de controles e então envia-los para o jogo
13. Input - uinput - libevdev
● Permite manipular o subsistema de input da camada do usuário
● Com ele, é possível criar um “device virtual”, possibilitando enviar eventos para o
Servidor de Tela (X11 ou Wayland)
● Libevdev serve para facilitar o setup do uinput, podendo de forma fácil monitorar
e enviar eventos
14. Juntando tudo
O que conseguimos fazer com isso tudo?
● Ler e emitir eventos
● Emitir force feedback (para controles)
● Criar devices virtuais para utilizar como controles
● Se divertir