lineakd(1) GUI configurable support for multimedia keyboards


lineakd [options...]


LinEAK, Linux support for Easy Access and Internet Keyboards, features X11 support, windowmanager independence, ability to configure all keys through GUI or .conf file, volume control and sound controls.

lineakd is the daemon that runs in the background of an X session and listens to incoming events from multimedia buttons.


The programs follow the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options are included below.
-l, --kbd-list
Show all supported keyboard types.
-L, --plugin-list
Show all plugins and macros.
-D, --directives-list
Show all of the default, implicit configuration directives.
-f FILE, --conffile=FILE
Specify the .conf file.
-e FILE, --deffile=FILE
Specify the .def file.
-d DEVICE, --cdrom-dev=DEVICE
Specify the CDROM device.
-m DEVICE, --mixer-dev=DEVICE
Specify the mixer device.
-c TYPE, --config=TYPE
Create a new lineakd.conf file for keyboard TYPE (warning: old one will be overwritten!).
-x, --exit
Tell the daemon to exit.
-r, --reload
Reload the configuration files.
-z, --sleep
Stop the daemon from processing keyboard events.
-k, --awaken
Resume processing of keyboard events.
-v, --verbose
Print verbose messages.
-vv, --very-verbose
Print very verbose messages. Mostly for debugging purposes.
-h, --help
Show summary of options.


if -f, -e, -d, or -m parameters are used in conjunction with -c, please make sure you specify those BEFORE -c !


For those who want to setup their configuration quickly, here are the steps:

  run 'lineakd -l' to see a list of available keyboards.

  run 'lineakd -c TYPE' to create a standard configuration file for the keyboard with an identifier of TYPE that you found by running lineakd -l

  The configuration file will be $HOME/.lineak/lineakd.conf

Edit the config file to specify commands for the keys. The commands will initially be empty. This file can be modified to suit your needs. Do NOT, however, add extra keys or keynames! You can only change the values of the keys that are already present! If you have a key on your keyboard that is not in the file, please post it on the mailing list [email protected]


Lineak uses two types of configuration files: lineakkb.def files and lineakd.conf files.


lineakkb.def files contain keyboard descriptions that map key and button names, to keycodes and button codes respectively. A lineakkb.def file can be placed either in a system directory, or in a users home directory (in the .lineak/ subdirectory). The lineakd daemon will first read the system lineakkb.def file, usually at /etc/lineakkb.def and then read the ~/.lineak/lineakkb.def file. It will attempt to reconcile the entries, using the local entries to override the system entries.

Here is an example of a keyboard definition from a lineakkb.def

   brandname = "Logitech"
   modelname = "Cordless Desktop Pro"

      Sleep                 = 223
      Internet              = 178
      Mail                  = 236

      Thumb                 = 2


The structure is important. Adding a new keyboard is as easy as determining the special keys that you keyboard has, using something like xev, and writing your own definition file. Note that the daemon will only register keys that you also have defined in your lineakd.conf file.


lineakd.conf files can live either in a system directory, or in the users home directory under the .lineak subdirectory. lineakd will attempt to load a users config file before looking for a system wide configuration file.


Lineakd supports various configuration file directives. Plugins also can specify their own directives. The standard directives that are supported follow with their defaults:

KeyboardType =

CdromDevice = /dev/cdrom

MixerDevice = /dev/mixer

Display_plugin = internal

Display_font = -adobe-helvetica-bold-r-normal-*-*-240-*-*-p-*-*-*

Display_color = 0aff00

Display_timeout = 3

Display_pos = bottom

Display_align = center

Display_hoffset = 0

Display_voffset = 50

Display_soffset = 1

keystate_capslock =

keystate_numlock =

keystate_scrolllock =

KeyboardType is the only mandatory defintion. If KeyboardType is not defined, the daemon will not function properly.

The CdromDevice and MixerDevice settings specify the device files to use. These are only useful when used in conjunction with a plugin that requires them. One such plugin is the defaultplugin.

The Display_* directives control the functioning of the on screen display.
    Display_plugin specifies with of the installed display plugins to use. Currently the only OSD plugin is the xosd plugin.

    Display_font specifies which font name to use for the on screen display. Currently the xosd plugin requires font names in X format.

    Display_color specifies the color of the font. As xosd currently requires the color in a numeric format, that is the default. You can use something like kcolorchooser or the gimp to get color values for you.

    Display_timeout specifies the amount of time the display should remain on screen. After this number of seconds the display will be removed.

    Display_pos specifies the vertical position for the OSD. Possible values are bottom, middle and top.

    Display_align specifies the horizontal position for the OSD. Possible values are left, center and right.

The keystate_* directives control modifiers. By default, lineakd does not pay attention to the modifiers NumLock, CapsLock and ScrollLock. Set these directives to "enable" to use modifiers. (Note: as of beta3, these options do nothing. We automatically use modifiers if they are defined on a per command basis.)


lineakd supports toggle keys. A toggleable key is one that can have a various number of states for each push of the key. For example, on many keyboards the Play and Pause keys are the same. When you push the key once it plays, the next time it pauses. The same thing goes for the Mute key. You must define a toggle key as key1|key2 in the definition (lineakkb.def) file. We can define a single action for this key in the config file by specifying the keyname in the form key1|key2 - this effectively treats the toggleable key as a normal key. It tells lineakd that we don't want to use this a a toggleable key, maybe because the command we are going to bind to it supports the notion of toggling. We can also specify seperate actions for the Play and Pause states by assigning actions to key1 and key2. eg.

        On the LTCDP there is the key 'Play|Pause' In my
        config file I can specify either:

