lineakd is the daemon that runs in the background of an X session and listens to incoming events from multimedia buttons.
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@example.com
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:
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
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: http://www.win.tue.nl/~aeb/linux/kbd/scancodes-5.html 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.