2025-07-18 22:31 CEST

View Issue Details Jump to Notes ]
IDProjectCategoryView StatusLast Update
0004584Spring engineLinuxpublic2014-10-11 21:17
Reporterberryfoo 
Assigned To 
PrioritynormalSeverityminorReproducibilityalways
StatusnewResolutionopen 
Product Version98.0 
Target VersionFixed in Version 
Summary0004584: Ctrl key mapped to CapsLock key doesn't work anymore
DescriptionI have my X11 keyboard setup slightly modified as this:

- CapsLock key acts as LeftCtrl key. xev shows this:

    keycode 66 (keysym 0xffe3, Control_L)


- LeftCtrl key acts as Super_L key (probably the keysym for the
  "Windows key", which I don't have on my 102 key keyboard). xev shows this:

    keycode 37 (keysym 0xffeb, Super_L)


In spring 0.96, the CapsLock key acting as Ctrl key worked just fine
(and the Ctrl key acting as Super_L/Windows key was ignored, as it
should be).

Starting with 0.98, (tried latest git version from 2014-10-11, too),
the CapsLock key is not accepted as Ctrl key anymore by the spring engine
(tried mods "Tech Annihilation 2.31.0/1" and "Balanced Annihilation 8.03").


See the following table for an overview which keys are recognized as Ctrl:


Table "Is key XYZ recognized as Ctrl key?"
------------------------------------------
NOTES: - Key names in table header denote *hardware* keys, i.e. what's
         printed on them, not the associated key symbol.

       - 96 = Spring version 0.96
         98 = Spring version 0.98 and above

       - kc = X11 keycode (layout independent), as shown by xev

       - ks = X11 keysym number, as shown by xev (in the table, the keysym
              name is listed in the line after each keysym number)



       \ Key | CapsLock+ CapsLock LeftCtrl RightCtrl
Layout \ | LeftCtrl
---------------+--------------------------------------------
default layout 96: no 96: yes 96: yes
                             98: no 98: yes 98: yes

                             kc 66 kc 37 kc 105
                             ks 0xffe5 ks 0xffe3 ks 0xffe4
                             Caps_Lock Control_L Control_R

------------------------------------------------------------

ctrl:nocaps 96: yes 96: yes 96: yes
(CapsLock acts 98: NO 98: yes 98: yes
as additional
Ctrl key) kc 66 kc 37 kc 105
                             ks 0xffe3 ks 0xffe3 ks 0xffe4
                             Control_L Control_L Control_R

------------------------------------------------------------

ctrl:nocaps+ 96: yes 96: yes 96: no 96: NO
compose:rctrl+ 98: yes 98: NO 98: no 98: yes
XKB keymap
(CapsLock acts kc 66 kc 37 kc 105
as additional ks 0xffe3 ks 0xffeb ks 0xff20
Ctrl key, left Control_L Super_L Multi_key
Ctrl key acts as
Super_L/Windows,
right Ctrl key
acts as both
right Ctrl key
and Compose key)


You can see in the last case, that spring 0.98+, although it
recognizes neither the hardware CapsLock key nor the hardware
Ctrl key alone as Ctrl key, it DOES recognize a Ctrl key event when
BOTH keys are pressed, which is weird, but might help narrowing
down the bug. It looks like it would recognize Ctrl key events
only if the X11 keycode for the left Ctrl key (37) AND the X11
keysym Control_L were present in the list of currently pressed keys.


Attached find (combined in ONE file, as I can only upload 1 file):

- /etc/default/keyboard (used for console and X11 keyboard layout in Debian)
- $HOME/.xkbmap (gets loaded in ~/.xinitrc / ~/.xsession using xkbcomp)



If you need any more information, please let me know.


Steps To Reproduce- Configure the X11 keyboard layout to be tested
  (Changes in /etc/default/keyboard need

    udevadm trigger --subsystem-match=input --action=change

  executed by root to be incorporated by X11/event driver)

- Select spring engine for testing in springlobby:
    Edit | Preferences | Left-click on engine | [OK]

- Start single-player game in springlobby with one NullAI bot.

- Try using Ctrl commands, like: left-click on commander, then
  press e.g. Ctrl-3 to assign it to group 3. If there is no
  white number "3" popping up next to the commander, the group
  assignment (and thus the recognition of the configured Ctrl
  key) failed.


Additional Information- OS: Debian testing (amd64)
- springlobby 201
- German 102 keys PS/2 keyboard (no Windows keys)
TagsNo tags attached.
Checked infolog.txt for Errors
Attached Files
  • ? file icon etc-default-keyboard---and---xkbmap (62,645 bytes) 2014-10-11 20:01 -
    
    
    
    
    
                               A T T E N T I O N
    
             This file contains *TWO* separate files which must be
             save separately!
    
    
    
    
    
    
    
    
    #*****************************************************************
    #   FILE /etc/default/keyboard
    #*****************************************************************
    
    # -*- mode: sh; -*-
    
    # If you change any of the following variables and HAL and X are
    # configured to use this file, then the changes will become visible to
    # X only if HAL is restarted.  In Debian you need to run
    # /etc/init.d/hal restart
    
    # Alternatively: udevadm trigger --subsystem-match=input --action=change
    
    # The following variables describe your keyboard and can have the same
    # values as the XkbModel, XkbLayout, XkbVariant and XkbOptions options
    # in /etc/X11/xorg.conf.
    
    XKBMODEL="pc105"
    XKBLAYOUT="de"
    XKBVARIANT="nodeadkeys"
    #XKBOPTIONS="lv3:ralt_switch,terminate:ctrl_alt_bksp"
    
    #OK (2014-10-11):
    XKBOPTIONS="ctrl:nocaps,compose:rctrl,lv3:ralt_switch"
    #XKBOPTIONS="ctrl:nocaps"
    #XKBOPTIONS=""
    
    
    # NOTES:
    #
    # ctrl:nocaps             - CapsLock is Ctrl
    # compose:rctrl           - Right Ctrl is Compose
    # lv3:ralt_switch         - AltGr is Right Alt (I think)
    # terminate:ctrl_alt_bksp - Key sequence to kill the X server
    
    
    # If you don't want to use the XKB layout on the console, you can
    # specify an alternative keymap.  Make sure it will be accessible
    # before /usr is mounted.
    # KMAP=/etc/console-setup/defkeymap.kmap.gz
    BACKSPACE="guess"
    
    
    
    #*****************************************************************
    #   FILE ~/.xkbmap (load it with: xkbcomp ~/.xkbmap "$DISPLAY")
    #*****************************************************************
    
    
    xkb_keymap {
    xkb_keycodes "evdev+aliases(qwertz)" {
        minimum = 8;
        maximum = 255;
         <ESC> = 9;
        <AE01> = 10;
        <AE02> = 11;
        <AE03> = 12;
        <AE04> = 13;
        <AE05> = 14;
        <AE06> = 15;
        <AE07> = 16;
        <AE08> = 17;
        <AE09> = 18;
        <AE10> = 19;
        <AE11> = 20;
        <AE12> = 21;
        <BKSP> = 22;
         <TAB> = 23;
        <AD01> = 24;
        <AD02> = 25;
        <AD03> = 26;
        <AD04> = 27;
        <AD05> = 28;
        <AD06> = 29;
        <AD07> = 30;
        <AD08> = 31;
        <AD09> = 32;
        <AD10> = 33;
        <AD11> = 34;
        <AD12> = 35;
        <RTRN> = 36;
        <LCTL> = 37;
        <AC01> = 38;
        <AC02> = 39;
        <AC03> = 40;
        <AC04> = 41;
        <AC05> = 42;
        <AC06> = 43;
        <AC07> = 44;
        <AC08> = 45;
        <AC09> = 46;
        <AC10> = 47;
        <AC11> = 48;
        <TLDE> = 49;
        <LFSH> = 50;
        <BKSL> = 51;
        <AB01> = 52;
        <AB02> = 53;
        <AB03> = 54;
        <AB04> = 55;
        <AB05> = 56;
        <AB06> = 57;
        <AB07> = 58;
        <AB08> = 59;
        <AB09> = 60;
        <AB10> = 61;
        <RTSH> = 62;
        <KPMU> = 63;
        <LALT> = 64;
        <SPCE> = 65;
        <CAPS> = 66;
        <FK01> = 67;
        <FK02> = 68;
        <FK03> = 69;
        <FK04> = 70;
        <FK05> = 71;
        <FK06> = 72;
        <FK07> = 73;
        <FK08> = 74;
        <FK09> = 75;
        <FK10> = 76;
        <NMLK> = 77;
        <SCLK> = 78;
         <KP7> = 79;
         <KP8> = 80;
         <KP9> = 81;
        <KPSU> = 82;
         <KP4> = 83;
         <KP5> = 84;
         <KP6> = 85;
        <KPAD> = 86;
         <KP1> = 87;
         <KP2> = 88;
         <KP3> = 89;
         <KP0> = 90;
        <KPDL> = 91;
        <LVL3> = 92;
        <LSGT> = 94;
        <FK11> = 95;
        <FK12> = 96;
        <AB11> = 97;
        <KATA> = 98;
        <HIRA> = 99;
        <HENK> = 100;
        <HKTG> = 101;
        <MUHE> = 102;
        <JPCM> = 103;
        <KPEN> = 104;
        <RCTL> = 105;
        <KPDV> = 106;
        <PRSC> = 107;
        <RALT> = 108;
        <LNFD> = 109;
        <HOME> = 110;
          <UP> = 111;
        <PGUP> = 112;
        <LEFT> = 113;
        <RGHT> = 114;
         <END> = 115;
        <DOWN> = 116;
        <PGDN> = 117;
         <INS> = 118;
        <DELE> = 119;
        <I120> = 120;
        <MUTE> = 121;
        <VOL-> = 122;
        <VOL+> = 123;
        <POWR> = 124;
        <KPEQ> = 125;
        <I126> = 126;
        <PAUS> = 127;
        <I128> = 128;
        <I129> = 129;
        <HNGL> = 130;
        <HJCV> = 131;
        <AE13> = 132;
        <LWIN> = 133;
        <RWIN> = 134;
        <COMP> = 135;
        <STOP> = 136;
        <AGAI> = 137;
        <PROP> = 138;
        <UNDO> = 139;
        <FRNT> = 140;
        <COPY> = 141;
        <OPEN> = 142;
        <PAST> = 143;
        <FIND> = 144;
         <CUT> = 145;
        <HELP> = 146;
        <I147> = 147;
        <I148> = 148;
        <I149> = 149;
        <I150> = 150;
        <I151> = 151;
        <I152> = 152;
        <I153> = 153;
        <I154> = 154;
        <I155> = 155;
        <I156> = 156;
        <I157> = 157;
        <I158> = 158;
        <I159> = 159;
        <I160> = 160;
        <I161> = 161;
        <I162> = 162;
        <I163> = 163;
        <I164> = 164;
        <I165> = 165;
        <I166> = 166;
        <I167> = 167;
        <I168> = 168;
        <I169> = 169;
        <I170> = 170;
        <I171> = 171;
        <I172> = 172;
        <I173> = 173;
        <I174> = 174;
        <I175> = 175;
        <I176> = 176;
        <I177> = 177;
        <I178> = 178;
        <I179> = 179;
        <I180> = 180;
        <I181> = 181;
        <I182> = 182;
        <I183> = 183;
        <I184> = 184;
        <I185> = 185;
        <I186> = 186;
        <I187> = 187;
        <I188> = 188;
        <I189> = 189;
        <I190> = 190;
        <FK13> = 191;
        <FK14> = 192;
        <FK15> = 193;
        <FK16> = 194;
        <FK17> = 195;
        <FK18> = 196;
        <FK19> = 197;
        <FK20> = 198;
        <FK21> = 199;
        <FK22> = 200;
        <FK23> = 201;
        <FK24> = 202;
        <MDSW> = 203;
         <ALT> = 204;
        <META> = 205;
        <SUPR> = 206;
        <HYPR> = 207;
        <I208> = 208;
        <I209> = 209;
        <I210> = 210;
        <I211> = 211;
        <I212> = 212;
        <I213> = 213;
        <I214> = 214;
        <I215> = 215;
        <I216> = 216;
        <I217> = 217;
        <I218> = 218;
        <I219> = 219;
        <I220> = 220;
        <I221> = 221;
        <I222> = 222;
        <I223> = 223;
        <I224> = 224;
        <I225> = 225;
        <I226> = 226;
        <I227> = 227;
        <I228> = 228;
        <I229> = 229;
        <I230> = 230;
        <I231> = 231;
        <I232> = 232;
        <I233> = 233;
        <I234> = 234;
        <I235> = 235;
        <I236> = 236;
        <I237> = 237;
        <I238> = 238;
        <I239> = 239;
        <I240> = 240;
        <I241> = 241;
        <I242> = 242;
        <I243> = 243;
        <I244> = 244;
        <I245> = 245;
        <I246> = 246;
        <I247> = 247;
        <I248> = 248;
        <I249> = 249;
        <I250> = 250;
        <I251> = 251;
        <I252> = 252;
        <I253> = 253;
        indicator 1 = "Caps Lock";
        indicator 2 = "Num Lock";
        indicator 3 = "Scroll Lock";
        indicator 4 = "Compose";
        indicator 5 = "Kana";
        indicator 6 = "Sleep";
        indicator 7 = "Suspend";
        indicator 8 = "Mute";
        indicator 9 = "Misc";
        indicator 10 = "Mail";
        indicator 11 = "Charging";
        virtual indicator 12 = "Shift Lock";
        virtual indicator 13 = "Group 2";
        virtual indicator 14 = "Mouse Keys";
        alias <AC12> = <BKSL>;
        alias <MENU> = <COMP>;
        alias <HZTG> = <TLDE>;
        alias <LMTA> = <LWIN>;
        alias <RMTA> = <RWIN>;
        alias <ALGR> = <RALT>;
        alias <KPPT> = <I129>;
        alias <LatQ> = <AD01>;
        alias <LatW> = <AD02>;
        alias <LatE> = <AD03>;
        alias <LatR> = <AD04>;
        alias <LatT> = <AD05>;
        alias <LatZ> = <AD06>;
        alias <LatU> = <AD07>;
        alias <LatI> = <AD08>;
        alias <LatO> = <AD09>;
        alias <LatP> = <AD10>;
        alias <LatA> = <AC01>;
        alias <LatS> = <AC02>;
        alias <LatD> = <AC03>;
        alias <LatF> = <AC04>;
        alias <LatG> = <AC05>;
        alias <LatH> = <AC06>;
        alias <LatJ> = <AC07>;
        alias <LatK> = <AC08>;
        alias <LatL> = <AC09>;
        alias <LatY> = <AB01>;
        alias <LatX> = <AB02>;
        alias <LatC> = <AB03>;
        alias <LatV> = <AB04>;
        alias <LatB> = <AB05>;
        alias <LatN> = <AB06>;
        alias <LatM> = <AB07>;
    };
    
    xkb_types "complete" {
    
        virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
    
        type "ONE_LEVEL" {
            modifiers= none;
            level_name[Level1]= "Any";
        };
        type "TWO_LEVEL" {
            modifiers= Shift;
            map[Shift]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
        };
        type "ALPHABETIC" {
            modifiers= Shift+Lock;
            map[Shift]= Level2;
            map[Lock]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "Caps";
        };
        type "KEYPAD" {
            modifiers= Shift+NumLock;
            map[Shift]= Level2;
            map[NumLock]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "Number";
        };
        type "SHIFT+ALT" {
            modifiers= Shift+Alt;
            map[Shift+Alt]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift+Alt";
        };
        type "PC_CONTROL_LEVEL2" {
            modifiers= Control;
            map[Control]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "Control";
        };
        type "PC_LCONTROL_LEVEL2" {
            modifiers= LControl;
            map[LControl]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "LControl";
        };
        type "PC_RCONTROL_LEVEL2" {
            modifiers= RControl;
            map[RControl]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "RControl";
        };
        type "PC_ALT_LEVEL2" {
            modifiers= Alt;
            map[Alt]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "Alt";
        };
        type "PC_LALT_LEVEL2" {
            modifiers= LAlt;
            map[LAlt]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "LAlt";
        };
        type "PC_RALT_LEVEL2" {
            modifiers= RAlt;
            map[RAlt]= Level2;
            level_name[Level1]= "Base";
            level_name[Level2]= "RAlt";
        };
        type "CTRL+ALT" {
            modifiers= Shift+Control+Alt+LevelThree;
            map[Shift]= Level2;
            preserve[Shift]= Shift;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            preserve[Shift+LevelThree]= Shift;
            map[Control+Alt]= Level5;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "Ctrl+Alt";
        };
        type "LOCAL_EIGHT_LEVEL" {
            modifiers= Shift+Lock+Control+LevelThree;
            map[Shift+Lock]= Level1;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[LevelThree]= Level3;
            map[Shift+Lock+LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Lock+LevelThree]= Level4;
            map[Control]= Level5;
            map[Shift+Lock+Control]= Level5;
            map[Shift+Control]= Level6;
            map[Lock+Control]= Level6;
            map[Control+LevelThree]= Level7;
            map[Shift+Lock+Control+LevelThree]= Level7;
            map[Shift+Control+LevelThree]= Level8;
            map[Lock+Control+LevelThree]= Level8;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Level3";
            level_name[Level4]= "Shift Level3";
            level_name[Level5]= "Ctrl";
            level_name[Level6]= "Shift Ctrl";
            level_name[Level7]= "Level3 Ctrl";
            level_name[Level8]= "Shift Level3 Ctrl";
        };
        type "THREE_LEVEL" {
            modifiers= Shift+LevelThree;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level3;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Level3";
        };
        type "EIGHT_LEVEL" {
            modifiers= Shift+LevelThree+LevelFive;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[LevelFive]= Level5;
            map[Shift+LevelFive]= Level6;
            map[LevelThree+LevelFive]= Level7;
            map[Shift+LevelThree+LevelFive]= Level8;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "X";
            level_name[Level6]= "X Shift";
            level_name[Level7]= "X Alt Base";
            level_name[Level8]= "X Shift Alt";
        };
        type "EIGHT_LEVEL_ALPHABETIC" {
            modifiers= Shift+Lock+LevelThree+LevelFive;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Lock+LevelThree]= Level4;
            map[Shift+Lock+LevelThree]= Level3;
            map[LevelFive]= Level5;
            map[Shift+LevelFive]= Level6;
            map[Lock+LevelFive]= Level6;
            map[LevelThree+LevelFive]= Level7;
            map[Shift+LevelThree+LevelFive]= Level8;
            map[Lock+LevelThree+LevelFive]= Level8;
            map[Shift+Lock+LevelThree+LevelFive]= Level7;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "X";
            level_name[Level6]= "X Shift";
            level_name[Level7]= "X Alt Base";
            level_name[Level8]= "X Shift Alt";
        };
        type "EIGHT_LEVEL_SEMIALPHABETIC" {
            modifiers= Shift+Lock+LevelThree+LevelFive;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Lock+LevelThree]= Level3;
            preserve[Lock+LevelThree]= Lock;
            map[Shift+Lock+LevelThree]= Level4;
            preserve[Shift+Lock+LevelThree]= Lock;
            map[LevelFive]= Level5;
            map[Shift+LevelFive]= Level6;
            map[Lock+LevelFive]= Level6;
            preserve[Lock+LevelFive]= Lock;
            map[LevelThree+LevelFive]= Level7;
            map[Shift+LevelThree+LevelFive]= Level8;
            map[Lock+LevelThree+LevelFive]= Level7;
            preserve[Lock+LevelThree+LevelFive]= Lock;
            map[Shift+Lock+LevelThree+LevelFive]= Level8;
            preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
            map[Shift+Lock+LevelFive]= Level1;
            preserve[Shift+Lock+LevelFive]= Lock;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "X";
            level_name[Level6]= "X Shift";
            level_name[Level7]= "X Alt Base";
            level_name[Level8]= "X Shift Alt";
        };
        type "FOUR_LEVEL" {
            modifiers= Shift+LevelThree;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
        };
        type "FOUR_LEVEL_ALPHABETIC" {
            modifiers= Shift+Lock+LevelThree;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Lock+LevelThree]= Level4;
            map[Shift+Lock+LevelThree]= Level3;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
        };
        type "FOUR_LEVEL_SEMIALPHABETIC" {
            modifiers= Shift+Lock+LevelThree;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Lock+LevelThree]= Level3;
            preserve[Lock+LevelThree]= Lock;
            map[Shift+Lock+LevelThree]= Level4;
            preserve[Shift+Lock+LevelThree]= Lock;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
        };
        type "FOUR_LEVEL_MIXED_KEYPAD" {
            modifiers= Shift+NumLock+LevelThree;
            map[Shift+NumLock]= Level1;
            map[NumLock]= Level2;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[NumLock+LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Shift+NumLock+LevelThree]= Level4;
            level_name[Level1]= "Base";
            level_name[Level2]= "Number";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
        };
        type "FOUR_LEVEL_X" {
            modifiers= Shift+Control+Alt+LevelThree;
            map[LevelThree]= Level2;
            map[Shift+LevelThree]= Level3;
            map[Control+Alt]= Level4;
            level_name[Level1]= "Base";
            level_name[Level2]= "Alt Base";
            level_name[Level3]= "Shift Alt";
            level_name[Level4]= "Ctrl+Alt";
        };
        type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
            modifiers= Shift+Lock+LevelThree;
            map[Shift]= Level2;
            map[Lock]= Level4;
            preserve[Lock]= Lock;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Lock+LevelThree]= Level3;
            preserve[Lock+LevelThree]= Lock;
            map[Shift+Lock+LevelThree]= Level3;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "AltGr Base";
            level_name[Level4]= "Shift AltGr";
        };
        type "FOUR_LEVEL_PLUS_LOCK" {
            modifiers= Shift+Lock+LevelThree;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Lock]= Level5;
            map[Shift+Lock]= Level2;
            map[Lock+LevelThree]= Level3;
            map[Shift+Lock+LevelThree]= Level4;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "Lock";
        };
        type "FOUR_LEVEL_KEYPAD" {
            modifiers= Shift+NumLock+LevelThree;
            map[Shift]= Level2;
            map[NumLock]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[NumLock+LevelThree]= Level4;
            map[Shift+NumLock+LevelThree]= Level3;
            level_name[Level1]= "Base";
            level_name[Level2]= "Number";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Alt Number";
        };
    };
    
    xkb_compatibility "complete" {
    
        virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
    
        interpret.useModMapMods= AnyLevel;
        interpret.repeat= False;
        interpret.locking= False;
        interpret ISO_Level2_Latch+Exactly(Shift) {
            useModMapMods=level1;
            action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
        };
        interpret Shift_Lock+AnyOf(Shift+Lock) {
            action= LockMods(modifiers=Shift);
        };
        interpret Num_Lock+AnyOf(all) {
            virtualModifier= NumLock;
            action= LockMods(modifiers=NumLock);
        };
        interpret ISO_Lock+AnyOf(all) {
            action= ISOLock(modifiers=modMapMods,affect=all);
        };
        interpret ISO_Level3_Shift+AnyOf(all) {
            virtualModifier= LevelThree;
            useModMapMods=level1;
            action= SetMods(modifiers=LevelThree,clearLocks);
        };
        interpret ISO_Level3_Latch+AnyOf(all) {
            virtualModifier= LevelThree;
            useModMapMods=level1;
            action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
        };
        interpret ISO_Level3_Lock+AnyOf(all) {
            virtualModifier= LevelThree;
            useModMapMods=level1;
            action= LockMods(modifiers=LevelThree);
        };
        interpret Alt_L+AnyOf(all) {
            virtualModifier= Alt;
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
        interpret Alt_R+AnyOf(all) {
            virtualModifier= Alt;
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
        interpret Meta_L+AnyOf(all) {
            virtualModifier= Meta;
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
        interpret Meta_R+AnyOf(all) {
            virtualModifier= Meta;
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
    
    //    interpret Super_L+AnyOf(all) {
    //        virtualModifier= Super;
    //        action= SetMods(modifiers=modMapMods,clearLocks);
    //    };
    
        interpret Super_R+AnyOf(all) {
            virtualModifier= Super;
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
        interpret Hyper_L+AnyOf(all) {
            virtualModifier= Hyper;
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
        interpret Hyper_R+AnyOf(all) {
            virtualModifier= Hyper;
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
        interpret Scroll_Lock+AnyOf(all) {
            virtualModifier= ScrollLock;
            action= LockMods(modifiers=modMapMods);
        };
        interpret ISO_Level5_Shift+AnyOf(all) {
            virtualModifier= LevelFive;
            useModMapMods=level1;
            action= SetMods(modifiers=LevelFive,clearLocks);
        };
        interpret ISO_Level5_Latch+AnyOf(all) {
            virtualModifier= LevelFive;
            action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
        };
        interpret ISO_Level5_Lock+AnyOf(all) {
            virtualModifier= LevelFive;
            action= LockMods(modifiers=LevelFive);
        };
        interpret Mode_switch+AnyOfOrNone(all) {
            virtualModifier= AltGr;
            useModMapMods=level1;
            action= SetGroup(group=+1);
        };
        interpret ISO_Level3_Shift+AnyOfOrNone(all) {
            action= SetMods(modifiers=LevelThree,clearLocks);
        };
        interpret ISO_Level3_Latch+AnyOfOrNone(all) {
            action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
        };
        interpret ISO_Level3_Lock+AnyOfOrNone(all) {
            action= LockMods(modifiers=LevelThree);
        };
        interpret ISO_Group_Latch+AnyOfOrNone(all) {
            virtualModifier= AltGr;
            useModMapMods=level1;
            action= LatchGroup(group=2);
        };
        interpret ISO_Next_Group+AnyOfOrNone(all) {
            virtualModifier= AltGr;
            useModMapMods=level1;
            action= LockGroup(group=+1);
        };
        interpret ISO_Prev_Group+AnyOfOrNone(all) {
            virtualModifier= AltGr;
            useModMapMods=level1;
            action= LockGroup(group=-1);
        };
        interpret ISO_First_Group+AnyOfOrNone(all) {
            action= LockGroup(group=1);
        };
        interpret ISO_Last_Group+AnyOfOrNone(all) {
            action= LockGroup(group=2);
        };
        interpret KP_1+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=+1);
        };
        interpret KP_End+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=+1);
        };
        interpret KP_2+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+0,y=+1);
        };
        interpret KP_Down+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+0,y=+1);
        };
        interpret KP_3+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=+1);
        };
        interpret KP_Next+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=+1);
        };
        interpret KP_4+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=+0);
        };
        interpret KP_Left+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=+0);
        };
        interpret KP_6+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=+0);
        };
        interpret KP_Right+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=+0);
        };
        interpret KP_7+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=-1);
        };
        interpret KP_Home+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=-1);
        };
        interpret KP_8+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+0,y=-1);
        };
        interpret KP_Up+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+0,y=-1);
        };
        interpret KP_9+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=-1);
        };
        interpret KP_Prior+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=-1);
        };
        interpret KP_5+AnyOfOrNone(all) {
            repeat= True;
            action= PtrBtn(button=default);
        };
        interpret KP_Begin+AnyOfOrNone(all) {
            repeat= True;
            action= PtrBtn(button=default);
        };
        interpret KP_F2+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=1);
        };
        interpret KP_Divide+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=1);
        };
        interpret KP_F3+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=2);
        };
        interpret KP_Multiply+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=2);
        };
        interpret KP_F4+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=3);
        };
        interpret KP_Subtract+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=3);
        };
        interpret KP_Separator+AnyOfOrNone(all) {
            repeat= True;
            action= PtrBtn(button=default,count=2);
        };
        interpret KP_Add+AnyOfOrNone(all) {
            repeat= True;
            action= PtrBtn(button=default,count=2);
        };
        interpret KP_0+AnyOfOrNone(all) {
            repeat= True;
            action= LockPtrBtn(button=default,affect=lock);
        };
        interpret KP_Insert+AnyOfOrNone(all) {
            repeat= True;
            action= LockPtrBtn(button=default,affect=lock);
        };
        interpret KP_Decimal+AnyOfOrNone(all) {
            repeat= True;
            action= LockPtrBtn(button=default,affect=unlock);
        };
        interpret KP_Delete+AnyOfOrNone(all) {
            repeat= True;
            action= LockPtrBtn(button=default,affect=unlock);
        };
        interpret F25+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=1);
        };
        interpret F26+AnyOfOrNone(all) {
            repeat= True;
            action= SetPtrDflt(affect=button,button=2);
        };
        interpret F27+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=-1);
        };
        interpret F29+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=-1);
        };
        interpret F31+AnyOfOrNone(all) {
            repeat= True;
            action= PtrBtn(button=default);
        };
        interpret F33+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=-1,y=+1);
        };
        interpret F35+AnyOfOrNone(all) {
            repeat= True;
            action= MovePtr(x=+1,y=+1);
        };
        interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
            action= PtrBtn(button=default);
        };
        interpret Pointer_Button1+AnyOfOrNone(all) {
            action= PtrBtn(button=1);
        };
        interpret Pointer_Button2+AnyOfOrNone(all) {
            action= PtrBtn(button=2);
        };
        interpret Pointer_Button3+AnyOfOrNone(all) {
            action= PtrBtn(button=3);
        };
        interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
            action= PtrBtn(button=default,count=2);
        };
        interpret Pointer_DblClick1+AnyOfOrNone(all) {
            action= PtrBtn(button=1,count=2);
        };
        interpret Pointer_DblClick2+AnyOfOrNone(all) {
            action= PtrBtn(button=2,count=2);
        };
        interpret Pointer_DblClick3+AnyOfOrNone(all) {
            action= PtrBtn(button=3,count=2);
        };
        interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
            action= LockPtrBtn(button=default,affect=both);
        };
        interpret Pointer_Drag1+AnyOfOrNone(all) {
            action= LockPtrBtn(button=1,affect=both);
        };
        interpret Pointer_Drag2+AnyOfOrNone(all) {
            action= LockPtrBtn(button=2,affect=both);
        };
        interpret Pointer_Drag3+AnyOfOrNone(all) {
            action= LockPtrBtn(button=3,affect=both);
        };
        interpret Pointer_EnableKeys+AnyOfOrNone(all) {
            action= LockControls(controls=MouseKeys);
        };
        interpret Pointer_Accelerate+AnyOfOrNone(all) {
            action= LockControls(controls=MouseKeysAccel);
        };
        interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
            action= SetPtrDflt(affect=button,button=+1);
        };
        interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
            action= SetPtrDflt(affect=button,button=-1);
        };
        interpret AccessX_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=AccessXKeys);
        };
        interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=AccessXFeedback);
        };
        interpret RepeatKeys_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=RepeatKeys);
        };
        interpret SlowKeys_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=SlowKeys);
        };
        interpret BounceKeys_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=BounceKeys);
        };
        interpret StickyKeys_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=StickyKeys);
        };
        interpret MouseKeys_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=MouseKeys);
        };
        interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=MouseKeysAccel);
        };
        interpret Overlay1_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=Overlay1);
        };
        interpret Overlay2_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=Overlay2);
        };
        interpret AudibleBell_Enable+AnyOfOrNone(all) {
            action= LockControls(controls=AudibleBell);
        };
        interpret Terminate_Server+AnyOfOrNone(all) {
            action= Terminate();
        };
        interpret Alt_L+AnyOfOrNone(all) {
            action= SetMods(modifiers=Alt,clearLocks);
        };
        interpret Alt_R+AnyOfOrNone(all) {
            action= SetMods(modifiers=Alt,clearLocks);
        };
        interpret Meta_L+AnyOfOrNone(all) {
            action= SetMods(modifiers=Meta,clearLocks);
        };
        interpret Meta_R+AnyOfOrNone(all) {
            action= SetMods(modifiers=Meta,clearLocks);
        };
    
        interpret Super_L+AnyOfOrNone(all) {
            action= SetMods(modifiers=mod4);
        };
    
    //    interpret Super_L+AnyOfOrNone(all) {
    //        action= SetMods(modifiers=Super,clearLocks);
    //    };
    
        interpret Super_R+AnyOfOrNone(all) {
            action= SetMods(modifiers=Super,clearLocks);
        };
        interpret Hyper_L+AnyOfOrNone(all) {
            action= SetMods(modifiers=Hyper,clearLocks);
        };
        interpret Hyper_R+AnyOfOrNone(all) {
            action= SetMods(modifiers=Hyper,clearLocks);
        };
        interpret Shift_L+AnyOfOrNone(all) {
            action= SetMods(modifiers=Shift,clearLocks);
        };
        interpret XF86Switch_VT_1+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=1,!same);
        };
        interpret XF86Switch_VT_2+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=2,!same);
        };
        interpret XF86Switch_VT_3+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=3,!same);
        };
        interpret XF86Switch_VT_4+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=4,!same);
        };
        interpret XF86Switch_VT_5+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=5,!same);
        };
        interpret XF86Switch_VT_6+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=6,!same);
        };
        interpret XF86Switch_VT_7+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=7,!same);
        };
        interpret XF86Switch_VT_8+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=8,!same);
        };
        interpret XF86Switch_VT_9+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=9,!same);
        };
        interpret XF86Switch_VT_10+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=10,!same);
        };
        interpret XF86Switch_VT_11+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=11,!same);
        };
        interpret XF86Switch_VT_12+AnyOfOrNone(all) {
            repeat= True;
            action= SwitchScreen(screen=12,!same);
        };
        interpret XF86LogGrabInfo+AnyOfOrNone(all) {
            repeat= True;
            action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
        };
        interpret XF86LogWindowTree+AnyOfOrNone(all) {
            repeat= True;
            action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
        };
        interpret XF86Next_VMode+AnyOfOrNone(all) {
            repeat= True;
            action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
        };
        interpret XF86Prev_VMode+AnyOfOrNone(all) {
            repeat= True;
            action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
        };
        interpret ISO_Level5_Shift+AnyOfOrNone(all) {
            action= SetMods(modifiers=LevelFive,clearLocks);
        };
        interpret ISO_Level5_Latch+AnyOfOrNone(all) {
            action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
        };
        interpret ISO_Level5_Lock+AnyOfOrNone(all) {
            action= LockMods(modifiers=LevelFive);
        };
        interpret Caps_Lock+AnyOfOrNone(all) {
            action= LockMods(modifiers=Lock);
        };
        interpret Any+Exactly(Lock) {
            action= LockMods(modifiers=Lock);
        };
        interpret Any+AnyOf(all) {
            action= SetMods(modifiers=modMapMods,clearLocks);
        };
        group 2 = AltGr;
        group 3 = AltGr;
        group 4 = AltGr;
        indicator "Caps Lock" {
            !allowExplicit;
            whichModState= locked;
            modifiers= Lock;
        };
        indicator "Num Lock" {
            !allowExplicit;
            whichModState= locked;
            modifiers= NumLock;
        };
        indicator "Scroll Lock" {
            whichModState= locked;
            modifiers= ScrollLock;
        };
        indicator "Shift Lock" {
            !allowExplicit;
            whichModState= locked;
            modifiers= Shift;
        };
        indicator "Group 2" {
            !allowExplicit;
            groups= 0xfe;
        };
        indicator "Mouse Keys" {
            indicatorDrivesKeyboard;
            controls= mouseKeys;
        };
    };
    
    xkb_symbols "pc+de(nodeadkeys)+inet(evdev)+level3(ralt_switch)+ctrl(nocaps)+compose(rctrl)" {
    
        name[group1]="German (eliminate dead keys)";
    
        key  <ESC> {         [          Escape ] };
        key <AE01> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               1,          exclam,     onesuperior,      exclamdown ]
        };
        key <AE02> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               2,        quotedbl,     twosuperior,       oneeighth ]
        };
        key <AE03> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               3,         section,   threesuperior,        sterling ]
        };
        key <AE04> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               4,          dollar,      onequarter,        currency ]
        };
        key <AE05> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               5,         percent,         onehalf,    threeeighths ]
        };
        key <AE06> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               6,       ampersand,         notsign,     fiveeighths ]
        };
        key <AE07> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               7,           slash,       braceleft,    seveneighths ]
        };
        key <AE08> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               8,       parenleft,     bracketleft,       trademark ]
        };
        key <AE09> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               9,      parenright,    bracketright,       plusminus ]
        };
        key <AE10> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [               0,           equal,      braceright,          degree ]
        };
        key <AE11> {
            type= "FOUR_LEVEL_PLUS_LOCK",
            symbols[Group1]= [          ssharp,        question,       backslash,    questiondown,           U1E9E ]
        };
        key <AE12> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [           acute,           grave,         cedilla,         cedilla ]
        };
        key <BKSP> {         [       BackSpace,       BackSpace ] };
        key  <TAB> {         [             Tab,    ISO_Left_Tab ] };
        key <AD01> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               q,               Q,              at,     Greek_OMEGA ]
        };
        key <AD02> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               w,               W,         lstroke,         Lstroke ]
        };
        key <AD03> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               e,               E,        EuroSign,        EuroSign ]
        };
        key <AD04> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               r,               R,       paragraph,      registered ]
        };
        key <AD05> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               t,               T,          tslash,          Tslash ]
        };
        key <AD06> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               z,               Z,       leftarrow,             yen ]
        };
        key <AD07> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               u,               U,       downarrow,         uparrow ]
        };
        key <AD08> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               i,               I,      rightarrow,        idotless ]
        };
        key <AD09> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               o,               O,          oslash,          Oslash ]
        };
        key <AD10> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               p,               P,           thorn,           THORN ]
        };
        key <AD11> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [      udiaeresis,      Udiaeresis,       diaeresis,       diaeresis ]
        };
        key <AD12> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [            plus,        asterisk,      asciitilde,          macron ]
        };
        key <RTRN> {         [          Return ] };
    //    key <LCTL> {         [       Control_L ] };
        key <LCTL> {         [       Super_L ] };
        modifier_map Mod4 { Super_L };
        
        key <AC01> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               a,               A,              ae,              AE ]
        };
        key <AC02> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               s,               S,           U017F,           U1E9E ]
        };
        key <AC03> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               d,               D,             eth,             ETH ]
        };
        key <AC04> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               f,               F,         dstroke,     ordfeminine ]
        };
        key <AC05> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               g,               G,             eng,             ENG ]
        };
        key <AC06> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               h,               H,         hstroke,         Hstroke ]
        };
        key <AC07> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               j,               J,   dead_belowdot,   dead_abovedot ]
        };
        key <AC08> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               k,               K,             kra,       ampersand ]
        };
        key <AC09> {
            type= "FOUR_LEVEL_ALPHABETIC",
            symbols[Group1]= [               l,               L,         lstroke,         Lstroke ]
        };
        key <AC10> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [      odiaeresis,      Odiaeresis,     doubleacute,     doubleacute ]
        };
        key <AC11> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [      adiaeresis,      Adiaeresis,     asciicircum,     asciicircum ]
        };
        key <TLDE> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [     asciicircum,          degree,         notsign,         notsign ]
        };
        key <LFSH> {         [         Shift_L ] };
        key <BKSL> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [      numbersign,      apostrophe,           grave,           grave ]
        };
        key <AB01> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               y,               Y,  guillemotright,           U203A ]
        };
        key <AB02> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               x,               X,   guillemotleft,           U2039 ]
        };
        key <AB03> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               c,               C,            cent,       copyright ]
        };
        key <AB04> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               v,               V, doublelowquotemark, singlelowquotemark ]
        };
        key <AB05> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               b,               B, leftdoublequotemark, leftsinglequotemark ]
        };
        key <AB06> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               n,               N, rightdoublequotemark, rightsinglequotemark ]
        };
        key <AB07> {
            type= "FOUR_LEVEL_SEMIALPHABETIC",
            symbols[Group1]= [               m,               M,              mu,       masculine ]
        };
        key <AB08> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [           comma,       semicolon,  periodcentered,        multiply ]
        };
        key <AB09> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [          period,           colon,           U2026,        division ]
        };
        key <AB10> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [           minus,      underscore,          endash,          emdash ]
        };
        key <RTSH> {         [         Shift_R ] };
        key <KPMU> {
            type= "CTRL+ALT",
            symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ]
        };
        key <LALT> {         [           Alt_L,          Meta_L ] };
        key <SPCE> {         [           space ] };
        key <CAPS> {         [       Control_L,       Control_L ] };
        key <FK01> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
        };
        key <FK02> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
        };
        key <FK03> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
        };
        key <FK04> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
        };
        key <FK05> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
        };
        key <FK06> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
        };
        key <FK07> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
        };
        key <FK08> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
        };
        key <FK09> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
        };
        key <FK10> {
            type= "CTRL+ALT",
            symbols[Group1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
        };
        key <NMLK> {         [        Num_Lock ] };
        key <SCLK> {         [     Scroll_Lock ] };
        key  <KP7> {         [         KP_Home,            KP_7 ] };
        key  <KP8> {         [           KP_Up,            KP_8 ] };
        key  <KP9> {         [        KP_Prior,            KP_9 ] };
        key <KPSU> {
            type= "CTRL+ALT",
            symbols[Group1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ]
        };
        key  <KP4> {         [         KP_Left,            KP_4 ] };
        key  <KP5> {         [        KP_Begin,            KP_5 ] };
        key  <KP6> {         [        KP_Right,            KP_6 ] };
        key <KPAD> {
            type= "CTRL+ALT",
            symbols[Group1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ]
        };
        key  <KP1> {         [          KP_End,            KP_1 ] };
        key  <KP2> {         [         KP_Down,            KP_2 ] };
        key  <KP3> {         [         KP_Next,            KP_3 ] };
        key  <KP0> {         [       KP_Insert,            KP_0 ] };
        key <KPDL> {
            type= "KEYPAD",
            symbols[Group1]= [       KP_Delete,    KP_Separator ]
        };
        key <LVL3> {         [ ISO_Level3_Shift ] };
        key <LSGT> {
            type= "FOUR_LEVEL",
            symbols[Group1]= [            less,         greater,             bar,       brokenbar ]
        };
        key <FK11> {
            type= "CTRL+ALT",
            symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
        };
        key <FK12> {
            type= "CTRL+ALT",
            symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
        };
        key <KATA> {         [        Katakana ] };
        key <HIRA> {         [        Hiragana ] };
        key <HENK> {         [     Henkan_Mode ] };
        key <HKTG> {         [ Hiragana_Katakana ] };
        key <MUHE> {         [        Muhenkan ] };
        key <KPEN> {         [        KP_Enter ] };
        key <RCTL> {
    //        type= "TWO_LEVEL",
    //        symbols[Group1]= [       Multi_key,       Multi_key ]
            symbols[Group1]= [       Multi_key,       Control_R ]
        };
        key <KPDV> {
            type= "CTRL+ALT",
            symbols[Group1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ]
        };
        key <PRSC> {
            type= "PC_ALT_LEVEL2",
            symbols[Group1]= [           Print,         Sys_Req ]
        };
        key <RALT> {
            type= "ONE_LEVEL",
            symbols[Group1]= [ ISO_Level3_Shift ]
        };
        key <LNFD> {         [        Linefeed ] };
        key <HOME> {         [            Home ] };
        key   <UP> {         [              Up ] };
        key <PGUP> {         [           Prior ] };
        key <LEFT> {         [            Left ] };
        key <RGHT> {         [           Right ] };
        key  <END> {         [             End ] };
        key <DOWN> {         [            Down ] };
        key <PGDN> {         [            Next ] };
        key  <INS> {         [          Insert ] };
        key <DELE> {         [          Delete ] };
        key <MUTE> {         [   XF86AudioMute ] };
        key <VOL-> {         [ XF86AudioLowerVolume ] };
        key <VOL+> {         [ XF86AudioRaiseVolume ] };
        key <POWR> {         [    XF86PowerOff ] };
        key <KPEQ> {         [        KP_Equal ] };
        key <I126> {         [       plusminus ] };
        key <PAUS> {
            type= "PC_CONTROL_LEVEL2",
            symbols[Group1]= [           Pause,           Break ]
        };
        key <I128> {         [     XF86LaunchA ] };
        key <I129> {         [      KP_Decimal,      KP_Decimal ] };
        key <HNGL> {         [          Hangul ] };
        key <HJCV> {         [    Hangul_Hanja ] };
        key <LWIN> {         [         Super_L ] };
        key <RWIN> {         [         Super_R ] };
        key <COMP> {         [            Menu ] };
        key <STOP> {         [          Cancel ] };
        key <AGAI> {         [            Redo ] };
        key <PROP> {         [        SunProps ] };
        key <UNDO> {         [            Undo ] };
        key <FRNT> {         [        SunFront ] };
        key <COPY> {         [        XF86Copy ] };
        key <OPEN> {         [         SunOpen ] };
        key <PAST> {         [       XF86Paste ] };
        key <FIND> {         [            Find ] };
        key  <CUT> {         [         XF86Cut ] };
        key <HELP> {         [            Help ] };
        key <I147> {         [      XF86MenuKB ] };
        key <I148> {         [  XF86Calculator ] };
        key <I150> {         [       XF86Sleep ] };
        key <I151> {         [      XF86WakeUp ] };
        key <I152> {         [    XF86Explorer ] };
        key <I153> {         [        XF86Send ] };
        key <I155> {         [        XF86Xfer ] };
        key <I156> {         [     XF86Launch1 ] };
        key <I157> {         [     XF86Launch2 ] };
        key <I158> {         [         XF86WWW ] };
        key <I159> {         [         XF86DOS ] };
        key <I160> {         [ XF86ScreenSaver ] };
        key <I162> {         [ XF86RotateWindows ] };
        key <I163> {         [        XF86Mail ] };
        key <I164> {         [   XF86Favorites ] };
        key <I165> {         [  XF86MyComputer ] };
        key <I166> {         [        XF86Back ] };
        key <I167> {         [     XF86Forward ] };
        key <I169> {         [       XF86Eject ] };
        key <I170> {         [       XF86Eject,       XF86Eject ] };
        key <I171> {         [   XF86AudioNext ] };
        key <I172> {         [   XF86AudioPlay,  XF86AudioPause ] };
        key <I173> {         [   XF86AudioPrev ] };
        key <I174> {         [   XF86AudioStop,       XF86Eject ] };
        key <I175> {         [ XF86AudioRecord ] };
        key <I176> {         [ XF86AudioRewind ] };
        key <I177> {         [       XF86Phone ] };
        key <I179> {         [       XF86Tools ] };
        key <I180> {         [    XF86HomePage ] };
        key <I181> {         [      XF86Reload ] };
        key <I182> {         [       XF86Close ] };
        key <I185> {         [    XF86ScrollUp ] };
        key <I186> {         [  XF86ScrollDown ] };
        key <I187> {         [       parenleft ] };
        key <I188> {         [      parenright ] };
        key <I189> {         [         XF86New ] };
        key <I190> {         [            Redo ] };
        key <FK13> {         [       XF86Tools ] };
        key <FK14> {         [     XF86Launch5 ] };
        key <FK15> {         [     XF86Launch6 ] };
        key <FK16> {         [     XF86Launch7 ] };
        key <FK17> {         [     XF86Launch8 ] };
        key <FK18> {         [     XF86Launch9 ] };
        key <FK21> {         [ XF86TouchpadToggle ] };
        key <FK22> {         [  XF86TouchpadOn ] };
        key <FK23> {         [ XF86TouchpadOff ] };
        key <MDSW> {         [     Mode_switch ] };
        key  <ALT> {         [        NoSymbol,           Alt_L ] };
        key <META> {         [        NoSymbol,          Meta_L ] };
        key <SUPR> {         [        NoSymbol,         Super_L ] };
        key <HYPR> {         [        NoSymbol,         Hyper_L ] };
        key <I208> {         [   XF86AudioPlay ] };
        key <I209> {         [  XF86AudioPause ] };
        key <I210> {         [     XF86Launch3 ] };
        key <I211> {         [     XF86Launch4 ] };
        key <I212> {         [     XF86LaunchB ] };
        key <I213> {         [     XF86Suspend ] };
        key <I214> {         [       XF86Close ] };
        key <I215> {         [   XF86AudioPlay ] };
        key <I216> {         [ XF86AudioForward ] };
        key <I218> {         [           Print ] };
        key <I220> {         [      XF86WebCam ] };
        key <I223> {         [        XF86Mail ] };
        key <I224> {         [   XF86Messenger ] };
        key <I225> {         [      XF86Search ] };
        key <I226> {         [          XF86Go ] };
        key <I227> {         [     XF86Finance ] };
        key <I228> {         [        XF86Game ] };
        key <I229> {         [        XF86Shop ] };
        key <I231> {         [          Cancel ] };
        key <I232> {         [ XF86MonBrightnessDown ] };
        key <I233> {         [ XF86MonBrightnessUp ] };
        key <I234> {         [  XF86AudioMedia ] };
        key <I235> {         [     XF86Display ] };
        key <I236> {         [ XF86KbdLightOnOff ] };
        key <I237> {         [ XF86KbdBrightnessDown ] };
        key <I238> {         [ XF86KbdBrightnessUp ] };
        key <I239> {         [        XF86Send ] };
        key <I240> {         [       XF86Reply ] };
        key <I241> {         [ XF86MailForward ] };
        key <I242> {         [        XF86Save ] };
        key <I243> {         [   XF86Documents ] };
        key <I244> {         [     XF86Battery ] };
        key <I245> {         [   XF86Bluetooth ] };
        key <I246> {         [        XF86WLAN ] };
        modifier_map Control { <LCTL> };
        modifier_map Shift { <LFSH> };
        modifier_map Shift { <RTSH> };
        modifier_map Mod1 { <LALT> };
        modifier_map Control { <CAPS> };
        modifier_map Mod2 { <NMLK> };
        modifier_map Mod5 { <LVL3> };
    // NOTE: The following makes it possible for the RTCL key to
    // to be both Compose and Control_R:
        modifier_map Control { <RCTL> };
        modifier_map Mod4 { <LWIN> };
        modifier_map Mod4 { <RWIN> };
        modifier_map Mod5 { <MDSW> };
        modifier_map Mod1 { <META> };
        modifier_map Mod4 { <SUPR> };
        modifier_map Mod4 { <HYPR> };
    };
    
    xkb_geometry "pc(pc105)" {
    
        width=       470;
        height=      180;
    
        alias <AC00> = <CAPS>;
        alias <AA00> = <LCTL>;
    
        baseColor=   "white";
        labelColor=  "black";
        xfont=       "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
        description= "Generic 105";
    
        shape "NORM" {
            corner= 1,
            { [  18,  18 ] },
            { [   2,   1 ], [  16,  16 ] }
        };
        shape "BKSP" {
            corner= 1,
            { [  38,  18 ] },
            { [   2,   1 ], [  36,  16 ] }
        };
        shape "TABK" {
            corner= 1,
            { [  28,  18 ] },
            { [   2,   1 ], [  26,  16 ] }
        };
        shape "BKSL" {
            corner= 1,
            { [  28,  18 ] },
            { [   2,   1 ], [  26,  16 ] }
        };
        shape "RTRN" {
            corner= 1,
            { [   0,   0 ], [  28,   0 ], [  28,  37 ], [   5,  37 ],
              [   5,  18 ], [   0,  18 ] },
            { [   2,   1 ], [  26,   1 ], [  26,  35 ], [   7,  35 ],
              [   7,  16 ], [   2,  16 ] },
            approx= { [   5,   0 ], [  28,  37 ] }
        };
        shape "CAPS" {
            corner= 1,
            { [  33,  18 ] },
            { [   2,   1 ], [  31,  16 ] }
        };
        shape "LFSH" {
            corner= 1,
            { [  25,  18 ] },
            { [   2,   1 ], [  23,  16 ] }
        };
        shape "RTSH" {
            corner= 1,
            { [  50,  18 ] },
            { [   2,   1 ], [  48,  16 ] }
        };
        shape "MODK" {
            corner= 1,
            { [  27,  18 ] },
            { [   2,   1 ], [  25,  16 ] }
        };
        shape "SMOD" {
            corner= 1,
            { [  23,  18 ] },
            { [   2,   1 ], [  21,  16 ] }
        };
        shape "SPCE" {
            corner= 1,
            { [ 113,  18 ] },
            { [   2,   1 ], [ 111,  16 ] }
        };
        shape "KP0" {
            corner= 1,
            { [  37,  18 ] },
            { [   2,   1 ], [  35,  16 ] }
        };
        shape "KPAD" {
            corner= 1,
            { [  18,  37 ] },
            { [   2,   1 ], [  16,  35 ] }
        };
        shape "LEDS" { { [  75,  20 ] } };
        shape "LED" { { [   5,   1 ] } };
        section "Function" {
            key.color= "grey20";
            priority=  7;
            top=       22;
            left=      19;
            width=     351;
            height=    19;
            row {
                top=  1;
                left= 1;
                keys {
                    {  <ESC>, "NORM",   1 },
                    { <FK01>, "NORM",  20, color="white" },
                    { <FK02>, "NORM",   1, color="white" },
                    { <FK03>, "NORM",   1, color="white" },
                    { <FK04>, "NORM",   1, color="white" },
                    { <FK05>, "NORM",  11, color="white" },
                    { <FK06>, "NORM",   1, color="white" },
                    { <FK07>, "NORM",   1, color="white" },
                    { <FK08>, "NORM",   1, color="white" },
                    { <FK09>, "NORM",  11, color="white" },
                    { <FK10>, "NORM",   1, color="white" },
                    { <FK11>, "NORM",   1, color="white" },
                    { <FK12>, "NORM",   1, color="white" },
                    { <PRSC>, "NORM",   8, color="white" },
                    { <SCLK>, "NORM",   1, color="white" },
                    { <PAUS>, "NORM",   1, color="white" }
                };
            };
        }; // End of "Function" section
    
        section "Alpha" {
            key.color= "white";
            priority=  8;
            top=       61;
            left=      19;
            width=     287;
            height=    95;
            row {
                top=  1;
                left= 1;
                keys {
                    { <TLDE>, "NORM",   1 }, { <AE01>, "NORM",   1 },
                    { <AE02>, "NORM",   1 }, { <AE03>, "NORM",   1 },
                    { <AE04>, "NORM",   1 }, { <AE05>, "NORM",   1 },
                    { <AE06>, "NORM",   1 }, { <AE07>, "NORM",   1 },
                    { <AE08>, "NORM",   1 }, { <AE09>, "NORM",   1 },
                    { <AE10>, "NORM",   1 }, { <AE11>, "NORM",   1 },
                    { <AE12>, "NORM",   1 },
                    { <BKSP>, "BKSP",   1, color="grey20" }
                };
            };
            row {
                top=  20;
                left= 1;
                keys {
                    {  <TAB>, "TABK",   1, color="grey20" },
                    { <AD01>, "NORM",   1 }, { <AD02>, "NORM",   1 },
                    { <AD03>, "NORM",   1 }, { <AD04>, "NORM",   1 },
                    { <AD05>, "NORM",   1 }, { <AD06>, "NORM",   1 },
                    { <AD07>, "NORM",   1 }, { <AD08>, "NORM",   1 },
                    { <AD09>, "NORM",   1 }, { <AD10>, "NORM",   1 },
                    { <AD11>, "NORM",   1 }, { <AD12>, "NORM",   1 },
                    { <RTRN>, "RTRN",   1, color="grey20" }
                };
            };
            row {
                top=  39;
                left= 1;
                keys {
                    { <CAPS>, "CAPS",   1, color="grey20" },
                    { <AC01>, "NORM",   1 }, { <AC02>, "NORM",   1 },
                    { <AC03>, "NORM",   1 }, { <AC04>, "NORM",   1 },
                    { <AC05>, "NORM",   1 }, { <AC06>, "NORM",   1 },
                    { <AC07>, "NORM",   1 }, { <AC08>, "NORM",   1 },
                    { <AC09>, "NORM",   1 }, { <AC10>, "NORM",   1 },
                    { <AC11>, "NORM",   1 }, { <BKSL>, "NORM",   1 }
                };
            };
            row {
                top=  58;
                left= 1;
                keys {
                    { <LFSH>, "LFSH",   1, color="grey20" },
                    { <LSGT>, "NORM",   1 }, { <AB01>, "NORM",   1 },
                    { <AB02>, "NORM",   1 }, { <AB03>, "NORM",   1 },
                    { <AB04>, "NORM",   1 }, { <AB05>, "NORM",   1 },
                    { <AB06>, "NORM",   1 }, { <AB07>, "NORM",   1 },
                    { <AB08>, "NORM",   1 }, { <AB09>, "NORM",   1 },
                    { <AB10>, "NORM",   1 },
                    { <RTSH>, "RTSH",   1, color="grey20" }
                };
            };
            row {
                top=  77;
                left= 1;
                keys {
                    { <LCTL>, "MODK",   1, color="grey20" },
                    { <LWIN>, "SMOD",   1, color="grey20" },
                    { <LALT>, "SMOD",   1, color="grey20" },
                    { <SPCE>, "SPCE",   1 },
                    { <RALT>, "SMOD",   1, color="grey20" },
                    { <RWIN>, "SMOD",   1, color="grey20" },
                    { <MENU>, "SMOD",   1, color="grey20" },
                    { <RCTL>, "SMOD",   1, color="grey20" }
                };
            };
        }; // End of "Alpha" section
    
        section "Editing" {
            key.color= "grey20";
            priority=  9;
            top=       61;
            left=      312;
            width=     58;
            height=    95;
            row {
                top=  1;
                left= 1;
                keys {
                    {  <INS>, "NORM",   1 }, { <HOME>, "NORM",   1 },
                    { <PGUP>, "NORM",   1 }
                };
            };
            row {
                top=  20;
                left= 1;
                keys {
                    { <DELE>, "NORM",   1 }, {  <END>, "NORM",   1 },
                    { <PGDN>, "NORM",   1 }
                };
            };
            row {
                top=  58;
                left= 20;
                keys {
                    {   <UP>, "NORM",   1 }
                };
            };
            row {
                top=  77;
                left= 1;
                keys {
                    { <LEFT>, "NORM",   1 }, { <DOWN>, "NORM",   1 },
                    { <RGHT>, "NORM",   1 }
                };
            };
        }; // End of "Editing" section
    
        section "Keypad" {
            key.color= "grey20";
            priority=  10;
            top=       61;
            left=      376;
            width=     77;
            height=    95;
            row {
                top=  1;
                left= 1;
                keys {
                    { <NMLK>, "NORM",   1 }, { <KPDV>, "NORM",   1 },
                    { <KPMU>, "NORM",   1 }, { <KPSU>, "NORM",   1 }
                };
            };
            row {
                top=  20;
                left= 1;
                keys {
                    {  <KP7>, "NORM",   1, color="white" },
                    {  <KP8>, "NORM",   1, color="white" },
                    {  <KP9>, "NORM",   1, color="white" },
                    { <KPAD>, "KPAD",   1 }
                };
            };
            row {
                top=  39;
                left= 1;
                keys {
                    {  <KP4>, "NORM",   1, color="white" },
                    {  <KP5>, "NORM",   1, color="white" },
                    {  <KP6>, "NORM",   1, color="white" }
                };
            };
            row {
                top=  58;
                left= 1;
                keys {
                    {  <KP1>, "NORM",   1, color="white" },
                    {  <KP2>, "NORM",   1, color="white" },
                    {  <KP3>, "NORM",   1, color="white" },
                    { <KPEN>, "KPAD",   1 }
                };
            };
            row {
                top=  77;
                left= 1;
                keys {
                    {  <KP0>, "KP0",   1, color="white" },
                    { <KPDL>, "NORM",   1, color="white" }
                };
            };
        }; // End of "Keypad" section
    
        solid "LedPanel" {
            top=      22;
            left=     377;
            priority= 0;
            color= "grey10";
            shape= "LEDS";
        };
        indicator "Num Lock" {
            top=      37;
            left=     382;
            priority= 1;
            onColor= "green";
            offColor= "green30";
            shape= "LED";
        };
        indicator "Caps Lock" {
            top=      37;
            left=     407;
            priority= 2;
            onColor= "green";
            offColor= "green30";
            shape= "LED";
        };
        indicator "Scroll Lock" {
            top=      37;
            left=     433;
            priority= 3;
            onColor= "green";
            offColor= "green30";
            shape= "LED";
        };
        text "NumLockLabel" {
            top=      25;
            left=     378;
            priority= 4;
            width=  19.8;
            height=  10;
            XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
            text=  "Num\nLock";
        };
        text "CapsLockLabel" {
            top=      25;
            left=     403;
            priority= 5;
            width=  26.4;
            height=  10;
            XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
            text=  "Caps\nLock";
        };
        text "ScrollLockLabel" {
            top=      25;
            left=     428;
            priority= 6;
            width=  39.6;
            height=  10;
            XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
            text=  "Scroll\nLock";
        };
    };
    
    };
    
    ? file icon etc-default-keyboard---and---xkbmap (62,645 bytes) 2014-10-11 20:01 +

