@Daniel's answer pointed me the right way, but I would like to extend on it.
Works for me on Linux Mint 17.2 and Ubuntu 16.04.
I tried all twists I could think of to keep using xmodmap
, but they all fail when the system goes into sleep mode. The same even holds for start up-applicication scripts that use setxkbmap
in cases where the *settings-daemon (for me it is xfce4) runs later than the script --- and order cannot really be influenced.
What I finally came up with has the following ingredients:
1) Write a minimal keyboard mapping file for /usr/share/X11/xkb/symbols
. Lets call the file mylayout
It can be as simple as
xkb_symbols "basic" {
name[Group1] = "My Layout";
include "us"
key <AE03> { [ 3, numbersign, sterling, sterling] };
include "level3(ralt_switch)"
}
basic
is just a name, we'll meet it later again.
- The
name[Group1]
similarly is just a name it seems, but it will play no role later.
include "us"
includes the plain us keyboard. Actually us
is another file in the same directory. This is the keyboard layout we are adapting. Choose a different one as needed. Note: no semicolon to end this line.
- The
key
line is one adaptation of the keyboard, more can follow. The <AE03>
can be found in the files under /usr/share/X11/xkb/keycodes
. Use the xev
program to figure out that the "3"-key has keycode 12 and in the keycodes file Xfree86
it is mapped to <AE03>
.
- Finally another
include
directive to activate another keyboard option, in this case I want to have the right Alt-key to be the level-3 shift key, i.e. the key which gives access to the sterling
sign I defined above. level3
is just a file name in the same folder with ralt_switch
one section of it. Have a look around and choose what you need to include.
2) I did not put the mylayout
into the system folder. Rather I made only a soft link from the system folder to a folder of my liking to immediately see that this is not stock software.
3) Further I did not fix up evdev.xml
, again to prevent update hassles. But this would be necessary to find mylayout in the keyboard configuration editor (for xfce4 it is xfce4-keyboard-settings
). Instead I used xfce4-settings-editor
and changed keyboard-layout->XkbLayout
to mylayout
(the file name) and XkbVariant
to basic
(see above). Afterwards, mylayout/basic
is displayed in the keyboard settings editor too. An entry in evdev.xml
seems to be only necessary to be able to select the layout.
This way, the keyboard settings now survive sleep mode and reboot.
More background can be found here: http://www.charvolant.org/~doug/xkb/html/node5.html .
Another approach to fixing the sleep mode problem (not tried myself), can be found here: https://www.vinc17.net/unix/xkb.en.html .
UPDATE: worked with Mint 18.3 the same moment I changed the settings in xfce4-settings-editor as described above.
UPDATE: With 18.04, gdm3 as the display manager and XFCE4 as the window manager, it looks as if ~/.Xmodmap is read again and the settings seem to survive a suspend. (I rarely use suspend and I am never sure which mode the laptop is in then really.)