hotkeys(1) A hotkeys daemon for your Internet/multimedia keyboard in X


hotkeys [options...]


This program sits at the back and listens for the "special" hotkeys that you won't normally use on your Internet/Multimedia keyboards. The buttons perform their intended behaviors, such as volume up and down, mute the speaker, control the backlight, launch applications, etc. The functions are completely programmable.

It has On-screen display (OSD) to show the volume, program that's being started, etc. Most importantly it looks cool.

It features an XML-based keycode configuration file format, which makes it possible to define the hotkeys to launch any programs you want.


-h, --help
Prints a usage message.
-t, --type=TYPE
Specify the keyboard type.
-l, --kbd-list
Show all supported keyboards, and the code needed for the -t option.
-o, --osd=STATE
Turn off or on the on-screen display, default is on if OSD support is compiled with the program. Valid values for STATE are off/0/no/on/1/yes.
-L, --loglevel=LEVEL
Set the log level in syslog. LEVEL is a value from 0 to 7. 7 will log all messages.
-d, --cdrom-dev=DEVICE
Specify the device of your CDROM drive, default to /dev/cdrom. If you give 'none', CDROM related functions will all be disabled. You probably need to define it if you are using devfs.
-b, --no-background
Tells hotkeys NOT to fork itself and run in the background. The short option -b is not backward compatible to version 0.5.6 or before, -b in these versions means run in the background.
-F, --fix-vmware=TIME
This option is mainly for users who run both hotkeys and VMware at the same time. Since VMware will delete some of the information from the memory of the X keyboard configuration due to reasons that I don't understand, a thread will be created to restore the necessary information regularly. The default time interval is 10 seconds. You can specify a time interval as you like, the value is in seconds. I don't think this option will have any side-effect to the operation of VMware, but if you find that this is not true, please file a bug report. (This option is just a hack, I will implement a nicer method to replace it.)
-Z, --no-splash
Do not display the splash screen.


Acer Airkey III Wireless keyboard
Microsoft Internet, Internet Pro, and Natural Pro
Memorex MX1998, MX2500 and MX3000 keyboard
SK-2500, SK-2501a, SK-2505, SK-2800c, SK-7100, SK-9925 USB (partial)
Logitech cordless iTouch, Internet, Cordless Desktop keyboard
Chicony KBP-8993
Compaq KB-9963
BTC 9000
Process MCK-800
And more...

As I have only the Acer wireless keyboard, you can help me to support other keyboards by sending me the list of keycodes of the hotkeys on your keyboard. You can do this by using xev. Contact me for the details.


Keycodes and the behavior of the hotkeys are stored in a Keyboard definition files. Each supported keyboard has such a file placed in either /usr/local/share/hotkeys or /usr/share/hotkeys, depending on the installation configuration. For instance, the data of the Acer Wireless keyboard is stored in the file acerwl.def. Note that the part of the filename without the extension is the name you give to the -t option.

Keyboard definition files are in XML format, which should be self-explanatory.

You can create your own definition file and placed it in $HOME/.hotkeys. Just take the file def/sample.xml or an existing definition file as an example. User definition files override any system defaults.


The configuration file is named hotkeys.conf. By default it is installed in /usr/local/etc (or /etc on Debian). You can also put one into $HOME/.hotkeys/, which will override the settings in the global file if one exists. In other words, the order of parsing is the global file first and then the private one.

The syntax of the file uses the simple key=value pairs. Blank lines and lines starting with # are ignored. The followings are the valid keys and their default values (they are subjected to be changed without prior notice =):

Key Default --------------- ------------------------------------------ Kbd (no default) # CDROM device CDROM /dev/cdrom # ALSA card ALSAcard default # List of ALSA control names, separated by "|" ALSAcontrols Master # audio actions PrevTrack xmms --rew Play xmms --play Stop xmms --stop Pause xmms --pause NextTrack xmms --fwd Rewind (no default yet, suggestion welcome) # applications WebBrowser mozilla Email mozilla -mail Calculator xcalc FileManager gmc MyComputer gmc MyDocuments gmc Favorites gnome-moz-remote --remote=openBookmarks Transfer gftp Record grecord Shell xterm -rv ScreenSaver xscreensaver-command -activate NewsReader mozilla -news Communities mozilla -remote 'openURL(' Search mozilla -remote 'openURL(' Idea mozilla -remote 'openURL(' Shopping mozilla -remote 'openURL(' Go mozilla -remote 'openURL(' Print lpr # OSD stuffs osd_font lucidasanstypewriter-bold-24 (should be aliased to -*-lucidatypewriter-bold-r-normal-*-*-240-*-*-*-*-*-*) osd_color LawnGreen osd_timeout 3 osd_position bottom osd_offset 25


Do not disable the XKEYBOARD extension. For XFree86 3.x, make sure XkbDisable is not set.

The ALSA control names have to be set to enable using ALSA. Otherwise, it defaults to using OSS volume control. The ALSA control names are the same as those used by the amixer(1) program, use "amixer scontrols" to list. All listed controls will be adjusted at the same time by hotkeys.


Please consult the TODO file.


Please inform me if some of your normal keys lose functionalities after running hotkeys.

APM support is highly experimental. I only tested on my desktop and sometimes it can't go out from Suspend mode, no response from the keyboard, mouse, nor the suspend button on the case. Not tested on notebook (I don't have one). Note that you need root priviledge to use the APM functions.

There are probably bugs in the script.

The error "X Error of failed request: BadValue (integer parameter out of range for operation)" should have been fixed finally in version 0.5.2. Please report if it spits out this error on your system.


Copyright 2000-2002, Anthony Y P Wong <[email protected]>

Licensed under GNU GPL version 2 or later. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Anthony Y P Wong, Debian GNU/Linux