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.
Best Answer
here's a solution with bash, a fiddly language to write !
example of use:
note: if you have the same keybinding for two different things, it uses the last one in the file. and this script edits the first one it finds by action name e.g. toggledesktop. but obviously you could edit it to find by keybinding, though keybindings are obviously less likely to be unique
the script needs to be in the same folder as the rc.xml unless you specify the full path in the RCXML variable, and note that globbing/tilda doesn't work in a variable
also, if you want to edit custom made shortcuts, which include the extra line:
you will have to adjust the bash script to include that extra line:
if you want to edit mousekey shortcuts you'll have to do alot more editing
i tried for a little while to create something that appreciates the XML format more, with ruby, though the fact that the action name entry is nested inside the keybind key, is kind of the wrong way round to code an easy solution. also, the rc.xml file is packed with comment lines, which confused the two ruby XML modules i tried. but if you strip those out, you might be able to make something in ruby.
you could also append the following lines to .bashrc
so then run this once to create a backup:
then add the following line to: ~/.config/openbox/autostart