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:

  1. Connect to the X server. XOpenDisplay()
  2. Create a window (you don’t need to display it). XCreateSimpleWindow()
  3. Ask the X server who owns the PRIMARY and CLIPBOARD atoms, and ask that window to send you the data. XInternAtom(), XConvertSelection()
  4. Wait for the reply event. Loop of NextEvent()