UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

175 lines (109 loc) 6.57 kB
Related articles * [Xmodmap](/index.php/Xmodmap "Xmodmap") * [Sxhkd](/index.php/Sxhkd "Sxhkd") Xbindkeys is a program that allows to bind commands to certain keys or key combinations on the keyboard. Xbindkeys works with multimedia keys and is independent of the window manager and desktop environment. ## Contents * [1 Installation](#Installation) * [2 Configuration](#Configuration) * [2.1 Volume control](#Volume_control) * [2.2 Backlight control](#Backlight_control) * [2.3 GUI method](#GUI_method) * [3 Identifying keycodes](#Identifying_keycodes) * [4 Making changes permanent](#Making_changes_permanent) * [5 Simulating multimedia keys](#Simulating_multimedia_keys) * [6 Troubleshooting](#Troubleshooting) ## Installation [Install](/index.php/Install "Install") the [xbindkeys](https://www.archlinux.org/packages/?name=xbindkeys) package. ## Configuration Create a blank `~/.xbindkeysrc`, or you can create a sample file (Note this includes some bindings such as `Ctrl+f`, which you may want to edit or remove): ``` $ xbindkeys -d > ~/.xbindkeysrc ``` Now you can either edit `~/.xbindkeysrc` to set keybindings, or you can do that with the GUI. **Tip:** After you made a change, execute `xbindkeys -p` to reload the configuration file and apply the changes. ### Volume control Here is an example configuration file that binds Fn key combos on a laptop to *pactl* commands that adjust sound volume. Note that pound (#) symbols can be used to create comments. ``` # Increase volume "pactl set-sink-volume @DEFAULT_SINK@ +1000" XF86AudioRaiseVolume ``` ``` # Decrease volume "pactl set-sink-volume @DEFAULT_SINK@ -1000" XF86AudioLowerVolume ``` ``` # Mute volume "pactl set-sink-mute @DEFAULT_SINK@ toggle" XF86AudioMute ``` For alternative commands to control volume, see [PulseAudio#Keyboard volume control](/index.php/PulseAudio#Keyboard_volume_control "PulseAudio") or [ALSA#Keyboard volume control](/index.php/ALSA#Keyboard_volume_control "ALSA"). ### Backlight control Keybindings can also be defined in order to control the brightness of the screen. ``` # Increase backlight "xbacklight -inc 10" XF86MonBrightnessUp ``` ``` # Decrease backlight "xbacklight -dec 10" XF86MonBrightnessDown ``` ### GUI method For graphical configuration [install](/index.php/Install "Install") the [xbindkeys_config-gtk2](https://aur.archlinux.org/packages/xbindkeys_config-gtk2/) package and run: ``` $ xbindkeys_config ``` ## Identifying keycodes To find the keycodes for a particular key, enter the following command: ``` $ xbindkeys -k ``` 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 `~/.xbindkeysrc`. 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 either one of the last two lines to `~/.xbindkeysrc` and replace "(Scheme function)" with the command you wish to perform. **Tip:** Use `xbindkeys -mk` to keep the key prompt open for multiple keypresses. Press `q` to quit. To identify mouse buttons, you can use xev, see [[1]](https://blog.hanschen.org/2009/10/13/mouse-shortcuts-with-xbindkeys/). ## Making changes permanent Once you are done configuring your keys, edit your [xprofile](/index.php/Xprofile "Xprofile") or [xinitrc](/index.php/Xinitrc "Xinitrc") file (depending on your window manager) and place ``` xbindkeys ``` before the line that starts your window manager or DE. ## Simulating multimedia keys The XF86Audio* and other multimedia keys [[2]](http://wiki.linuxquestions.org/wiki/XF86_keyboard_symbols) 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 "pactl set-sink-volume 0 -1000" m:0x50 + c:20 Mod2+Mod4 + minus ``` However, to actually call the keys themselves you can use tools like [xdotool](https://www.archlinux.org/packages/?name=xdotool) (from [official repositories](/index.php/Official_repositories "Official repositories")) and [xmacro](https://aur.archlinux.org/packages/xmacro/) (from the [AUR](/index.php/AUR "AUR")). Unfortunately since you would already be holding down some modifier key (Super or Shift, for example), X will see the result as `Super-XF86AudioLowerVolume` which will not do anything useful. Here is a script based on *xmacro* and *xmodmap* from the [xorg-xmodmap](https://www.archlinux.org/packages/?name=xorg-xmodmap) package for doing this[[3]](https://bbs.archlinux.org/viewtopic.php?pid=843395). ``` #!/bin/sh echo 'KeyStrRelease Super_L KeyStrRelease minus' ``` This works for calling XF86AudioLowerVolume once (assuming you are using `Super+minus`), but repeatedly calling it without releasing the Super key (like tapping on a volume button) does not work. If you would 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). ## Troubleshooting If, for any reason, a hotkey you *already* set in `~/.xbindkeysrc` does not work, open up a terminal and type the following: ``` $ xbindkeys -n ``` By pressing the non-working key, you will be able to see any error *xbindkeys* encounter (e.g: mistyped command/keycode,...). If the command for a keybind works via the xdotool in command line, but not when activated by the hotkey try adding "+ Release" to the hotkey (Esp notable on gnome): ``` "xdotool key --clearmodifiers XF86AudioPlay" Mod2 + F7 + Release ``` This will make the F7 key play/pause audio. Where the "xdotool" command would work in commandline, if the "+ Release" is removed it will fail with xbindkeys.