PyKL is a keylogger developed to run under Linux in x86 and AMD64 architectures. PyKL was created to be a simple Python script that sniffs all keystrokes from ioport 0x60 and translate to keymap file. It basically operates like LKL (Linux Key Logger), but with the difference that works without keystroke delay or mouse interference.

PyKL is recommended for users with problems caused by the execution of others keyloggers on their systems (especially using GUI).


PyKL is released under GPL version 2.


To run the PyKL, Python 2.6 or later must be installed.

In addition, it requires the additional installation of PortIO 0.4 package (included).

Advantages and Disadvantages


  • Simple and light python script.
  • Log of all users keystrokes.
  • Catch data both from the GUI and the shell.
  • Store all data as ASCII.


  • Require run as superuser.
  • Require PortIO installation.


If you download from the repository,

  1. Open a shell as superuser.
  2. Unpack the tarball in a directory.

    # tar zvxf pykl.tar.gz

  3. Go to the PortIO directory and install it.

    # cd pykl/portio
    # python setup.py install

  4. Back to script and execute

    # ./pypkl.py

How to Use

Just run the pypkl.py as superuser and redirect the output to desired file.

# ./pypkl.py >> keylog.log

How to contribute

If you want to contribute to this project you can:

  1. Report me running bugs by mail sawp@sawp.com.br or
  2. Create a keymap file (.kbd).

Creating a .kdb file

The files test_keyboard.py and make_keymap_brazil_EXAMPLE.py are used to create the .kdb file for the keyboard layout.

  • test_keyboard.py: Use this script to know the numeric code of each key.
  • make_keymap_brazil_EXAMPLE.py: This is the example file to generate the keymap of BRAZIL layout. Based on this file, modify the dictionaries keymap1 (normal symbols) and keymap2(shifted symbols). In line 184, modify the name "brazil.kbd" to "your_layout.kbd".