Over the last year or two, I've been teaching myself to type with one hand. Some people might think it's useless, but it's actually awesome. Laying down in an awkward position? Filling in lots of forms with a UI that requires a mouse? Want to cuss someone out right quick while playing an FPS? Here's the solution.
It works by shifting all the keys over from the right side of the keyboard to the left side of the keyboard while you hold down capslock. Backspace is also rebound to tab, and space is rebound to enter. Not moving your hands across the keyboard to tap a single key can really bump up your one handed speed (If you watch the clip closely, I'm averaging 70-90 WPM).
Since I'm a massive nerd, I also have a TypeRacer novelty account where I only use one hand. :~) Check out my stats!
The program is configurable. It's not so much a one handed typing program as it is a program to rebind keys when you hold down a modifier key.
Source and usage instructions are here, if anyone's interested.
I just got a Chromebook a week ago as my daily driver, installed Ubuntu, and I was really hurting for this functionality. I rewrote my old Windows program as a Linux program.
The program works by grabbing exclusive access (EVIOCGRAB) to your keyboard device, /dev/input/event# style. It then creates an emulated input device from usermode via the "uinput" module. All input events from the real keyboard are forwarded to the emulated keyboard device.
However, once the modifier key is held down, the program checks a hashmap to see if any future keys being pressed need to be remapped. If they do need to be remapped, the key press/release events that are grabbed from the real keyboard are modified before being passed to the emulated input device.
That's it! If anyone has any technical or usage questions, feel free to post a comment below.