Bug 27903 - Capslock delay problem for lowercase letters
Summary: Capslock delay problem for lowercase letters
Status: RESOLVED FIXED
Alias: None
Product: xorg
Classification: Unclassified
Component: Server/Input/Core (show other bugs)
Version: unspecified
Hardware: All Linux (All)
: medium major
Assignee: Xorg Project Team
QA Contact: Xorg Project Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-04-29 15:12 UTC by Burak Çalık
Modified: 2012-10-29 21:22 UTC (History)
4 users (show)

See Also:
i915 platform:
i915 features:


Attachments
noLock and noUnlock in _XkbFilterLockState (1.21 KB, patch)
2011-08-05 12:30 UTC, Andreas Wettstein
no flags Details | Splinter Review
Support noLock and noUnlock in xkbcomp (2.03 KB, patch)
2011-08-07 01:14 UTC, Andreas Wettstein
no flags Details | Splinter Review
Support noLock and noUnlock in libxkbfile (1.58 KB, patch)
2011-08-07 01:19 UTC, Andreas Wettstein
no flags Details | Splinter Review

Description Burak Çalık 2010-04-29 15:12:36 UTC
The problem occurs if you are used to typing capital letters using capslock button instead of shift and if you are writing too fast.

For example, you can see the same sentences which were written in windows and linux;

In Windows:
"Hello friends. How are you today?"

In Linux:
"HEllo friends. HOw are you today?"

While you are writing, capslock sticks opened on Linux.

---

To reproduce this problem, you can do that;
Press capslock and A keys repeatedly then you will see that there is no any lowercase letter.

You will see this;
"AAAAAAAAAAA"
instead of;
"AaAaAaAaAaA"
Comment 1 Peter Hutterer 2010-06-01 22:07:54 UTC
seems to work fine for me. what's your xkb configuration (the output ofxkbcomp -xkb $DISPLAY -)?
Comment 2 oz.mule+fdb 2010-09-28 07:38:29 UTC
I can confirm this problem is present for me.

IT (there we go again...) seems that the problem is due to the transition from upper- to lower-case occuring when the caps lock key is released, whereas the transition from lower-case to upper-case occurs when the key is pressed. So if you don't RELEASE caps lock before you hit the next key, it remains activated.


Example, starting with caps lock off and repeatedly pressing A:

0 1   2   3   4
aaAAAAAAAAAAAAaaaa

0: Caps Lock is off.
1: Pressed and held caps lock - light activated on keyboard.
2: Released caps lock.
3: Pressed and held caps lock again (to deactivate) - light goes off on keyboard.
4: Released caps lock.

Hope this makes sense, here's my xkb config FWIW.

