Você pode usar /dev/uhid para criar seu próprio dispositivo HID . Isso torna fácil não apenas fornecer teclados do espaço do usuário, mas também mouses, joysticks etc. O dispositivo HID recém-criado receberá automaticamente um dispositivo /dev/input associado. Existe um programa de exemplo nos fontes do kernel, samples/uhid/uhid-example.c . Eu acho que é a maneira mais portátil, os dispositivos HID são altamente padronizados. Basicamente, todos os teclados e mouses USB são dispositivos HID.
Você também pode usar /dev/uinput ou /dev/input/uinput (depende da sua distribuição) para criar diretamente um dispositivo de camada de entrada. Veja por exemplo aqui para detalhes. Isso precisa do módulo do kernel uinput .