Keyboard – XF86 Keybinds in Openbox


Lubuntu uses Openbox as its window manager. ~/.config/openbox/lubuntu-rc.xml is a file that specifies, among other things, keybinds for various commands.

Most of the keybinds in lubuntu-rc.xml use modifier keys such as Control, Shift, Alt, and Super.

For example, one way of opening a terminal window would be by pressing Control+Alt+T together:

<!-- Launch a terminal on Ctrl + Alt + T-->
<keybind key="C-A-T">
  <action name="Execute">
    <command>lxsession-default terminal</command>

But there is also this:

<!-- Keybinding for terminal button-->
<keybind key="XF86WWW">
  <action name="Execute">
    <command>lxsession-default terminal</command>
<keybind key="XF86Terminal">
  <action name="Execute">
    <command>lxsession-default terminal</command>

What are keybind key="XF86WWW" and keybind key="XF86Terminal"? How do I locate these keys on my laptop's keyboard? My laptop is a Dell Inspiron N 1545 from 2008.

Best Answer

These keys are defined in /usr/include/X11/XF86keysym.h.

Please note that the X11 include files may not be installed on your system if you have not installed various dev packages or needed to install proprietary graphics drivers. You can also find XF86keysym.h online

According to this header file, they are XFree86 vendor specific keysyms.

In other words, these keys are either part of a particular keyboard or they are not. If you don't see them, your keyboard does not have them.

These keys are pre-defined in desktop configuration files (you see them in Unity System Settings >> Keyboard >> Shortcuts as well, though Unity renames them slightly) as a convenience to users since otherwise it usually requires some scripting to attach actions to them.

The file also says:

X.Org will not be adding to the XF86 set of keysyms, though they have 
been adopted and are considered a "standard" part of X keysym definitions.
XFree86 never properly commented these keysyms, so we have done our
best to explain the semantic meaning of these keys.

There are two things to note here.

  1. These keysyms were an attempt to make XFree86/Xorg work with a wide range of hardware and some of the keysysms seem a little dated. For example, the calculator key is part of a group entitled:

    These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere)
  2. These keysyms are standard. They are compiled into the various xkb-related libraries and are therefore automatically available to use, with or without the include files present on a system. But, of course, you need to have the key that emits the corresponding keycode already physically on the keyboard.

If you don't have the keys, you can of course map the actions to other key sequences. Because the keysyms are built into Xorg and the default actions are built into Ubuntu (through lubuntu-rc.xml, update-alternatives, and perhaps other ways), this is very easy to do.

Ubuntu, for example, uses these keysyms to offer the calculator key in both Unity and Lubuntu, even though it's extremely unlikely a standard desktop keyboard will have this key.

I liked the idea of a calculator button, which I had never thought of until I saw the option in System Settings.

In Unity, I changed the shortcut key for the calculator to Ctrl+/.

In Lubuntu, which I also use, I changed

<keybind key="XF86Calculator">


<keybind key="C-slash">

You can do the same for XF86WWW and XF86Terminal, although you can't assign a single key stroke to one of these keys (really, now just the concept of the key) unless you don't want to use the re-mapped key for it's original purpose, and you probably don't have many keys to spare.

But, as an example, I never use the menu key for a right-click. In Lubuntu, I can easily turn it into a terminal launcher by changing XF86Terminal to Menu. (The xml file uses the name of the key or the keycode. You can find these by using xev in a terminal, then pressing the key you want.)

Interestingly enough, in Lubuntu the default action of the browser key is to also launch the terminal. To re-map XF86WWW, you would need to change the name of the key and the <command>... as well.