Clipboard sniffer
Yes clipboard, not keyboard. I've made a clipboard sniffer for X called ClipSniff.
It periodically saves whatever is in the clipboard (both the "PRIMARY" and the "CLIPBOARD") into a sqlite database.
git clone http://github.com/ThomasHabets/clipsniff.git
It wasn't that hard when you knew where to look. You just:
Connect to the X server. XOpenDisplay()
Create a window (you don't need to display it). XCreateSimpleWindow()
Ask the X server who owns the PRIMARY and CLIPBOARD atoms, and ask that window to send you the data. XInternAtom() , XConvertSelection()
Wait for the reply event. Loop of NextEvent()
Helpful links when coding Xlib
Minimal XGetWindowProperty Example
Xlib Programming Manual (O'Reilly & Associates, Inc.)
X Selections, Cut Buffers, and Kill Rings (jwz)
X Windows Copy-Paste mini HOWTO (Stelios Xathakis)