9

I'm trying to remap my right alt to behave like my right ctrl so I can use my right thumb to press the ctrl button. This is Ubuntu 12.04.

I've created the file .Xmodmap in my home folder with the following content:

clear control
clear mod1
!keycode 64 = Alt_L Meta_L
keycode 108 = Alt_R Meta_R
add control = Control_L Control_R Alt_R
add mod1 = Alt_L Meta_L

As you might guess, my left alt key has keycode 64 and my left alt key has keycode 108.

This actually works in the sense that my right alt key behaves as if I press the ctrl key.

However my left alt key now doesn't do anything anymore, which means I don't have an alt key left. This is strange given that xmodmap gives the following output:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69),  Alt_R (0x6c)
mod1        Alt_L (0x40),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

The strange thing is that when I remove the Alt_R mapping onto control, the alt keys work.

(ie., change the second to last line to:)

add control = Control_L Control_R

Now even my right alt behaves as an alt key which confuses me. After removing the Alt_R mapping from the control line the output of xmodmap gives:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Hope you guys can help.

ps. I used this website as a source.

4 Answers 4

7

You should be able to simply use Keyboard Layout >> Options >> Ctrl key position >> Right Alt as Right Ctrl, but this doesn't work. This has already been filed against Debian as Bug#663218

  1. Start fresh by deleting ~/.Xmodmap.

  2. Note that you do not need to clear Control and Mod1. This makes it easier to change only what you want. Your ~/.Xmodmap shoud be:

    !Swap right control and right alt
    remove Control = Control_R
    remove Mod1 = Alt_R
    keycode 105 = Alt_R
    keycode 108 = Control_R
    add Control = Control_R
    add Mod1 = Alt_R
    
0
2

If you are one of the unfortunate people like me that could not get xmodmap to switch right Alt with right Ctrl, then maybe this will help.

If you press right Alt and e and you get é then this solution is for you (needs improvement).

Run this in the terminal (check your keycodes with xev):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

then put this code in your .Xmodmap:

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

This code sets your Alt_Gr key to Alt_R, and then it swaps Alt_r with Ctrl_R.

If you want this to remain after you logout, put the following commands in any of your startup shell files, for example ~/.profile:

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

sources: question1 question2

2

On Ubuntu 19.04, To make the mapping system-wide, you should change two files:

  • /usr/share/X11/xkb/symbols/altwin
  • /usr/share/X11/xkb/symbols/pc

Add the following section to the former one:

// Ctrl is mapped to the Alt.
partial modifier_keys
xkb_symbols "right_alt" {
    key <LALT> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Control_R, Control_R ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
    modifier_map Control { <LCTL>, <RALT> };
};

And substitute include "altwin(meta_alt)" to the include "altwin(right_alt)" in the latter.

1
  • This answers the question and works. But the accepted answer swaps the right alt and right ctrl. This is not was was originally asked, but I think it's a solution many are looking for (having two controls on the right isn't so handy). Would you mind adding how to map right control to right alt?
    – Tedward
    Nov 3, 2019 at 1:42
0

I've found a much simpler way.

Add that command to autostart or .xinitrc: setxkbmap -option ctrl:ralt_rctrl

It forces right alt to behave like right control. I also recommend to check out other setxkbmap options, there are some useful ones.

2
  • Any chance you can expand on how you have this set up? I'm having trouble getting it working Jun 1, 2021 at 16:34
  • 1
    I think this doesn't work because ctrl:ralt_rctrl isn't on the list. ctrl:rctrl_ralt exists. Apr 9, 2022 at 6:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .