simple sudoless X11 keylogger
C Makefile
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
history.markdown
makefile
readme.markdown
xkbcat.c

readme.markdown

xkbcat

X11 keylogger with simple output format: one line on stdout per key event.

Great as a data source for keyboard heatmaps, layout comparisons or screencasting applications.

<100 lines of modern C. Doesn't need sudo.

Examples

Given no flags, xkbcat prints only keypresses, one per line. Here's the output when I type "Hi":

Shift_L
h
i

With key-ups enabled (xkbcat -up), the format changes to show them:

+ Shift_L
+ h
- h
- Shift_L
+ i
- i

Lines starting + are key-downs; - are key-ups.

Left- and right-positioned modifier keys are recognised separately. The F-keys work too, as do most media keys like XF86AudioLowerVolume.

Compilation

Just make.

Don't have clang? Edit the makefile to use gcc.

Don't have X11/extensions/XInput2.h? Install your distro's libxi-devel package.

Usage

Flags you can pass (all optional):

  • -display <display>: set target X display (default :0)
  • -up: also prepend key-ups (default: don't)
  • -help: print usage hints and exit

Then just type as you would usually. Interrupt signal (C-c) to end.

Related programs

If you need to log keys across a whole Linux system (also in the framebuffer—not just in X11), try keysniffer. It works via a kernel module, and needs sudo.

If you want to see what characters the user actually typed (with modifier keys, backspace, etc resolved into text), xspy or logkeys might be better for you.

If you want to add timestamps to each line for logging purposes, I recommend piping to the moreutils package's ts. These answers feature various other tools good for the purpose.

Versioning

The git-tagged version numbers follow semver.

License

ISC.