Commit 045803af authored by kernc's avatar kernc

Initial v0.1.0 public commit. Everything works. :)

git-svn-id: https://logkeys.googlecode.com/svn/trunk@2 c501e62c-e7d1-11de-a198-37193048d1ed
parent ec16a280
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar
14 rue de Plaisance, 75014 Paris, France
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
===============================================================================
logkeys keylogger - instalation instructions
===============================================================================
Provided your GNU/Linux distribution doesn't include logkeys package in its
repositories, manual installation of logkeys from source is as easy as:
$ tar xvzf logkeys-0.1.0.tar.gz # to extract the logkeys archive
$ cd logkeys-0.1.0/build # move to build directory to build there
$ ../configure # invoke configure from parent directory
$ make # make compiles what it needs to compile
( become superuser now ) # you need root to install in system dir
# make install # installs binaries, manuals and scripts
That's it. If everything went through fine, you can probably start using it.
See README file for usage instructions and notes.
To install the binaries in path other than /usr/local/bin, use configure with
--prefix switch, for example:
$ ../configure --prefix=/usr
Along with other standard configure options, you can also use:
$ ../configure --enable-evdev-path=PATH
to have logkeys look for input event devices in PATH ( $(PATH)/eventX ) instead
of preconfigured default /dev/input (/dev/input/eventX), and
$ ../configure --enable-evdev=DEV
to have logkeys define static event device DEV (i.e. /dev/input/eventX) instead
of looking for it in default /dev/input path or custom evdev-path.
The input event device we are referring to, here, is the kernel event interface
echoing keyboard events. If using either of these two --enable-evdev*
switches, make sure you provided correct PATH/DEV.
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man scripts
EXTRA_DIST = build man/logkeys.8 scripts/lkl scripts/lklk
\ No newline at end of file
This diff is collapsed.
===============================================================================
logkeys - a GNU/Linux keylogger that works!
===============================================================================
0. Licence
1. Description
2. Installation
3. Usage how-to
4. Further information
===============================================================================
+------------------------------------------------
0. Licence
===============================================================================
logkeys is dual licenced under the terms of either GNU GPLv3 or later, or
WTFPLv2 or later. It is entirely your choice! See COPYING for further
licencing information.
+------------------------------------------------
1. Description
===============================================================================
logkeys is a linux keylogger. It is no more advanced than other available linux
keyloggers, notably lkl and uberkey, but is a bit newer, more up to date, it
doesn't unreliably repeat keys and it shouldn't crash your X. All in all, it
just seems to work. It relies on event interface of the Linux input subsystem.
Once completely set, it logs all common character and function keys, while also
being fully aware of Shift and AltGr key modifiers.
+------------------------------------------------
2. Installation
===============================================================================
Provided your GNU/Linux distribution doesn't include logkeys package in its
repositories, manual installation of logkeys from source is as easy as:
$ tar xvzf logkeys-0.1.0.tar.gz # to extract the logkeys archive
$ cd logkeys-0.1.0/build # move to build directory to build there
$ ../configure # invoke configure from parent directory
$ make # make compiles what it needs to compile
( become super↙user now ) # you need root to install in system dir
# make install # installs binaries, manuals and scripts
That's it. If everything went through fine (as it mostly should, I think), you
can probably skip ahead to the next section now.
To ever uninstall logkeys, remove accompanying scripts and manuals, issue
# make uninstall # in the same logkeys-0.1.0/build dir from before
To install the binaries in path other than /usr/local/bin, use configure with
--prefix switch, for example:
$ ../configure --prefix=/usr
Along with other standard configure options, you can also use:
$ ../configure --enable-evdev-path=PATH
to have logkeys look for input event devices in PATH ( $(PATH)/eventX ) instead
of preconfigured default /dev/input (/dev/input/eventX), and
$ ../configure --enable-evdev=DEV
to have logkeys define static event device DEV (i.e. /dev/input/eventX) instead
of looking for it in default /dev/input path or custom evdev-path.
The input event device we are referring to, here, is the kernel event interface
echoing keyboard events. If using either of these two --enable-evdev*
switches, make sure you provided correct PATH/DEV.
A copy of these instructions is in the accompanying INSTALL file.
+------------------------------------------------
3. Usage how-to
===============================================================================
logkeys is simple. You can either invoke it directly, by typing full command
line, or use the provided scripts. There are two scripts in this package:
bin/lkl , which starts the logkeys daemon, and
bin/lklk , which kills it.
You can use these two scripts for starting and stopping the keylogger quickly
and covertly. You can modify the scripts as you like.
Note that logkeys is installed setuid, so the root password need not be
provided at runtime.
Default log file /var/log/logkeys.log and is not readable by others.
I suggest you first test the program manually with
$ touch test.log
$ logkeys --start --output test.log
and in the other terminal follow it with
$ tail --follow test.log
and see if the pressed keys match to those noted. If you use a US keyboard
layout, use -u switch. Make sure your terminal character locale is set to UTF-8
$ locale
LANG=xx_YY.UTF-8
LC_CTYPE="xx_YY.UTF-8"
...
otherwise you will only see odd characters (like ꑶ) when pressing character
keys.
It is very likely that you will see only some characters recognized, without
any hope for Shift and AltGr working even slightly correct, especially when
starting logkeys in X. In that case it is better to switch to virtual terminal,
e.g. tty4 (Ctrl+Alt+F4), and there execute:
$ logkeys --export-keymap my_lang.keymap
Then open my_lang.keymap in UTF-8 enabled text editor and manually repair any
missing or incorrectly determined mappings. From then on, execute logkeys by
$ logkeys --start --keymap my_lang.keymap
Again, see if it now works correctly (character keys appear correct when you
are viewing the log file in editor), and opt to modify bin/lkl starter script.
logkeys acts as a daemon, and you stop the running logger proccess with
$ logkeys --kill
(or bin/lklk provided script).
For more information about logkeys log file format, logkeys keymap format, and
command line arguments, read the application manual,
$ man logkeys
or see the wiki at project website: http://code.google.com/p/logkeys/
If you create full and completely valid keymap for your particular language,
please upload it to website or send it to me by e-mail. Thanks.
Abuse the output of this software wisely.
+------------------------------------------------
4. Further information
===============================================================================
Read the man page.
Refer to troubleshooting and FAQ sections on the project website,
http://code.google.com/p/logkeys/ ,
for currently known issues, ways to resolve them, and any other information.
Report any bugs and request reasonable features on the issues list page
http://code.google.com/p/logkeys/issues .
Always provide descriptively keyworded summary and description.
You are more than welcome to implement unreasonable features yourself, as well
as hack the program to your liking.
If you are a pr0, please answer the few questions I commented in the source.
Thanks.
~
-> Add USB keyboard support.
-> Add support for mouse events (i.e. on mouse click the focus may have changed).
-> Add support for sending logs via mail or POSTing them to remote server.
This diff is collapsed.
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the `atoi' function. */
#undef HAVE_ATOI
/* Define to 1 if you have the <cerrno> header file. */
#undef HAVE_CERRNO
/* Define to 1 if you have the `close' function. */
#undef HAVE_CLOSE
/* Define to 1 if you have the <csignal> header file. */
#undef HAVE_CSIGNAL
/* Define to 1 if you have the <cstdio> header file. */
#undef HAVE_CSTDIO
/* Define to 1 if you have the <cstdlib> header file. */
#undef HAVE_CSTDLIB
/* Define to 1 if you have the <cstring> header file. */
#undef HAVE_CSTRING
/* Define to 1 if you have the `fclose' function. */
#undef HAVE_FCLOSE
/* Define to 1 if you have the `feof' function. */
#undef HAVE_FEOF
/* Define to 1 if you have the `fflush' function. */
#undef HAVE_FFLUSH
/* Define to 1 if you have the `fgets' function. */
#undef HAVE_FGETS
/* Define to 1 if you have the `flock' function. */
#undef HAVE_FLOCK
/* Define to 1 if you have the `fopen' function. */
#undef HAVE_FOPEN
/* Define to 1 if you have the `fork' function. */
#undef HAVE_FORK
/* Define to 1 if you have the `fprintf' function. */
#undef HAVE_FPRINTF
/* Define to 1 if you have the `freopen' function. */
#undef HAVE_FREOPEN
/* Define to 1 if you have the `fscanf' function. */
#undef HAVE_FSCANF
/* Define to 1 if you have the `getcwd' function. */
#undef HAVE_GETCWD
/* Define to 1 if you have the `geteuid' function. */
#undef HAVE_GETEUID
/* Define to 1 if you have the <getopt.h> header file. */
#undef HAVE_GETOPT_H
/* Define to 1 if you have the `getopt_long' function. */
#undef HAVE_GETOPT_LONG
/* Define to 1 if you have the `getpid' function. */
#undef HAVE_GETPID
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `kill' function. */
#undef HAVE_KILL
/* Define to 1 if you have the <linux/input.h> header file. */
#undef HAVE_LINUX_INPUT_H
/* Define to 1 if you have the `localtime' function. */
#undef HAVE_LOCALTIME
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
/* Define to 1 if you have the `open' function. */
#undef HAVE_OPEN
/* Define to 1 if you have the `read' function. */
#undef HAVE_READ
/* Define to 1 if you have the `remove' function. */
#undef HAVE_REMOVE
/* Define to 1 if you have the `setgid' function. */
#undef HAVE_SETGID
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
/* Define to 1 if you have the `setsid' function. */
#undef HAVE_SETSID
/* Define to 1 if you have the `setuid' function. */
#undef HAVE_SETUID
/* Define to 1 if you have the `sigaction' function. */
#undef HAVE_SIGACTION
/* Define to 1 if you have the `sleep' function. */
#undef HAVE_SLEEP
/* Define to 1 if you have the `sscanf' function. */
#undef HAVE_SSCANF
/* Define to 1 if you have the <sstream> header file. */
#undef HAVE_SSTREAM
/* Define to 1 if stdbool.h conforms to C99. */
#undef HAVE_STDBOOL_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the `strcat' function. */
#undef HAVE_STRCAT
/* Define to 1 if you have the `strcpy' function. */
#undef HAVE_STRCPY
/* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR
/* Define to 1 if you have the `strftime' function. */
#undef HAVE_STRFTIME
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `strlen' function. */
#undef HAVE_STRLEN
/* Define to 1 if you have the `strncat' function. */
#undef HAVE_STRNCAT
/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the `time' function. */
#undef HAVE_TIME
/* Define to 1 if you have the `umask' function. */
#undef HAVE_UMASK
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `vfork' function. */
#undef HAVE_VFORK
/* Define to 1 if you have the <vfork.h> header file. */
#undef HAVE_VFORK_H
/* Define to 1 if `fork' works. */
#undef HAVE_WORKING_FORK
/* Define to 1 if `vfork' works. */
#undef HAVE_WORKING_VFORK
/* Define to 1 if you have the `write' function. */
#undef HAVE_WRITE
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* User defined input event device */
#undef INPUT_EVENT_DEVICE
/* User defined input event device path */
#undef INPUT_EVENT_PREFIX
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Version number of package */
#undef VERSION
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
#undef inline
#endif
/* Define to `int' if <sys/types.h> does not define. */
#undef pid_t
/* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t
/* Define as `fork' if `vfork' does not work. */
#undef vfork
This diff is collapsed.
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.64)
AC_INIT([logkeys],[0.1.0],[kerncece+logkeys@gmail.com],[],[http://code.google.com/p/logkeys/])
AC_CONFIG_SRCDIR([src/logkeys.cc])
AM_INIT_AUTOMAKE([-Wall foreign])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_LANG([C++])
# Checks for programs.
AC_CHECK_PROG([FOUND_GREP], [grep], [yes], [no])
if test x"$FOUND_GREP" = xno ; then
AC_MSG_ERROR([Required program grep is missing.])
fi
AC_CHECK_PROG([FOUND_PGREP], [pgrep], [yes], [no])
if test x"$FOUND_PGREP" = xno ; then
AC_MSG_ERROR([Required program pgrep is missing.])
fi
AC_CHECK_PROG([FOUND_DUMPKEYS], [dumpkeys], [yes], [no])
if test x"$FOUND_DUMPKEYS" = xno ; then
AC_MSG_ERROR([Required program dumpkeys is missing.])
fi
# Add --enable-evdev-path option
AC_ARG_ENABLE(
[evdev-path],
[ --enable-evdev-path=PATH Search for input event devices in PATH],
[AC_DEFINE_UNQUOTED([INPUT_EVENT_PREFIX], ["$enableval"], [User defined input event device path])
AC_CHECK_FILE(
[$enableval],
[],
AC_MSG_ERROR([PATH provided in --enable-evdev-path does not exist. $enableval is not a valid directory!])
)
]
)
# Add --enable-evdev option
AC_ARG_ENABLE(
[evdev],
[ --enable-evdev=DEV Define input event device as DEV],
[AC_DEFINE_UNQUOTED([INPUT_EVENT_DEVICE], ["$enableval"], [User defined input event device])],
[]
)
# Checks for files
AC_CHECK_FILE(
[/dev/input],
[],
[AC_MSG_ERROR([Input event interface devices not at expected path! Use --enable-evdev-path to set the location of input event devices, e.g., ./configure --enable-evdev-path=/dev/input/ for event devices /dev/input/eventX.])]
)
AC_CHECK_FILE(
[/proc/bus/input/devices],
[],
[AC_MSG_ERROR([/proc/bus/input/devices is required to guess the correct keyboard input device.])]
)
# Checks for header files.
AC_CHECK_HEADERS(
[cstdio cerrno cstring sstream cstdlib csignal unistd.h getopt.h sys/file.h linux/input.h],
[],
[AC_MSG_ERROR([Expected header missing!])]
)
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_PID_T
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_CHECK_FUNCS(
[geteuid getcwd memset setlocale strerror fprintf getopt_long fopen sscanf fscanf getpid fclose remove kill strlen strcat strcpy strncat freopen feof fgets atoi sigaction fork setsid open close flock write umask setgid setuid strftime localtime fflush read sleep time],
[],
[AC_MSG_ERROR([Expected function missing!])]
)
AC_CONFIG_FILES([Makefile src/Makefile man/Makefile scripts/Makefile])
AC_OUTPUT
This diff is collapsed.
This diff is collapsed.
man_MANS = logkeys.8
This diff is collapsed.
.TH logkeys 8 2009-12-13
.SH NAME
logkeys \- a GNU/Linux keylogger that works!
.SH SYNOPSIS
.B logkeys
\fB-s\fR [\fB-m \fIkeymap\fR|\fB-u\fR] [\fB-o \fIlogfile\fR] [\fB--no-func-keys\fR]
.br
.B logkeys
\fB-k\fR
.br
.B logkeys
[\fB--export-keymap=\fIkeymap\fR]
.SH DESCRIPTION
logkeys is a linux keylogger. It is no more advanced than other available linux
keyloggers, notably \fBlkl\fR and \fBuberkey\fR, but is a bit newer, more up to date, it
doesn't unreliably repeat keys and it shouldn't crash your X. All in all, it
just seems to work. It relies on the event interface of Linux input subsystem
(normally devices \fI/dev/input/eventX\fR).
.PP
Once set, it logs all common character
and function keys, while also being fully aware of Shift and AltGr key modifiers.
It tries to automatically determine the correct input device, and may in some cases
also get the character keys mapping right.
.PP
It is installed setuid root and may be invoked by any user anytime, either directly
or using the accompanying \fBlkl\fR and \fBlklk\fR scripts.
.SH OPTIONS
Non-optional arguments are required for short options too.
.TP
\fB-s\fR, \fB-\-start\fR
Starts the keylogging daemon process.
.TP
\fB-k\fR, \fB-\-kill\fR
Terminates the running logkeys process.
.TP
\fB-o\fR, \fB-\-output\fR=\fIlogfile\fR
Set ouput log file to \fIlogfile\fR. If no \fB-o\fR option is provided, logkeys
appends to \fI/var/log/logkeys.log\fR file. If \fIlogfile\fR doesn't exist, logkeys
creates the file with 600 permissions.
.IP
See also \fBLOGFILE FORMAT\fR section.
.TP
\fB-m\fR, \fB-\-keymap\fR=\fIkeymap\fR
Use file \fIkeymap\fR as input keymap for processing pressed keys.
.IP
This option works best if \fIkeymap\fR is hand corrected file, which had been
previously exported by \fB--export-keymap\fR.
.IP
See also \fBKEYMAP FORMAT\fR section.
.IP
\fB-m\fR and \fB-u\fR option are mutually exclusive.
.TP
\fB-u\fR, \fB-\-us-keymap\fR
This option makes logkeys interpret keys as on standard US keyboard.
.IP
\fB-u\fR and \fB-m\fR option are mutually exclusive.
.TP
\fB-\-export-keymap\fR=\fIkeymap\fR
This option makes logkeys export dynamic keymap as obtained from \fIdumpkeys\fR(1)
to file \fIkeymap\fR and then exit.
.IP
\fIkeymap\fR can later be used with \fB-m\fR option to override automatic keymap
"calculation", which may be wrong.
.IP
It is advised that you manually edit \fIkeymap\fR and correct any mistakes as well
as complete deficient entries. It is also advised that you use \fB-\-export-keymap\fR
on a virtual terminal outside of X (\fI/dev/ttyX\fR).
.IP
See section \fBKEYMAP FORMAT\fR for exported keymap format.
.TP
\fB-\-no-func-keys\fR
This option makes logkeys log all and only character key presses
(1, 2, ..., q, w, e, ..., a, s, d, f, ..., ", @, \\, ...).
.IP
This option may be useful when correct \fIkeymap\fR can reliably be
expected (i.e. by providing it with \fB-m\fR option). Then only character keys are
logged, influenced by Shift and AltGr modifiers.
.SH FILES
.TP
\fB/var/log/logkeys.log\fR
When \fB-o\fR option is not used, logkeys appends to default log file.
.SH "LOGFILE FORMAT"
Log files are \fBUTF-8 encoded\fR.
.PP
Each logging session is enclosed in "Logging started..." and "Logging stopped at
<timestamp>" strings. Whenever Enter key (Return key) is pressed, a timestamp is
appended on a new line.
.PP
Timestamp format is "%F\ %T%z", which results in "YYYY-mm-dd HH:MM:SS+ZZZZ".
Timestamp is separated from the logged keys by one '>' symbol.
.PP
All character key presses are logged as they appear. All
function key presses are replaced with strings as obtained from \fIkeymap\fR file, or
as hardcoded when no \fIkeymap\fR file is provided.
.PP
If a key is pressed down long enough so it repeats, it is logged only once and then
"<#+DD>" is appended, which hints the key was repeated DD more times. The DD figure
is not to be relied on. DD is in decimal format.
.PP
If a keypress results in keycode, which is not recognized (i.e. key not found on a standard US
or Intl 105-key keyboard), then the string "<E-XX>" is appended, where XX is the
received keycode in hexadecimal format. All new "WWW", "E-Mail", "Volume+", "Media",
"Help", etc. keys will result in this error string.
.PP
Using US keyboard layout, one example log file could look like:
.IP
Logging started ...
.IP
2009-12-11 09:58:17+0100 > lkl
.br
2009-12-11 09:58:20+0100 > sudo cp <RShift>~/foo.<Tab> /usr/bin
.br
2009-12-11 09:58:26+0100 > <LShift>R00<LShift>T_p455\\\\/0rD
.br
2009-12-11 09:58:39+0100 > <Up><Up><Home>sudo
.br
2009-12-11 09:58:44+0100 > c<#+53><BckSp><#+34><LCtrl>clklk
.IP
Logging stopped at 2009-12-11 09:58:44+0100
.PP
If the same log was obtained by a logkeys process invoked with \fB-\-no-func-keys\fR
option, it would look like:
.IP
Logging started ...
.IP
2009-12-11 09:58:17+0100 > lkl
.br
2009-12-11 09:58:20+0100 > sudo cp ~/foo. /usr/bin
.br
2009-12-11 09:58:26+0100 > R00T_p455\\\\/0rD
.br
2009-12-11 09:58:39+0100 > sudo
.br
2009-12-11 09:58:44+0100 > c<#+53>clklk
.IP
Logging stopped at 2009-12-11 09:58:44+0100
.PP
Even when \fB-\-no-func-keys\fR is in effect, Space and Tab key presses are logged as
a single space character.
.SH "KEYMAP FORMAT"
The keymap file is expected to be \fBUTF-8 encoded\fR.
.PP
Each line of file represents either one character key or one function key.
The format specifies \fBat least two\fR and \fBup to three\fR space-delimited
characters on character key lines (first without modifiers, second with Shift in
action, optional third with AltGr in action), and up to \fB7 characters long\fR
string on function key lines.
.PP
First three lines in a Slovene keymap file look like:
.IP
<Esc>
.br
1 ! ~
.br
2 " ˇ
.br
...
.PP
How does one know which lines belong to character keys and which lines to function
keys?
.PP
Well, the easiest way is to use \fB-\-export-keymap\fR, and examine the exported
keymap. Make sure you export in a virtual terminal (ttyX) and not in X as this way
more keys could get exported correctly (don't ask me why).
.PP
Basically, \fB-\-export-keymap\fR ouputs 105 lines for 105 keys, even if some of
those keys aren't located on your keyboard. Lines 1, 14, 15, 28, 29, 42, 54-83,
85-105 belong to function keys, all other lines (2-13, 16-27, 30-41, 43-53, 84)
belong to character keys.
.PP
Line 57 is reserved for Space and it should always be ' '. Line 84 is reserved for
the key just right to left Shift that is present on some international layouts.
Other lines can be quite reliably determined by looking at one \fBexported keymap\fR.
The keys generally follow the order of their appearance on keyboard, top-to-bottom
left-to-right.
.PP
If you create full and completely valid keymap for your particular language,
please upload it to project website or send it to me by e-mail. Thanks.
.SH EXAMPLES
To print short help:
.IP
$ logkeys
.PP
To start logging to a custom log file with dynamically generated keymap:
.IP
$ logkeys --start --output /home/user/.secret/log
.PP
To start logging to default log file on a standard US keyboard:
.IP
$ logkeys --start --us-keymap
.PP
To export dynamically generated keymap to file:
.IP
$ logkeys --export-keymap my_keymap
.PP
To start logging to default log file with a custom keymap:
.IP
$ logkeys --start --keymap my_keymap
.PP
To end running logkeys process:
.IP
$ logkeys --kill
.PP
After updated to one's liking, helper scripts \fI/usr/bin/lkl\fR (start) and
\fI/usr/bin/lklk\fR (kill) can be used as well.
.SH BUGS
logkeys relies on numeric output of \fIdumpkeys\fR(1), which \fIkeymaps\fR(5)
manual page specifically discourages as unportable.
.PP
Be nice and hope nothing breaks.
.PP
If you come across any bugs, please report them on project website, issues page:
.IP
http://code.google.com/p/logkeys/issues
.SH AUTHOR
.PP
logkeys was written by Kernc <kerncece+logkeys@gmail.com>.
.PP
You can always obtain the latest version and information at project website:
<http://code.google.com/p/logkeys/>.
This diff is collapsed.
bin_SCRIPTS = lkl lklk
\ No newline at end of file
This diff is collapsed.
#!/bin/bash
logkeys --start
\ No newline at end of file
#!/bin/bash
logkeys --kill
\ No newline at end of file
CXXFLAGS = -Wall -O3
bin_PROGRAMS = logkeys
logkeys_SOURCES = logkeys.cc
install-exec-hook:
chown root $(bindir)/logkeys
chmod u+s $(bindir)/logkeys
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment