What is the function of the modifier keys in xmodmap?

When I run xmodmap, I get something like this

shift       shift_l (0x32),  shift_r (0x3e)
lock      
control     control_l (0x25),  control_l (0x42),  control_r (0x69)
mod1        alt_l (0x40),  alt_r (0x6c),  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)

I get the shift and control groups. But what are the other mod1, mod2, mod3, mod4 for?

It seems that you can only use two modifiers as follows anyway:

keysym <keysymname> = <key> <shift+key> <mode_switch+key> <mode_switch+shift+key>

Why can't I set something to <mod4+key>?


Solution 1:

X11 provides 8 modifiers to any keypress. You seem to have a fairly conventional set, where shift, control and lock have the obvious mappings.

mod1 usually represents Meta or Alt, and mod2 to mod5 are available for whatever other modifier keys your keyboard has, often labelled Super or Hyper. Usually these are not used for entering characters, but are interpreted by applications - for instance, in Emacs, I make Super+TAB equivalent to Meta+TAB:

(define-key function-key-map (read-kbd-macro "s-<tab>") (read-kbd-macro "ESC TAB"))

If you want your keyboard to generate characters using these modifiers, then xmodmap is not really capable enough, and you'll want to look into setxkbmap instead. That's a topic that's too big for this answer, though.