xmodmap: different keys have different keycode semantics?

Nikolaus Rath Nikolaus at rath.org
Thu Feb 12 10:51:46 PST 2009

Marius Gedminas <marius at gedmin.as> writes:
> On Wed, Feb 11, 2009 at 04:19:57PM -0500, Nikolaus Rath wrote:
>> I noticed a very strange thing about xmodmap. Apparently, the
>> semantics of the
>>   keycode <nr> = <keysyms>
>> command depend on the keycode.
> Yes.
> You may find reading about XKB enlightening: http://pascal.tsu.ru/en/xkb/
> or http://www.charvolant.org/~doug/xkb/
> Specifically, the type assigned to a keycode determines how the various
> shift keys select a level.

Thanks a lot. It seems that the use of xmodmap is actually deprecated,
is it?

After reading the website, I was able to translate most of my xmodmap
rules into a new xkb symbol file. However, I am facing problems in
setting up the modifiers.

I am setting them up as follows:

| partial
| default
| alphanumeric_keys
| xkb_symbols "niko" {
|     // Meta
|     key <RALT> {
|       type[Group1]="ONE_LEVEL",
|       symbols[Group1] = [ Meta_R ]
|     };
|     key <LALT> {
|       type[Group1]="ONE_LEVEL",
|       symbols[Group1] = [ Alt_L ]
|     };
|     modifier_map Mod1   { <LALT> };
|     modifier_map Mod3   { <RALT> };
|     // Clean up
|     modifier_map Lock   { Caps_Lock };
| };

(note that <CAPS> is actually bound to Control_L). Unfortunately, the
result looks like this:

| nokile:~$ xmodmap 
| xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):
| shift       Shift_L (0x32),  Shift_R (0x3e)
| lock        Control_L (0x42)
| control     Control_L (0x25),  Control_L (0x42)
| mod1        Alt_L (0x40),  Meta_R (0x71),  Meta_L (0x9c)
| mod2        Num_Lock (0x4d)
| mod3        Alt_L (0x40)
| mod4        Super_L (0x7f),  Hyper_L (0x80)
| mod5        Mode_switch (0x5d),  ISO_Level3_Shift (0x6d),  ISO_Level3_Shift (0x7c)

(and obviously this causes a lot of problems). What 
what I would like to have is *no* key bound to the lock modifier ,
*only* the Alt_L key bound to mod1 and only the Meta_R key bound to

How can I accomplish that? Is there some way to clean up the modifier
table (like with xmodmap)? And why isn't the above file working as I
expect? (The file is actually read in, because with xev I can see that the
keysym of <RALT> changes to Meta_R as desired).



 »Time flies like an arrow, fruit flies like a Banana.«

  PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C

More information about the xorg mailing list