The software driver is based on actkbd. But I have forked it to make midikdb. midikbd grabs the selected events file (/dev/input/event*) so that xorg doesn't get anything from it. Yes this means I have two keyboards so I can input text as normal too. Midikbd opens Jack MIDI ports which can be connected to a DAW. I have been using Ardour which can be set up with less than 8 channel controller banks if needed.
Midikbd offers:
The keys are fully configurable in a config file. So the keyboard could be setup to do any kind of MIDI control that just needs switches. A USB numeric keypad (as sold for use with laptops) could make a very handy small controller too. This would have the advantage over keyboard short cuts that the application being controlled does not have to be focused. The actkbd functionality is still there too, so it is possible to run shell commands from a key press as well.
This could be useful for something like the BCF2000 that uses lots of internal shifts to make up for less buttons. This could add other buttons.
It may be possible to use real encoders with the right detents (the centre of the detent has both switches off) in place of the two keys. However, a better controller is only $35 that could use any encoder and as encoders and switches are added, their cost would make the better controller a better deal.
Things I could do? Use non-blocking control for the event file would allow better LED control including flashing. split the keyboard so that everything except the numeric keypad still goes to the OS and the numeric pad is MIDI. Do NRPN/RPN. But so far I don't have a need for these things.
The code:
The code (such as it is) can be downloaded from here: midikb on Github.
Or cloned from: https://github.com/ovenwerks/midikb for the very latest maybe unreleased version.
The code is very raw, there is no configure script, but what is needed is easy to figure out. Most systems That have done any jack application building will just work. For others set up the system for basic building and then make sure the include files for libjack are there. (in ubuntu this is libjack-jackd2-dev)