Sam Sebastian

UInput | Github Pages | Documentation


UInput is a kernel module that makes it possible to emulate input devices from userspace. By writing to /dev/uinput (or /dev/input/uinput) device, a process can create a virtual input device with specific capabilities. Once this virtual device is created, the process can send events through it, that will be delivered to userspace and in-kernel consumers.


Module written to be feature compatible with the current Autokey keyboard module. Missing the wait_for_keyevent and wait_for_keypress functions available in the current Autokey keyboard module.


“KVM” is in quotes. The main idea of this project is to allow sending low level signals between Linux computers. This expanded to crossplatform support for recieveing the sent signals. Meaning that you can have 1 keyboard and mouse “connected” (connections work over local network websockets) to any number of different computers.


A script that will grab all of the signals a keyboard device sends and map them to a different layout (eg qwerty to dvorak). It supports toggling the remap along with adding a “embedded” numberpad like those sometimes seen on smaller form factor laptops.

The layouts outside of this qwerty to dvorak are limited because I personally prefer the dvorak layout. This project has recently taken a back seat as I have managed to get QMK on my current keyboard.


Based on parts of both uinput-kvm and uinput-keyboard-mapper. Allows the creation of “streamdeck”-like secondary keyboards. Basically grabs a keyboard (or any other device) and maps the events it emits to different things, like keyboard output or running a script. So the limit of it’s capabilities are your technical ability, python and your imagination! Examples provided!


Uses a number of different technologies to enable the Stadia controller to be used “wirelessly”. Currently only supports use on computers running Linux. This repo is no longer needed as Google finally enabled Bluetooth after Stadia was decomissioned, still cool tho.