Swap alt and super

If you're wanting to do this on an Apple keyboard, try this out:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

To get this to work for a lower version of Linux you can try this out: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


If you only want to swap left alt and super key execute the command in your terminal:

setxkbmap -option altwin:swap_alt_win

To restore the default behavior just use:

setxkbmap -option

Note: This is temporary. If you want the effects permanently add it to your startup file.


One way to achieve that is via xmodmap. You can run xev to get key events. On running xev a box should appear and you can focus it and press the keys you want to swap. It should output details similar to for the Alt key:

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

I'm on a PC, and don't have a "Command Key", but have the equivalent "Windows Key", and xev gives:

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Because xmodmap has no idea of state, and can easily break key mappings, I suggest you do a:

xmodmap -pke > defaults

Then we create a xmodmap file:

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

Note how I'm using the keycodes that xev returned. Also here I'm only replacing the left super and alt keys (and leaving the right ones to their old behavior). Then we can simply run xmodmap, to set these keys:

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

You can run without the -v (verbose) switch for silent running, but I find it useful if you made mistakes in your modmap file. If things go messy then just reapply your defaults:

xmodmap defaults

Modmap is often ran at start up of X, so you can have these applied as defaults if you put your modmap commands in ~/.xmodmaprc.