Play|Pause = /usr/bin/xmms -t

        To treat this as a normal key, or, if I want seperate functions for the play and pause states:

Play = /usr/bin/xmms -p

Pause = /usr/bin/xmms -u

Note that there can be more than two states for a toggleable key. For example key1|key2|key3 could be defined.


lineakd now supports a variable number of modifiers to a key. However, this only applies to non-toggleable keys so a key such as Play|Pause will not work with modifiers if you use it as a toggleable key by putting entries like this:

Play = something

Pause = something else

In your config file. However, if you use the key as a non-toggleable key, i.e. like this:

Play|Pause = something

Then it becomes possible to use modifiers.

Currently we support the following modifiers:
        mod5 To use a modifier, we do something like this in the config
        Sleep+control = something
        Sleep+alt = something different
        Sleep+shift = something more different
        Sleep = sleepiness

Modifiers to buttons, if they are defined in the lineakkb.def file, work the same way.


lineakd supports custom on screen display messages through the configuration file. However, some plugins may choose to disregard custom on screen display messages if they feel it does not apply. Currently you specify the on screen display message for a command by placing it within square brackets at the beginning of the line. E.g.
        [On Screen Message] Go = some command
        [Another Message] Home+alt = some command
        [Boring Message] Home = some command


The lineakd daemon does not contain any internal macros or actual on screen display functionality. This functionality is implemented in plugins that are loaded when the lineakd daemon is first run. NOTE: Restarts of the daemon with lineakd -r will not reload plugins, or load new plugins.

The previous functionality that existed in versions of lineakd up uptin 0.8 has been moved into two plugins: lineak_defaultplugin, which contains all of the EAK_* macros and lineak_xosdplugin which contains all of the XOSD on screen display functionality. There is now also a lineak_kdeplugin plugin that brings with it a total of 23 macros or more for handling KDE funtionality via dcop. Some of these macros themselves take arguments which expands their functionality. See the respective plugin packages for more information on MACRO usage.


The lineakd package now installs two helper applications, send_to_keyboard and evtest.

evtest: Allows you to see the event layer events your keyboard is generating. This is for debugging to help you determine if indeed your keyboard is sending events, and which events it is sending. It uses the new event layer.

send_to_keyboard (only for arm, x86 and x86_64): This is a simple program which, for now is just for the IBM keyboards. It allows you to send actual control codes to the keyboard device to enable or disable certain functions. For example, some of the IBM keyboards require:
  send_to_keyboard ea 17

in order to enable the extra keys. This helper application is actually used from lineakd. Within your lineakkb.def file you can specify a configuration option after the keyboard and model name to initialize the keyboard with. As requirements for this sort of thing increases I'll enable the handling of different options. So far we only look for INITIALIZE.


  brandname = "IBM"
  modelname = "Rapid Access Keyboard"
  RAWCOMMAND[INITIALIZE] = "ea 71"   # <--- lineakd will at this point fork and execute: `send_to_keyboard ea 17`
    WWW              = 178
    WorldBook        = 151
    Option           = 176
    Help             = 166
    Standby          = 165
    AudioMute        = 146
    AudioStop        = 164
    AudioPlay|Pause  = 153
    Back             = 163
    Forward          = 161
    AudioLowerVolume = 158
    AudioRaiseVolume = 160
    Custom1          = 174



Linux 2.6 can cause changes in how the keycodes are interpreted from the 2.4 version of the kernel. In some cases, keys that use to work, no longer work at all. If this happens to you try the following:

1) Run xev and see if X reports any keycodes for the keys that are not working. If there are keycodes being produced, you'll have to update the lineakkb.def file (usually in /etc) with the correct keycodes for your keyboard.

2) If xev does not report any keycodes for one or more of your keys, then try looking in /var/log/messages. If you have error messages in that file from atkbd.c about unknown scancodes then try binding those scancodes to keycodes with the setkeycodes command as root. If you are in doubt over which keycode to bind it to just use the keycode from your /etc/lineakkb.def file. If X then produces keycodes for that key then put those setkeycodes commands somewhere in your startup scripts (at the end of /etc/rc.sysinit for example) so that they run at boot time. You'll notice that X produces a different keycode for the key that what you set it as. Follow the steps under the procedure 1 above to get lineak to recognize the new keycodes.

3) If you see nothing in your /var/log/messages, and xev produces no keycodes, you can try running showkey -s as root and see if the keypresses show any scancodes. If they do, follow the setkeycodes part of procedure 2 above. If not, see 4.

4) If still nothing happens, try the evtest command included in the package. You'll have to run it as root, but it can tell you if it sees any events at all. If not, it is likely that your keys may require a low level command to be sent to the keyboard (like in the example of the IBM Rapid Access Keyboard above.) You can check this website: to see if there is any further information.

5) If none of the above work, send an email to the linux-usb mailing list (if your keyboard is USB) or to the atkbd.c maintainer and pray they do something about it. Otherwise your screwed. Take your POS keyboard back to the store and get a supported one. :(

The EAK_SLEEP action has no functionality yet.

Due to the fact that not all IDE CD-ROM drives provide status info on the tray position, the following can occur:

   If lineakd is started with the cdrom tray in open position, the eject button has to be pressed twice the first time to close it.

   If you opened the cdrom tray with the eject button and let the tray close automatically after a while (hardware timer), the eject button has to be pressed twice to open it again.


Keyboard definitions file.
Personal configuration file.
Personal keyboard configuration file.


lineakd was written by Sheldon Lee-Wen <l[email protected]> and Mark Smulders <[email protected]>.