Use setxkbmap to swap the Left Shift and Left Control describes how to swap some modifier keys with xkbcomp. However, I'd like to just add a custom setxkbmap option instead of using xkbcomp with a full layout definition. Similar to setxkbmap -option local:swap_lwin_lctrl
, I'd like to swap right win & right control without modifying existing files in /usr/share/X11/xkb (which would be overwritten on package upgrade).
Asked
Active
Viewed 4,430 times
5
1 Answers
4
I have the same issue. From the doc, one could guess that the correct syntax would be something like that :
$ setxkbmap -I$HOME/.config/xkb -option mine:accent
Note : ~
doesn't work with the -I
option
with
~/.config/xkb/symbols/azerty_altgr
partial default
xkb_symbols "accent" {
include "level3(ralt_switch)"
key <AE02> { [ NoSymbol, NoSymbol, eacute, NoSymbol ] };
key <AE07> { [ NoSymbol, NoSymbol, egrave, NoSymbol ] };
key <AE09> { [ NoSymbol, NoSymbol, asciicircum, NoSymbol ] };
key <AE10> { [ NoSymbol, NoSymbol, agrave, NoSymbol ] };
};
or whatever symbole file you have and
~/.config/xkb/rules/evdev
! option = symbols
mine:accent = +azerty_altgr(accent)
Unfortunately, it doesn't work.
The only solution I found is the following :
Use the same files described above. Set all native option using setxkbmap -option caps:swapescape,whatever
. Then :
$ setxkbmap -print > tempfile.txt
and edit tempfile.txt
in order to add your custom option in the xkb_symbols
line :
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+fr:2+inet(evdev)+capslock(swapescape)+azerty_altgr(accent)" };
xkb_geometry { include "pc(pc104)" };
};
and finaly :
xkbcomp -I$HOME/.config/xkb tempfile.txt $DISPLAY
It can be generalised for any number of options. This solution is deprecated according to Archlinux wiki.

Anthon
- 79,293
-
Great, thanks for this! I can confirm that it is still working as of 2018-01-25, and the archwiki warning has been updated to indicate that it might not be deprecated. – joelostblom Jan 25 '18 at 16:55