There seem to be several options for setxkbmap
such as -option caps:backspace
which makes caps a backspace. However I cannot seem to find an option that makes backspace an escape key. How do I create a single setxkbmap command that changes the backspace key to an escape key?

- 76,765

- 591
1 Answers
You'll have to define a new option.
First, make a new symbol file e.g. /usr/share/X11/xkb/symbols/bksp
with the following content:
partial alphanumeric_keys
xkb_symbols "bksp_escape" {
key <BKSP> { [ Escape ] };
};
Then create the new option like this:
bksp:bksp_escape = +bksp(bksp_escape)
(where bksp
is the name of the symbol file and bksp_escape
is the group name that was defined in this file) and add it to the options list in the rules set you're using - assuming evdev
- so place it in /usr/share/X11/xkb/rules/evdev
under ! option = symbols
:
! option = symbols
bksp:bksp_escape = +bksp(bksp_escape)
...........
grp:shift_toggle = +group(shifts_toggle)
altwin:menu = +altwin(menu)
Add it also to /usr/share/X11/xkb/rules/evdev.lst
(with a short description) under ! option
(e.g. right before ctrl
):
! option
........
bksp Backspace key behavior
bksp:bksp_escape Backspace as Escape
ctrl Ctrl key position
ctrl:nocaps Caps Lock as Ctrl
You can then run, as a regular user:
setxkbmap -layout us -option bksp:bksp_escape
to enable the option and make BKSP behave as ESC.
You can also verify if:
setxkbmap -query
reports:
rules: evdev
model: pc104
layout: us
options: bksp:bksp_escape
and if
setxkbmap -print
outputs:
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)+bksp(bksp_escape)" };
xkb_geometry { include "pc(pc104)" };
};
In Gnome 3 you can make the option permanent via dconf
(or gsettings
in terminal) e.g. add 'bksp:bksp_escape'
to the org>gnome>desktop>input-sources>xkb-options key (note that in dconf
values are separated by comma+space).
Finally, note that both evdev
and evdev.lst
will be overwritten on future upgrades (but not your custom bksp
symbol file) so you'll have to edit them again each time the package that owns them is upgraded (on archlinux it's xkeyboard-config
). It's easier to write a script that does that, e.g.
sed '/! option[[:blank:]]*=[[:blank:]]*symbols/a\
bksp:bksp_escape = +bksp(bksp_escape)
' /usr/share/X11/xkb/rules/evdev
sed '/! option/a\
bksp Backspace key behavior\
bksp:bksp_escape Backspace as Escape
' /usr/share/X11/xkb/rules/evdev.lst
If you're happy with the result use sed -i
(or -i.bak
if you want to make backup copies) to actually edit those files in-place.

- 82,805