-Relationships
+Relationships

-Notes

~0013753

berryfoo (reporter)

Last edited: 2014-10-11 20:09

View 2 revisions

(Hopefully, this mantis version supports the HTML pre tag to make
the table in the bug report more readable. *sigh*)




Table "Is key XYZ recognized as Ctrl key?"
------------------------------------------
NOTES: - Key names in table header denote *hardware* keys, i.e. what's
         printed on them, not the associated key symbol.

       - 96 = Spring version 0.96
         98 = Spring version 0.98 and above

       - kc = X11 keycode (layout independent), as shown by xev

       - ks = X11 keysym number, as shown by xev (in the table, the keysym
              name is listed in the line after each keysym number)



       \ Key   | CapsLock+   CapsLock   LeftCtrl   RightCtrl
Layout  \      | LeftCtrl
---------------+--------------------------------------------
default layout               96: no     96: yes    96: yes
                             98: no     98: yes    98: yes

                             kc 66      kc 37      kc 105
                             ks 0xffe5  ks 0xffe3  ks 0xffe4
                             Caps_Lock  Control_L  Control_R

------------------------------------------------------------

ctrl:nocaps                  96: yes    96: yes    96: yes
(CapsLock acts               98: NO     98: yes    98: yes
as additional
Ctrl key)                    kc 66      kc 37      kc 105
                             ks 0xffe3  ks 0xffe3  ks 0xffe4
                             Control_L  Control_L  Control_R

------------------------------------------------------------

ctrl:nocaps+     96: yes     96: yes    96: no     96: NO
compose:rctrl+   98: yes     98: NO     98: no     98: yes
XKB keymap
(CapsLock acts               kc 66      kc 37      kc 105
as additional                ks 0xffe3  ks 0xffeb  ks 0xff20
Ctrl key, left               Control_L  Super_L    Multi_key
Ctrl key acts as
Super_L/Windows,
right Ctrl key
acts as both
right Ctrl key
and Compose key)



+Notes

-Issue History
Date Modified Username Field Change
2014-10-11 20:01 berryfoo New Issue
2014-10-11 20:01 berryfoo File Added: etc-default-keyboard---and---xkbmap
2014-10-11 20:08 berryfoo Note Added: 0013753
2014-10-11 20:09 berryfoo Note Edited: 0013753 View Revisions
+Issue History