xkb_keymap {
xkb_keycodes "evdev+aliases(qwerty)" {
    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 <LatY> = <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 <LatZ> = <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= Control+Alt;
        map[Control+Alt]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "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=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 XF86_Switch_VT_1+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=1,!same);
    };
    interpret XF86_Switch_VT_2+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=2,!same);
    };
    interpret XF86_Switch_VT_3+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=3,!same);
    };
    interpret XF86_Switch_VT_4+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=4,!same);
    };
    interpret XF86_Switch_VT_5+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=5,!same);
    };
    interpret XF86_Switch_VT_6+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=6,!same);
    };
    interpret XF86_Switch_VT_7+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=7,!same);
    };
    interpret XF86_Switch_VT_8+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=8,!same);
    };
    interpret XF86_Switch_VT_9+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=9,!same);
    };
    interpret XF86_Switch_VT_10+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=10,!same);
    };
    interpret XF86_Switch_VT_11+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=11,!same);
    };
    interpret XF86_Switch_VT_12+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=12,!same);
    };
    interpret XF86_Ungrab+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x55,data[1]=0x6e,data[2]=0x67,data[3]=0x72,data[4]=0x61,data[5]=0x62,data[6]=0x00);
    };
    interpret XF86_ClearGrab+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x43,data[1]=0x6c,data[2]=0x73,data[3]=0x47,data[4]=0x72,data[5]=0x62,data[6]=0x00);
    };
    interpret XF86_Next_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 XF86_Prev_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 Any+Exactly(Lock) {
        action= LockMods(modifiers=Lock);
    };
    interpret Any+AnyOf(all) {
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    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+gb+inet(evdev)+terminate(ctrl_alt_bksp)" {

    name[group1]="United Kingdom";

    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,        sterling,   threesuperior,        sterling ]
    };
    key <AE04> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               4,          dollar,        EuroSign,      onequarter ]
    };
    key <AE05> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               5,         percent,         onehalf,    threeeighths ]
    };
    key <AE06> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               6,     asciicircum,   threequarters,     fiveeighths ]
    };
    key <AE07> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               7,       ampersand,       braceleft,    seveneighths ]
    };
    key <AE08> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               8,        asterisk,     bracketleft,       trademark ]
    };
    key <AE09> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               9,       parenleft,    bracketright,       plusminus ]
    };
    key <AE10> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               0,      parenright,      braceright,          degree ]
    };
    key <AE11> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [           minus,      underscore,       backslash,    questiondown ]
    };
    key <AE12> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [           equal,            plus,    dead_cedilla,     dead_ogonek ]
    };
    key <BKSP> {
        type= "CTRL+ALT",
        symbols[Group1]= [       BackSpace, Terminate_Server ]
    };
    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_ALPHABETIC",
        symbols[Group1]= [               e,               E,               e,               E ]
    };
    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]= [               y,               Y,       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",
        symbols[Group1]= [     bracketleft,       braceleft,  dead_diaeresis,  dead_abovering ]
    };
    key <AD12> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [    bracketright,      braceright,      dead_tilde,     dead_macron ]
    };
    key <RTRN> {         [          Return ] };
    key <LCTL> {         [       Control_L ] };
    key <AC01> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [               a,               A,              ae,              AE ]
    };
    key <AC02> {
        type= "FOUR_LEVEL_SEMIALPHABETIC",
        symbols[Group1]= [               s,               S,          ssharp,         section ]
    };
    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_ALPHABETIC",
        symbols[Group1]= [               j,               J,               j,               J ]
    };
    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",
        symbols[Group1]= [       semicolon,           colon,      dead_acute, dead_doubleacute ]
    };
    key <AC11> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [      apostrophe,              at, dead_circumflex,      dead_caron ]
    };
    key <TLDE> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [           grave,         notsign,             bar,             bar ]
    };
    key <LFSH> {         [         Shift_L ] };
    key <BKSL> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [      numbersign,      asciitilde,      dead_grave,      dead_breve ]
    };
    key <AB01> {
        type= "FOUR_LEVEL_SEMIALPHABETIC",
        symbols[Group1]= [               z,               Z,   guillemotleft,            less ]
    };
    key <AB02> {
        type= "FOUR_LEVEL_SEMIALPHABETIC",
        symbols[Group1]= [               x,               X,  guillemotright,         greater ]
    };
    key <AB03> {
        type= "FOUR_LEVEL_SEMIALPHABETIC",
        symbols[Group1]= [               c,               C,            cent,       copyright ]
    };
    key <AB04> {
        type= "FOUR_LEVEL_SEMIALPHABETIC",
        symbols[Group1]= [               v,               V, leftdoublequotemark, leftsinglequotemark ]
    };
    key <AB05> {
        type= "FOUR_LEVEL_SEMIALPHABETIC",
        symbols[Group1]= [               b,               B, rightdoublequotemark, rightsinglequotemark ]
    };
    key <AB06> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [               n,               N,               n,               N ]
    };
    key <AB07> {
        type= "FOUR_LEVEL_SEMIALPHABETIC",
        symbols[Group1]= [               m,               M,              mu,       masculine ]
    };
    key <AB08> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [           comma,            less,  horizconnector,        multiply ]
    };
    key <AB09> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [          period,         greater,  periodcentered,        division ]
    };
    key <AB10> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [           slash,        question,   dead_belowdot,   dead_abovedot ]
    };
    key <RTSH> {         [         Shift_R ] };
    key <KPMU> {
        type= "CTRL+ALT",
        symbols[Group1]= [     KP_Multiply,  XF86_ClearGrab ]
    };
    key <LALT> {         [           Alt_L,          Meta_L ] };
    key <SPCE> {         [           space ] };
    key <CAPS> {         [       Caps_Lock ] };
    key <FK01> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F1, XF86_Switch_VT_1 ]
    };
    key <FK02> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F2, XF86_Switch_VT_2 ]
    };
    key <FK03> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F3, XF86_Switch_VT_3 ]
    };
    key <FK04> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F4, XF86_Switch_VT_4 ]
    };
    key <FK05> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F5, XF86_Switch_VT_5 ]
    };
    key <FK06> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F6, XF86_Switch_VT_6 ]
    };
    key <FK07> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F7, XF86_Switch_VT_7 ]
    };
    key <FK08> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F8, XF86_Switch_VT_8 ]
    };
    key <FK09> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F9, XF86_Switch_VT_9 ]
    };
    key <FK10> {
        type= "CTRL+ALT",
        symbols[Group1]= [             F10, XF86_Switch_VT_10 ]
    };
    key <NMLK> {         [        Num_Lock, Pointer_EnableKeys ] };
    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, XF86_Prev_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, XF86_Next_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> {         [       KP_Delete,      KP_Decimal ] };
    key <LVL3> {         [ ISO_Level3_Shift ] };
    key <LSGT> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [       backslash,             bar,             bar,       brokenbar ]
    };
    key <FK11> {
        type= "CTRL+ALT",
        symbols[Group1]= [             F11, XF86_Switch_VT_11 ]
    };
    key <FK12> {
        type= "CTRL+ALT",
        symbols[Group1]= [             F12, XF86_Switch_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> {         [       Control_R ] };
    key <KPDV> {
        type= "CTRL+ALT",
        symbols[Group1]= [       KP_Divide,     XF86_Ungrab ]
    };
    key <PRSC> {
        type= "PC_ALT_LEVEL2",
        symbols[Group1]= [           Print,         Sys_Req ]
    };
    key <RALT> {
        type= "TWO_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift,       Multi_key ]
    };
    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 ] };
    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> {         [      XF86MenuKB ] };
    key <FK22> {         [ XF86TouchpadToggle ] };
    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 <I225> {         [      XF86Search ] };
    key <I227> {         [     XF86Finance ] };
    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 Lock { <CAPS> };
    modifier_map Mod2 { <NMLK> };
    modifier_map Mod5 { <LVL3> };
    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> };
};

};
Comment 3 Burak Çalık 2010-09-28 08:12:50 UTC
Nah it's not about releasing the capslock button.

