Capturing Global Keyboard Events On Linux With NodeJS
keyboard-events, linux, node.js, sysfs
Solution
One of the device files `/dev/input/event*` will represent the gpio-keys device. You can figure out which one in a number of ways; one easy one is to look at the contents of the uevent file for the device, e.g. `/sys/class/input/event0/device/uevent`. It'll contain a number of useful key-value properties.
Once you've figured out which device you want, you can open and read from it. It'll return a stream of `struct input_event`s, as defined in `<linux/input.h>`. These events will correspond to presses and releases for each of your buttons.
You may also want to take a look for existing solutions for at least part of the problem, such as node-keyboard: https://github.com/Bornholm/node-keyboard
Problem
I have a headless Debian ARM machine that I'm running Node on. The device has hard buttons that are mapped to normal keyboard events using `gpio-keys`. My goal is to capture the global events from both the hard buttons as well as any attached keyboards in Node. I need a solution that can capture the keydown/keyup events independently of the terminal that it's run in (it will be run over an SSH session). It doesn't have to be cross-platform, as long as it works on ARM Debian I'll accept it. I am imagining something reading directly from whatever `sysfs` attributes are necessary, but that's not a requirement. Can anyone help me on this? I've been stuck for a while.