Xbindkeys is a program that enables us to bind commands to certain keys or key combinations on the keyboard. Xbindkeys works with multimedia keys and is window manager / DE independent, so if you switch much, xbindkeys is very handy.
Xbindkeys is available in the extra repository:
# pacman -S xbindkeys
Create a file named Template:Filename in your home directory:
Now you can either edit Template:Filename to set keybindings, or you can do that with the GUI.
To see the format of a configuration file entry, enter the following command:
A blank window will pop up. Press the key(s) to which you wish to assign a command and xbindkeys will output a handy snippet that can be entered into Template:Filename. For example, while the blank window is open, press Alt + o to get the following output (results may vary):
"(Scheme function)" m:0x8 + c:32 Alt + o
The first line represents a command. The second contains the state (0x8) and keycode (32) as reported by
xev. The third line contains the keysyms associated with the given keycodes. To use this output, copy the three lines to Template:Filename and replace "(Scheme function)" with the command you wish to perform. Here is an example configuration file that binds Fn key combos on a laptop to
amixer commands that adjust sound volume. Note that pound (#) symbols can be used to create comments.
# Increase volume "amixer set Master playback 1+" m:0x0 + c:123 XF86AudioRaiseVolume # Decrease volume "amixer set Master playback 1-" m:0x0 + c:122 XF86AudioLowerVolume # Toggle mute "amixer set Master toggle" m:0x0 + c:121 XF86AudioMute
If you installed the xbindkeys_config package, just run:
Once you're done configuring your keys, edit your Template:Filename and place
before the line that starts your window manager or DE.
Simulating multimedia keys
The XF86Audio* and other multimedia keys are pretty-much well-recognized by the major DEs. For keyboards without such keys, you can simulate their effect with other keys
# Decrease volume on pressing Super-minus "amixer set Master playback 1-" m:0x50 + c:20 Mod2+Mod4 + minus
However, to actually call the keys themselves you can use tools like xdotool (its in [community]) and xmacro (in the AUR). Unfortunately since you'd already be holding down some modifier key (Super or Shift, for example), X will see the result as Super-XF86AudioLowerVolume which won't do anything useful. Here's a script based on xmacro and xmodmap from the xorg-server-utils package for doing this.
#!/bin/sh echo 'KeyStrRelease Super_L KeyStrRelease minus' | xmacroplay :0; xmodmap -e 'remove Mod4 = Super_L'; echo 'KeyStrPress XF86AudioLowerVolume KeyStrRelease XF86AudioLowerVolume' | xmacroplay :0; xmodmap -e 'add Mod4 = Super_L';
This works for calling XF86AudioLowerVolume once (assuming you're using Super-minus), but repeatedly calling it without releasing the Super key (like tapping on a volume button) doesn't work. If you'd like it to work that way, add the following line to the bottom of the script.
echo 'KeyStrPress Super_L' | xmacroplay :0
With this modified script, if you press the key combination fast enough your Super_L key will remain 'on' till the next time you hit it, which may result in some interesting side-effects. Just tap it again to remove that state, or use the original script if you want things to 'just work' and do not mind not multi-tapping on volume up/down.
These instructions are valid for pretty much any one of the XF86 multimedia keys (important ones would be XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioPlay, XF86AudioPrev, XF86AudioNext).