Looks like there is a problom with some non-english keyboards.
English keyboard users can not reproduce the problem.
Comment 4 oz.mule+fdb 2010-09-28 09:17:12 UTC
(In reply to comment #3)
> Nah it's not about releasing the capslock button.
> 
> Looks like there is a problom with some non-english keyboards.
> English keyboard users can not reproduce the problem.

I use an English (United Kingdom) keyboard.
Comment 5 Burak Çalık 2010-09-28 10:06:44 UTC
Since here is a bug-report site, this is not a solution.
Comment 6 Mike Whitehead 2010-10-13 09:40:58 UTC
I've also seen this issue for a long time (Read: years) and is one of my main issues with Xorg.

Standard 105-key UK keyboard.

I would be inclined to agree with oz.mule+fdb@gmail.com [comment 2], as it seems to be caused by the CapsLock not being released (i.e. in a KeyUp state) prior to the next key being pressed.

If you change the key function to Shift_L/Shift rather than CapsLock/Lock, you get normal Shift function. If you change it to Shift_L/Lock, the issues arises again.

I would like to say that this has been an issue for quite some time, however many people resort to saying "stop using CapsLock and use Shift" - this is not a fix, it's a (very poor) workaround.

Sorry for the poor explanation, I'm a bit of an X/*nix amateur!
Comment 7 Peter Hutterer 2010-10-19 18:53:12 UTC
this seems to be a standard behaviour of locking modifiers - lock on press, unlock on second release.

what I don't get - why not just assign Shift to the CapsLock key?
Comment 8 Mike Whitehead 2010-10-20 07:36:13 UTC
(In reply to comment #7)
> this seems to be a standard behaviour of locking modifiers - lock on press,
> unlock on second release.
> 
> what I don't get - why not just assign Shift to the CapsLock key?

Because that simply doesn't work. Look at these examples:

CapsLock functioning as normal:
<CAPSLOCK KEY_DOWN><CAPSLOCK KEY_UP> T <CAPSLOCK KEY_DOWN><CAPSLOCK KEY_UP> est

Result:
Test

Shift functioning as normal:
<SHIFT KEY_DOWN> T <SHIFT KEY_UP> est

Result:
Test

When using CapsLock, there is a key down/up prior to the letter requiring capitalisation and again when switching back to lowercase. When using Shift, the key is pressed and held in a down state while writing the letters requiring capitalisation, then released for the rest of the characters.

Switching CapsLock to Shift doesn't alleviate the problem.
Comment 9 Peter Hutterer 2010-10-25 14:39:17 UTC
Right, that makes sense then, I misinterpreted how you were using capslock.

The problem isn't unlike bug 865, though the other way round. afaict,
there's nothing in the spec to dictate when locks have to be released but it's likely an issue where people feel strongminded about it either way and the current behaviour has been around for quite a while.
Comment 10 Burak Çalık 2010-10-25 14:59:41 UTC
And also how I could type it wrong in Linux, while typing in same way for decade without any mistake in Windows.
Comment 11 Burak Çalık 2011-04-26 01:49:17 UTC
Here is a video that I reproduce the problem on Pardus 2011 :
http://www.youtube.com/watch?v=0Xa6_yJYMsU
Comment 12 Burak Çalık 2011-04-29 08:43:53 UTC
Here is another video on Ubuntu 11.04, that really represents the capslock-delay bug and can easily be reproduced.

Ubuntu 11.04 Capslock Delay While Switching to Lowercase :
http://www.youtube.com/watch?v=lVdu5lXz8RA
Comment 13 Fatih Arslan 2011-06-28 04:09:27 UTC
What's the situation now ? Any progress ?
Comment 14 Andreas Wettstein 2011-07-12 11:42:53 UTC
One solution could be:

xmodmap -e 'keysym Caps_Lock = ISO_Next_Group ISO_Next_Group ISO_Prev_Group ISO_Prev_Group'
xmodmap -e 'keysym a = a A A a'

and so on for the other alphabetic keys.  I use xmodmap out of lazyness. Using xkbcomp would give more flexibility.  

In any event, the idea is to use another group for the caps lock function, rather than the modifier Lock. Group locks take place on keypress, and there is no distiction between set and reset, as there is for modifiers.

The proposal above wastes a group, but it works with existing X-servers and complies to the XKB protocol specification.
Comment 15 Marlon Fernandes 2011-07-21 13:20:42 UTC
ANy Solution?? please??
Comment 16 Peter Hutterer 2011-07-28 22:55:01 UTC
http://patchwork.freedesktop.org/patch/6538/
Comment 17 Burak Çalık 2011-07-29 00:00:48 UTC
Thank you.
I'm going to install Ubuntu again, hoping the patch will work.
I will post here the result.
Comment 18 Burak Çalık 2011-07-29 02:20:24 UTC
Ok I am new at Linux and I couldn't install it ^^
Any help?

xmripper@xmripper-ubuntu:~/Downloads$ patch -p0 <xkb.patch
patching file b/xkb/xkbActions.c
Hunk #1 FAILED at 348.
patch: **** Can't create file b/xkb/xkbActions.c.orig : Permission denied

xmripper@xmripper-ubuntu:~/Downloads$ patch -p1 <xkb.patch
patching file xkb/xkbActions.c
Hunk #1 FAILED at 348.
patch: **** Can't create file xkb/xkbActions.c.orig : Permission denied
xmripper@xmripper-ubuntu:~/Downloads$
Comment 19 Peter Hutterer 2011-07-31 20:20:14 UTC
I cannot really recommend patching your X server sources if you're not familiar with patch and how to compile the server after patching. too easy to end up with a unusable machine. Probably better to wait for others to test this patch and get up to speed in the meantime so you can help testing other patches in the future.
Comment 20 Andreas Wettstein 2011-07-31 23:50:09 UTC
> http://patchwork.freedesktop.org/patch/6538/

Now the people who release Caps Lock late are happy, and
those who press Caps Lock early will complain.
Unfortunately, for the latter, workarounds are more
difficult than the one I proposed above.  Furthermore, these
people have the XKB protocol specification on their side:

In section 6.3 of that specification, there is a table with
an entry that describes what LockMods should do.  It clearly
demands that base modifiers must be set on key press, a
requirement that is violated by the patch.  It also demands
that clearing of locked modifiers occurs at key release.
This was broken before the patch, but probably had no effect
besides the Caps Lock LED turned off prematurely.

The specification also demands support for two flags, noLock
and noUnlock, but the SetMods implementation lacks support
for these flags.  This is unfortunate, as the noLock flag
would provide an elegant solution to the problem at hand:
One could make the Caps Lock key an ALPHABETIC key.  The
lowercase level would lock the Lock modifier as usual.  The
uppercase level would use LockMods for the modifiers
Lock+Shift, with the noLock flag.  This would cause the
effective Lock and Shift modifiers to be set as long as the
key is held; the Shift would cancel the Lock.  After
release, the Lock modifier would be unlocked.  This is
exactly what we need.

So, please, revert the patch, and possibly, add support for
noLock and noUnlock flags.
Comment 21 Andreas Wettstein 2011-08-01 01:43:54 UTC
> The specification also demands support for two flags, noLock
> and noUnlock, but the SetMods implementation lacks support
> for these flags.

Sorry, I should have written "LockMods" not "SetMods".
Comment 22 Peter Hutterer 2011-08-01 20:19:07 UTC
(In reply to comment #20)
> > http://patchwork.freedesktop.org/patch/6538/
> 
> Now the people who release Caps Lock late are happy, and
> those who press Caps Lock early will complain.

as pointed out in the patch: is there really a use case for someone requiring caps lock to be down when pressing it for the second time?

> So, please, revert the patch, 

the patch was merely proposed, it's not in any tree at this point.
Comment 23 Andreas Wettstein 2011-08-02 12:39:57 UTC
> > Now the people who release Caps Lock late are happy, and
> > those who press Caps Lock early will complain.

> as pointed out in the patch: is there really a use case for someone requiring
> caps lock to be down when pressing it for the second time?

I do not know whether there are really people out there who tend
to press Caps Lock early.  If you submit the patch, we might find
out...

On the other hand, the behaviour desired by the late-releasers
can be obtained with a group lock.  Therefore, there is no use
case that would require patch 6538.

Apart from that, as you know, LockMods is not just there for
Lock, but for the other modifiers as well.  What people want to
do with it nobody can tell.  With XKB, one can do sophisticated
layouts with many levels and multiple locks, but doing so will
become a pain if XKB does not work as documented.  This is my
motivation for complaining.
Comment 24 Peter Hutterer 2011-08-02 17:21:48 UTC
(In reply to comment #20)
> The specification also demands support for two flags, noLock
> and noUnlock, but the SetMods implementation lacks support
> for these flags.  

patches accepted. Looks like the flag is defined and handled for the LockPtrButton case so that can serve as a model there.

> This is unfortunate, as the noLock flag
> would provide an elegant solution to the problem at hand:
> One could make the Caps Lock key an ALPHABETIC key.  The
> lowercase level would lock the Lock modifier as usual.  The
> uppercase level would use LockMods for the modifiers
> Lock+Shift, with the noLock flag.  This would cause the
> effective Lock and Shift modifiers to be set as long as the
> key is held; the Shift would cancel the Lock.  After
> release, the Lock modifier would be unlocked.  This is
> exactly what we need.

I don't understand how this should work. Comment #0 states that we need lock to be released while the CapsLock key is down. noLock, if implemented, would still set the base modifier. So on the second press you have lock+base set → effectively set until key release. So it does not fix the key sequence

  caps press, caps release, caps press, a press, a release, caps release

The A will still be uppercase. Which is exactly what we have now. What am I missing here?
Comment 25 Andreas Wettstein 2011-08-03 11:36:58 UTC
> > The
> > uppercase level would use LockMods for the modifiers
> > Lock+Shift, with the noLock flag.  This would cause the
> > effective Lock and Shift modifiers to be set as long as the
> > key is held; the Shift would cancel the Lock.

>   caps press, caps release, caps press, a press, a release, caps release
>
> The A will still be uppercase. Which is exactly what we have now. What am I
> missing here?

You miss the Shift, I believe.  This is what the key for A looks like:

    key <AC01> {
        type= "ALPHABETIC",
        symbols[Group1]= [               a,               A ]
    };

And this is ALPHABETIC:

    type "ALPHABETIC" {
        modifiers= Shift+Lock;
        map[Shift]= Level2;
        map[Lock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Caps";
    };

In my proposal, both Shift and Lock are set while the Caps Lock key is down the
second time.  Therefore, we select Level1, so we get an a, not an A.

This part works even now (without patch 6538).  You can try this by mapping
LockMods(modifiers=Shift+Lock) to a key.  But without the noLock flag, after
you release that key, you will end up with a locked Shift, of course.
(By the way, SetMods(modifiers=Shift+Lock, clearLocks) appears similar, but
does not work, as the clearLocks becomes ineffective if another key is pressed
while the modifier key is down -- both in reality and in the specification).
Comment 26 Andreas Wettstein 2011-08-05 12:30:57 UTC
Created attachment 49973 [details] [review]
noLock and noUnlock in _XkbFilterLockState
Comment 27 Andreas Wettstein 2011-08-05 12:35:08 UTC
With the patch, one can define Caps Lock this way:

  key <CAPS> {
    repeat=no,
    type[group1]="ALPHABETIC",
    symbols[group1]=[ Caps_Lock, Caps_Lock ],
    actions[group1]=[ LockMods(modifiers=Lock), Private(type=3,data[0]=1,data[1]=3,data[2]=3) ]
  };

to achieve the desired behaviour.
Comment 28 Andreas Wettstein 2011-08-07 01:14:52 UTC
Created attachment 50006 [details] [review]
Support noLock and noUnlock in xkbcomp

This patch to xkbcomp allows to specify the noLock and noUnlock flag in a more natural syntax.  Instead of the Private action shown before, one now can write "LockMods(modifiers=Shift+Lock,affect=unlock)".
Comment 29 Andreas Wettstein 2011-08-07 01:19:21 UTC
Created attachment 50007 [details] [review]
Support noLock and noUnlock in libxkbfile

With this patch, when creating .xkb from .xkm, the flags to LockMods get now displayed, rather being discarded.

The Xserver has very similar code, in xkb/xkbtext.c.  Is this still used? If so, it would need a change that is basically identical to this patch.
Comment 30 Peter Hutterer 2011-08-10 23:47:42 UTC
(In reply to comment #26)
> Created an attachment (id=49973) [details]
> noLock and noUnlock in _XkbFilterLockState

forwarded to the list thanks. http://patchwork.freedesktop.org/patch/6691/
Comment 31 Burak Çalık 2011-08-24 03:34:27 UTC
I don't get it all, but I hope you guys fixed the problem.
Thank you.

When will I see this patch on a Linux distribution?
Is there anyway I can test?
Comment 32 Andreas Wettstein 2012-03-05 11:45:20 UTC
(In reply to comment #31)

> When will I see this patch on a Linux distribution?
> Is there anyway I can test?

Probably not yet in a distribution, but Xorg server 1.12 is now out.  The
approach described in comment #27 will work with this Xserver version.
Comment 33 Peter Hutterer 2012-03-05 22:15:36 UTC
commit e3f6a76dd480717eae4b17ad8e2ff707de2ffe4c
Author: Andreas Wettstein <wettstein509@solnet.ch>
Date:   Thu Aug 11 16:33:33 2011 +1000

    xkb: Support noLock and noUnlock flags for LockMods
Comment 34 nabukadnezar43 2012-06-16 09:26:40 UTC
(In reply to comment #32)
> (In reply to comment #31)
> 
> > When will I see this patch on a Linux distribution?
> > Is there anyway I can test?
> 
> Probably not yet in a distribution, but Xorg server 1.12 is now out.  The
> approach described in comment #27 will work with this Xserver version.

I have xorg server 1.12 installed. I believe i just have to define caps lock as described in comment #27. But i have no idea which file to edit, would you please help?
Comment 35 Burak Çalık 2012-06-16 11:57:06 UTC
Also, anyone please let me know (leave a comment here) when this patch is applied to any linux distribution. Then I will start using linux.
Comment 36 Peter Hutterer 2012-06-17 22:38:56 UTC
(In reply to comment #34)
> I have xorg server 1.12 installed. I believe i just have to define caps lock as
> described in comment #27. But i have no idea which file to edit, would you
> please help?

xkbcomp -xkb $DISPLAY my_xkbmap
then edit my_xkbmap and re-load it as
xkbcomp my_xkbmap $DISPLAY


(In reply to comment #35)
> Also, anyone please let me know (leave a comment here) when this patch is
> applied to any linux distribution. Then I will start using linux.

Fedora 17 has server 1.12, no idea about other distros.
Comment 37 nabukadnezar43 2012-06-18 07:09:31 UTC
(In reply to comment #36)

> 
> xkbcomp -xkb $DISPLAY my_xkbmap
> then edit my_xkbmap and re-load it as
> xkbcomp my_xkbmap $DISPLAY
> 

Thanks a lot. The caps lock delay problem is gone away now. Is this method permanent or do i have to load my_xkbmap everytime i start x?

Another question. When i load my_xkbmap, i get the following warnings:

Warning:          Compat map for group 2 redefined
                  Using new definition
Warning:          Compat map for group 3 redefined
                  Using new definition
Warning:          Compat map for group 4 redefined
                  Using new definition
Warning:          No symbols defined for <AB11> (keycode 97)
Warning:          No symbols defined for <JPCM> (keycode 103)
Warning:          No symbols defined for <I120> (keycode 120)
Warning:          No symbols defined for <AE13> (keycode 132)
Warning:          No symbols defined for <I149> (keycode 149)
Warning:          No symbols defined for <I154> (keycode 154)
Warning:          No symbols defined for <I161> (keycode 161)
Warning:          No symbols defined for <I168> (keycode 168)
Warning:          No symbols defined for <I178> (keycode 178)
Warning:          No symbols defined for <I183> (keycode 183)
Warning:          No symbols defined for <I184> (keycode 184)
Warning:          No symbols defined for <FK19> (keycode 197)
Warning:          No symbols defined for <FK20> (keycode 198)
Warning:          No symbols defined for <FK24> (keycode 202)
Warning:          No symbols defined for <I217> (keycode 217)
Warning:          No symbols defined for <I219> (keycode 219)
Warning:          No symbols defined for <I221> (keycode 221)
Warning:          No symbols defined for <I222> (keycode 222)
Warning:          No symbols defined for <I230> (keycode 230)
Warning:          No symbols defined for <I247> (keycode 247)
Warning:          No symbols defined for <I248> (keycode 248)
Warning:          No symbols defined for <I249> (keycode 249)
Warning:          No symbols defined for <I250> (keycode 250)
Warning:          No symbols defined for <I251> (keycode 251)
Warning:          No symbols defined for <I252> (keycode 252)
Warning:          No symbols defined for <I253> (keycode 253)

Are these warnings safe to ignore? I changed my_xkbmap's caps lock line like this:

    key <SPCE> {         [           space ] };
    key <CAPS> {
	repeat=no,
	type[group1]="ALPHABETIC",
	symbols[group1]=[ Caps_Lock, Caps_Lock ],
	actions[group1]=[ LockMods(modifiers=Lock),
	Private(type=3,data[0]=1,data[1]=3,data[2]=3) ]
    };
    key <FK01> {...
Comment 38 Burak Çalık 2012-06-18 19:10:13 UTC
(In reply to comment #36)
> (In reply to comment #34)
> > I have xorg server 1.12 installed. I believe i just have to define caps lock as
> > described in comment #27. But i have no idea which file to edit, would you
> > please help?
> 
> xkbcomp -xkb $DISPLAY my_xkbmap
> then edit my_xkbmap and re-load it as
> xkbcomp my_xkbmap $DISPLAY
> 
> 
> (In reply to comment #35)
> > Also, anyone please let me know (leave a comment here) when this patch is
> > applied to any linux distribution. Then I will start using linux.
> 
> Fedora 17 has server 1.12, no idea about other distros.

IAm currently typing on FEdora 17 installed on VIrtual BOx and nothing is fixed here. AS you see the delay problem still affects my typing.
Comment 39 Peter Hutterer 2012-06-18 19:54:25 UTC
(In reply to comment #37)
> Thanks a lot. The caps lock delay problem is gone away now. Is this method
> permanent or do i have to load my_xkbmap everytime i start x?

Andreas, can you please file a xkeyboard-config bug to get this snipped introduced by default into the keymap. I think it's useful enough to carry it.


(In reply to comment #38)
> IAm currently typing on FEdora 17 installed on VIrtual BOx and nothing is fixed
> here. AS you see the delay problem still affects my typing.

did you add the xkbcomp snippet or just use the layout as-is?
Comment 40 Burak Çalık 2012-06-19 14:05:48 UTC
(In reply to comment #39)
> (In reply to comment #38)
> > IAm currently typing on FEdora 17 installed on VIrtual BOx and nothing is fixed
> > here. AS you see the delay problem still affects my typing.
> 
> did you add the xkbcomp snippet or just use the layout as-is?

No I did not add anything. I just installed Fedora 17 and ran Firefox immediately to test it. I also do not know how to add that xkbcomp snippet. I haven't any linux experience because of this issue.
Comment 41 Peter Hutterer 2012-06-19 16:26:27 UTC
(In reply to comment #40)
> No I did not add anything. I just installed Fedora 17 and ran Firefox
> immediately to test it. I also do not know how to add that xkbcomp snippet. I
> haven't any linux experience because of this issue.

right. so the X server part of this issue is fixed and a modified key map as shown in comment #27 will emit the right behaviour. That key map is not standard and needs manual configuration, to make it standard we need a fix in the xkeyboard-config component (see comment #39). Until then, it won't work out of the box.

Please wait for Andreas to file a bug and the snippet to get committed to xkeyboard-config.
Comment 42 wsick 2012-09-04 22:37:22 UTC
I will also be watching this develop, currently i use Ubuntu 12.04 LTS and I have exp'd this issue since I've started using Linux 10 years ago.
Comment 43 nabukadnezar43 2012-10-19 20:17:48 UTC
I guess this fix isn't included in xkeyboard-config 2.7 by default.

Can someone please explain how i can make this fix permanent until xkeyboard-config gets fixed? A startup script won't work when i use a major desktop environment. Executing xkbcomp commands described in comment #36 everytime x starts is a pain.
Comment 44 Andreas Wettstein 2012-10-28 13:18:01 UTC
> Andreas, can you please file a xkeyboard-config bug to get this snipped
> introduced by default into the keymap. I think it's useful enough to carry
> it.

Sorry for wasting another four months.  Now it is there, bug 56491.
Comment 45 nabukadnezar43 2012-10-29 21:22:31 UTC
The reason why my startup script wasn't working was because i forgot to make it executable. It's working now.

I'll keep this script until the next release of xkeyboard-config. Thanks a lot Andreas and Peter.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.