// Updated map for using evdev (default on Debian xserver-xorg 1:7.4+4) //setxkbmap -model pc105 -layout fr -variant oss -print // returns: //xkb_keymap { // xkb_keycodes { include "evdev+aliases(azerty)" }; // xkb_types { include "complete+caps(shift)" }; // xkb_compat { include "complete" }; // xkb_symbols { include "pc+fr(oss)+inet(evdev)+altwin(menu)+level3(ralt_switch)+ctrl(ctrl_aa)+compose(rwin)" }; // xkb_geometry { include "pc(pc105)" }; //}; xkb_keymap { xkb_keycodes { include "evdev+aliases(azerty)" }; xkb_types { include "complete+caps(shift)" type "ALTGR_TWO" { modifiers = LevelThree; map[None] = Level1; map[LevelThree] = Level2; level_name[Level1] = "Base"; level_name[Level2] = "AltGr"; }; }; xkb_compatibility { include "complete" // indicator "Scroll Lock" { controls = Overlay1; allowExplicit = True; drivesKeyboard = False; }; interpret F24 { action = Redirect(Key=, modifiers=Control); // ctrl-r }; interpret F25 { action = Redirect(Key=, modifiers=Control); // ctrl-f }; interpret F26 { action = LockControls(controls=Overlay1); }; interpret F27 { action = Redirect(Key=, modifiers=Control); // ctrl-s }; interpret F28 { action = Redirect(Key=, modifiers=Control); // ctrl-← }; interpret F29 { action = Redirect(Key=, modifiers=Control); // ctrl-→ }; interpret F30 { action = Redirect(Key=, modifiers=Mod1); // Alt-Tab }; interpret F31 { action = Redirect(Key=, modifiers=Control); // ctrl-x }; interpret F32 { action = Redirect(Key=, modifiers=Control); // ctrl-c }; interpret F33 { action = Redirect(Key=, modifiers=Control); // ctrl-v }; interpret F34 { action = Redirect(Key=, modifiers=Control); // ctrl-z }; interpret F35 { action = Redirect(Key=, modifiers=Control); // ctrl-y }; }; partial alphanumeric_keys xkb_symbols "dvorak" { name[Group1]= "France - Bepo, ergonomic, Dvorak way (v0.6.6)"; include "pc+fr(oss)+inet(evdev)+altwin(menu)+level3(ralt_switch)+ctrl(ctrl_aa)+compose(rwin)" key { type[group1] = "FOUR_LEVEL" , [ dollar , numbersign , endash , paragraph ], overlay1 = }; // $ # – § key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl , 1 , emdash , doublelowquotemark ], overlay1 = }; // " 1 — „ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ less , 2 , guillemotleft , leftdoublequotemark ], type[group2] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotleft , 2 , less , leftdoublequotemark ], overlay1 = }; // « 2 < “ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ greater , 3 , guillemotright , rightdoublequotemark ], type[group2] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotright , 3 , greater , rightdoublequotemark ], overlay1 = }; // » 3 > ” key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft , 4 , U2192 , lessthanequal ], overlay1 = }; // ( 4 [ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright , 5 , U21D2 , greaterthanequal ], overlay1 = }; // ) 5 ] key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ at , 6 , asciicircum ], overlay1 = }; // @ 6 ¬ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ plus , 7 , plusminus , notsign ], overlay1 = }; // + 7 ± ° key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus , 8 , U2212 , U00BC ], overlay1 = }; // - 8 − ′ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ slash , 9 , division , U00BD ], overlay1 = }; // / 9 ÷ ″ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ asterisk , 0 , multiply , U00BE ], overlay1 = }; // * 0 × key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ equal , degree , notequal, minutes ], overlay1 = }; // = ^ ≠ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ percent , UFDD4 , U2030, seconds ], overlay1 = }; // % ` ‰ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ b , B , bar , brokenbar ], overlay1 = }; // b B | ¦ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ eacute , Eacute , dead_acute , dead_doubleacute ], overlay1 = }; // é É ´ ˝ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ p , P , ampersand , section ], overlay1 = }; // p P & ¶ key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ o , O , oe , OE ], overlay1 = }; // o O œ Œ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ w , W ], overlay1 = }; // è È ` ` key { type[group1] = "FOUR_LEVEL" , [ dead_circumflex, exclam , exclamdown ], overlay1 = }; // ^ ! ˇ ¡ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ v , V, dead_caron ], overlay1 = }; // v V key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ d , D , eth , ETH ], overlay1 = }; // d D ð Ð key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ l , L , UFDD0 , VoidSymbol ], overlay1 = }; // l L / key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ j , J , U0133 , U0132 ], overlay1 = }; // j J ij IJ key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ dead_grave, grave , schwa , SCHWA ], overlay1 = }; // z Z ə Ə key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ dead_diaeresis , dead_abovedot, dead_breve , VoidSymbol ], overlay1 = }; // w W ˘ key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ a , A , ae , AE ], overlay1 = // LFSH si pas d'inversion }; // a A æ Æ key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ u , U , bracketleft ], overlay1 = }; // u U ù Ù key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ i , I , bracketright ], overlay1 = }; // i I ¨ ˙ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ e , E , EuroSign , UFDD1 ], overlay1 = }; // e E € ¤ key { type[group1] = "THREE_LEVEL" , [ comma , semicolon, rightsinglequotemark ], type[group2] = "THREE_LEVEL" , [ comma , semicolon, apostrophe ], overlay1 = // }; // , ; ’ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ c , C , copyright , U017F ], overlay1 = }; // c C © ſ key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ t , T , thorn , THORN ], overlay1 = }; // t T þ Þ key { type[group1] = "FOUR_LEVEL_ALPHABETIC", [ s , S , ssharp , U1E9E ], overlay1 = }; // s S ß ẞ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ r , R , registered , trademark ], overlay1 = }; // r R ® ™ key { type[group1] = "FOUR_LEVEL_ALPHABETIC" , [ n , N , ntilde , Ntilde ], overlay1 = }; // n N ñ Ñ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ m , M , dead_macron , masculine ], overlay1 = }; // m M ¯ º key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ ccedilla , Ccedilla , dead_cedilla , UFDD3 ], overlay1 = }; // ç Ç ¸ , key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ ecircumflex , Ecircumflex , slash , VoidSymbol ], overlay1 = }; // ê Ê / key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ z , Z , backslash , VoidSymbol ], overlay1 = }; // à À \ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ y , Y , braceleft , leftsinglequotemark ], overlay1 = }; // y Y { ‘ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ x , X , braceright , rightsinglequotemark ], overlay1 = }; // x X } ’ key { type[group1] = "FOUR_LEVEL" , [ period , colon , ellipsis , periodcentered ], overlay1 = }; // . : … · key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ k , K , asciitilde , dead_tilde ], overlay1 = }; // k K ~ ~ key { type[group1] = "FOUR_LEVEL" , [ apostrophe , question , U02BC , questiondown ], type[group2] = "FOUR_LEVEL" , [ rightsinglequotemark, question, U02BC , questiondown ], overlay1 = }; // ' ? ¿ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ q , Q , dead_abovering , VoidSymbol ], overlay1 = }; // q Q ˚ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ g , G , UFDD2 , VoidSymbol ], overlay1 = }; // g G µ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ h , H , dagger , doubledagger ], overlay1 = }; // h H † ‡ key { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ f , F , dead_ogonek , ordfeminine ], overlay1 = }; // f F ˛ ª key { type[group1] = "FOUR_LEVEL" , [ space , space, underscore , nobreakspace ], type[group2] = "FOUR_LEVEL" , [ space , nobreakspace, underscore , U202F ] //, overlay1 = }; // _ // Unused keys mapped to ctrl+letter actions key { [ r ] }; key { [ f ] }; key { [ s ] }; key { [ Tab ] }; key { [ VoidSymbol ] }; key { [ x ] }; key { [ c ] }; key { [ v ] }; key { [ z ] }; key { [ y ] }; key { [ space ] }; // For some reason there are SOMETIMES (not always!) errors with this code: // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-x // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-c // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-v // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-z // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-y // However passing the action in the « interpret » section for an unsused symbol seems to work key { [ F24 ] }; // ctrl-R key { [ F25 ] }; // ctrl-F key { [ F28 ] }; // ctrl-left key { [ F29 ] }; // ctrl-right key { [ F30 ] }; // Alt+Tab // key { [ Tab ], actions = [ setMods(modifiers=Mod1) ] }; // Alt+Tab key { [ F31 ] }; // ctrl-x key { [ F32 ] }; // ctrl-c key { [ F33 ] }; // ctrl-v key { [ F34 ] }; // ctrl-z key { [ F35 ] }; // ctrl-y key { [ F27 ] }; // ctrl-s // Using < 127 keycodes also works // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-x // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-c // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-v // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-z // key { actions[group1] = [ Redirect(keycode=, modifiers=Control) ] }; // ctrl-y // See also the bug thread here : https://bugs.freedesktop.org/show_bug.cgi?id=12401 // Transforme CAPS en lock de couche alternative « déplacement/édition », et garde le caps-lock habituel en AltGr // key { type = "ALTGR_TWO", actions = [ LockControls(controls=Overlay1), LockMods(modifiers=Lock) ] }; // Pour échanger Shift et Caps_Lock // key { [ Shift_L ], actions = [ SetMods(modifiers=Shift) ] }; // key { [ Caps_Lock ] }; // Combinaison des 2 : attention, requière que les LFSH et CAPS dans les définitions de la touche soient aussi échangées dans la partie principale // key { type = "ALTGR_TWO", actions = [ LockControls(controls=Overlay1), LockMods(modifiers=Lock) ] }; // key { [ Shift_L ], actions = [ SetMods(modifiers=Shift) ] }; // shift + lock // key { type = "ALTGR_TWO", [ Shift_L, Caps_Lock ], actions = [ SetMods(modifiers=Shift), LockMods(modifiers=Lock) ] }; // key { type = "ALTGR_TWO", actions = [ SetControls(controls=Overlay1), LockControls(controls=Overlay1) ] }; // Pour transformer CAPS en un AltGr gauche, en gardant le lock habituel en AltGr // key { type = "ALTGR_TWO", [ ISO_Level3_Shift, Caps_Lock ], actions = [ SetMods(modifiers=LevelThree), LockMods(modifiers=Lock) ] }; // Pour transformer LWIN en un AltGr gauche // key { [ ISO_Level3_Shift ], actions = [ SetMods(modifiers=LevelThree) ] }; // Pour mettre un Compose sur RWIN key { [ Multi_key, Multi_key, Multi_key, Multi_key ] }; // Pour que LWIN permette de changer de groupe // key { [ ISO_Next_Group, ISO_Prev_Group, ISO_Next_Group, ISO_Prev_Group ] }; // Échange CTRL et Alt Gauches. Et puisque LWIN est réaffectée, garde un modificateur META en niveau 3 et 4 (AltGr) // Note: Activer cette option fonctionne mieux lorsque que l'on échange aussi les raccourcis du style Alt+Tab… // key { [ Control_L ], actions = [ SetMods(modifiers=Control) ] }; // key { type[group1] = "FOUR_LEVEL", [ Alt_L, Alt_L, Meta_L, Meta_L ], actions = [ SetMods(modifiers=Mod1), SetMods(modifiers=Mod1), SetMods(modifiers=Mod4), SetMods(modifiers=Mod4) ] }; // key { type = "ALTGR_TWO", [ Shift_L, Caps_Lock ], actions = [ SetMods(modifiers=Shift), LockMods(modifiers=Lock) ] }; key { type = "ONE_LEVEL", [ Shift_L ], actions = [ SetMods(modifiers=Shift) ] }; key { type = "ALTGR_TWO", [ VoidSymbol ], actions = [ SetControls(controls=Overlay1), LockControls(controls=Overlay1) ] }; // key { type = "ONE_LEVEL", [ VoidSymbol ], actions = [ LockControls(controls=Overlay1) ] }; key { [ ISO_Next_Group, ISO_Prev_Group, ISO_Next_Group, ISO_Prev_Group ] }; key { type[group1] = "FOUR_LEVEL", [ Alt_L, Alt_L, Meta_L, Meta_L ], actions = [ SetMods(modifiers=Mod1), SetMods(modifiers=Mod1), SetMods(modifiers=Mod4), SetMods(modifiers=Mod4) ] }; // Make Alt+Tab still work in the overlay ! // key { // // would need an appropriate type here [ Tab, ISO_Left_Tab ], // overlay1 = // }; include "level3(ralt_switch)" }; xkb_geometry { include "pc(pc105)" }; }; // ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔═════════╗ // │ │ │ │ │ │ │ ║ │page│page│ │ │ ║ ║ // │ │ │ │ │ │ │ ║ │prec│suiv│ │ │ ║ <-- ║ // ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦══════╣ // ║ |<- ║ │ │ │ │ ║ │ │ │ │ │ │ ║ | ║ // ║ ->| ║ │ ^R │ ^F │ │ ║ │ déb│ ↑ │ fin│ │ │ ║ <-' ║ // ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗ ║ // ║ ║ │ │ │ │ ║ │ │ │ │ │ │ ║ ║ // ║ Maj. ⇑ ║shft│ ^X │ ^C │ ^V │entr│entr│ ← │ ↓ │ → │ ^Z │ ^Y │ ║ ║ // ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩═════╣ // ║ «»’ ║ │ │ │ │ │ ║ │ │ │ │ ║ ^ ║ // ║ <>' ║ │ │bksp│ del│ │ ║ │ ^← │ ↓ │ ^→ │ ^S ║ | ║ // ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧════╧╦═══╧═╦══╧════╬═════╦══════╣ // ║ ║ ║ ║ ║ ║ ║ ║ ║ // ║ Ctrl ║ Alt ║ Fn ⇄║ Espace ║AltGr║Compose║WinM ║ Ctrl ║ // ╚═══════╩══════╩═════╩══════════════════════════╩═════╩═══════╩═════╩══════╝