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"
seems to work fine for me. what's your xkb configuration (the output ofxkbcomp -xkb $DISPLAY -)?
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> }; }; };
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.
(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.
Since here is a bug-report site, this is not a solution.
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!
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?
(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.
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.
And also how I could type it wrong in Linux, while typing in same way for decade without any mistake in Windows.
Here is a video that I reproduce the problem on Pardus 2011 : http://www.youtube.com/watch?v=0Xa6_yJYMsU
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
What's the situation now ? Any progress ?
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.
ANy Solution?? please??
http://patchwork.freedesktop.org/patch/6538/
Thank you. I'm going to install Ubuntu again, hoping the patch will work. I will post here the result.
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$
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.
> 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.
> 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".
(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.
> > 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.
(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?
> > 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).
Created attachment 49973 [details] [review] noLock and noUnlock in _XkbFilterLockState
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.
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)".
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.
(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/
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?
(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.
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
(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?
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.
(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.
(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> {...
(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.
(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?
(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.
(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.
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.
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.
> 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.
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.