Categorygithub.com/MarinX/keylogger
modulepackage
0.0.0-20240620105846-48ca9d01f566
Repository: https://github.com/marinx/keylogger.git
Documentation: pkg.go.dev

# README

Keylogger

Capture global keyboard events on Linux

Build Status GoDoc License MIT

Notes

  • Only Linux based
  • Need root privilages

Installation

go get github.com/MarinX/keylogger

Getting started

Finding keyboard device

There is a helper on finding the keyboard.

 keyboard := keylogger.FindKeyboardDevice()

Which goes through each file device name to find keyword "keyboard"

/sys/class/input/event[0-255]/device/name

and returns the file event path if found

/dev/input/event2

If the function returns empty string, you will need to cat each device name and get the event number. If you know already, you can easily pass it to constructor

keylogger.New("/dev/input/event2")

Getting keypress

Once the keylogger returns channel event, you can switch by event code as described in input_event.go For start, you can listen on keyboard state change

keylogger.EvKey

Once you get desire event, there is a helper to parse code into human readable key.

event.KeyString()

Writing keypress

Best way is to open an text editor and see how keyboard will react There are 2 methods:

func (k *KeyLogger) WriteOnce(key string) error

and

func (k *KeyLogger) Write(direction KeyEvent, key string) error 

WriteOnce method simulates single key press, eg: press and release letter M

Write writes to keyboard and sync the event. This will keep the key pressed or released until you call another write with other direction eg, if the key is "A" and direction is press, on UI, you will see "AAAAA..." until you stop with release

Probably you want to use WriteOnce method

NOTE

If you listen on keyboard state change, it will return double results. This is because pressing and releasing the key are 2 different state change. There is a helper function which you can call to see which type of state change happend

// returns true if key on keyboard is pressed
event.KeyPress()

// returns true if key on keyboard is released
event.KeyRelease()

Example

You can find a example script in example/main.go

Running tests

No magic, just run

go test -v

Creating key sniffer (needs update)

License

This library is under the MIT License

# Functions

Like FindKeyboardDevice, but finds all devices which contain keyword 'keyboard' Returns an array of file paths which contain keyboard events.
FindKeyboardDevice by going through each device registered on OS Mostly it will contain keyword - keyboard Returns the file path which contains events.
New creates a new keylogger for a device path.

# Constants

EvAbs is used to describe absolute axis value changes, e.g.
EvFf is used to send force feedback commands to an input device.
EvFfStatus is used to receive force feedback device status.
EvKey is used to describe state changes of keyboards, buttons, or other key-like devices.
EvLed is used to turn LEDs on devices on and off.
EvMsc is used to describe miscellaneous input data that do not fit into other types.
EvPwr is a special type for power button and switch input.
EvRel is used to describe relative axis value changes, e.g.
EvRep is used for autorepeating devices.
EvSnd is used to output sound to devices.
EvSw is used to describe binary state input switches.
EvSyn is used as markers to separate events.
No description provided by the author
No description provided by the author

# Structs

InputEvent is the keyboard event structure itself.
KeyLogger wrapper around file descriptior.

# Type aliases

EventType are groupings of codes under a logical input construct.
KeyEvent is the keyboard event for up/down (press/release).