Adding key bindings for “Fn” + “Control” key in openbox

keyboard shortcutsopenbox

I need use Fn + CTRL as a key combination, but it doesn't work in openbox (works in XFCE / KDE4`).

<keybind key="Fn-C">
  <action name="ToggleMaximize">
      </action>
</keybind>

The action name is totally right, it works with other key combination, e.g W-3.

So, any ideas?

Best Answer

Different window managers can use different keyboard mappings, and the keymapping defines how your Fn key is recognized. This is why what works in XFCE doesn't necessarily work in Openbox.

To check how X (and Openbox) interpret your Fn key, follow this guide.

Based on the results, you can either use the appropriate key symbol in rc.xml instead of Fn.
Fn on my Thinkpad is recognized as XF86WakeUp for instance. If it has no symbol assigned, you can assign one manually with xmodmap as per this guide and then use that symbol in rc.xml.

Investigating further, it turns out that Fn is a special key on some notebooks (like IBM/Lenovo Thinkpads) in that the Keypress and Keyrelease events (or Keydown and Keyup in Microsoft terms) are generated simultaneously and only when the key is released. Further keypresses while Fn is depressed are simply not registered*. With xev, you can easily check if this is the case with your system as well.

This means that Fn cannot be used as a modifier key (combined with other keys like Alt, Ctrl or Shift). It can be assigned as a shortcut on its own though. Combined with Openbox's keychains, this is almost as good as using it as a modifier. You just have to release it before pressing the key you combine it with.

* There must be some way of registering keys combined with Fn though at least on Thinkpads, as Lenovo's own Windows tools do react to Fn plus other keys. But this seems to happen at a very low level. When I am in a VMWare guest on a Windows host, pressing Fn plus a key opens the appropriate tool in the Windows host, not in the guest OS. It would be interesting to look into the implementation of similar Thinkpad tools on Linux to see how they cope with Fn.

Here you find more Thinkpad-specific info on how Fn+Fx key combos generate ACPI events, which is what the Thinkpad tools react to. However, I suppose those events are only generated for specific combinations with Fx keys and not for other key combinations.

The page also describes how you can make ACPI events trigger key events. However, if Fn keydown and keyup don't generate separate events of their own (I believe they don't on Thinkpads), this doesn't really get you any further.

Related Question