Marc's Public Blog


All | Aquariums | Arduino | Btrfs | Cars | Cats | Clubbing | Dining | Diving | Electronics | Exercising | Flying | Hiking | Linux | Linuxha | Museums | Public | Rc | Sciencemuseums | Snow | Solar | Trips




More pages: September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 February 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 October 2003 August 2003 July 2003 May 2003 April 2003 March 2003 January 2003 November 2002 October 2002 July 2002 May 2002 April 2002 March 2002 February 2002 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 May 2001 April 2001 March 2001 February 2001 January 2001 December 2000 November 2000 October 2000 September 2000 August 2000 July 2000 June 2000 April 1999 March 1999 September 1997 August 1997 July 1996 September 1993 July 1991 December 1988 December 1985 January 1980




2017/09/03 Xorg Switching From Xmodmap To Xkbcomp and Setxkbmap
π 2017-09-03 00:00 in Linux
I've been typing french on qwerty keyboards for close to 25 years. Using dead keys is a pain, and having characters like ` be dead key characters without using a compose key to enable them as dead characters, is even more of a pain.
While the compose solution works, compose + ' + release + e to get é is kind of painful, so I wrote an xmodmap file that simply allowed right alt + e for é, right alt + shift + e for è.

After 20+ years of using this xmodmap file with Xorg, it finally stopped working and causing more Xorg bugs that were not going to be fixed.

keycode 105 = Multi_key
keycode 108 = Mode_switch Alt_R Meta_R

keycode 15 = 6 asciicircum dead_circumflex dead_circumflex keycode 49 = grave asciitilde dead_grave dead_grave keycode 48 = apostrophe quotedbl dead_acute dead_diaeresis

keycode 38 = a A agrave agrave acircumflex adiaeresis keycode 26 = e E eacute egrave ecircumflex ediaeresis keycode 30 = u U ugrave ugrave ucircumflex udiaeresis keycode 31 = i I icircumflex idiaeresis keycode 32 = o O ocircumflex odiaeresis keycode 54 = c C ccedilla ccedilla

I'll skip the choice words on the Xorg team for just letting xmodmap rot and die. Then, I'll express more dissatisfaction on how they didn't just give a converter. This "I'm going to break you and I don't really care" attitude, even if non willful, is not cool.

So, I was left to fix my own problem, ok, after all I've been fixing linux problems for more than 20 years, so it can't be so bad, right? Well, it was. It took me hours and hours over multiple days. Searching implies that something seemingly simple as typing

setxkbmap -model pc104 -layout us -variant intl (or altgr-intl)
should work, but it did not. I got the compose key working on right CTRL, but not right ALT.

More googling gave me this:

setxkbmap -model pc104 -layout us -variant intl (or altgr-intl) -option -option lv3:ralt_switch,compose:rctrl,eurosign:4
And finally I could get € by typing right ALT + 4, but I didn't get é when I typed right ALT + e. Dead keys did work though (right CTRL + ' + e = é), but that's a lot slower than just typing right ALT + e at the same time.

After hours of going nowhere on reading that it should work, when it clearly didn't, I finally managed to dump my key mappings (that along isn't really documented well either):

xkbcomp -xkb :0 
actually dumps all the keys into a file called server-0.xkb. I then started editing it, and realized that my Xmodmap converted file had
    key <AD03> {
        type= "ALPHABETIC",
        symbols[Group1]= [               e,               E ]
        symbols[Group2]= [          eacute,          egrave ],
        symbols[Group3]= [     ecircumflex,      ediaeresis ],
        symbols[Group4]= [     ecircumflex,      ediaeresis ]
    };
when apparently I needed:
    key <AD03> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               e,               E ,          eacute,          egrave ]
    };
(lvl3 mapping doesn't seem to activate Group2 reliably, or at all, so I had to switch from type= "ALPHABETIC" to type= "FOUR_LEVEL" and that _finally_ worked).

So now I have a ~/xkb-keymap file that I can load with

xkbcomp ~/xkb-keymap :0
Honestly, I have no idea why I had to do all this, or why it works apparently more simply for others. I have xorg 1:7.7+19 on debian testing.

I'm attaching my whole file if it helps someone (congratulation if google brings you to this page)

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;
    <KATA> = 98;
    <HIRA> = 99;
    <HENK> = 100;
    <HKTG> = 101;
    <MUHE> = 102;
    <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;
    <MUTE> = 121;
    <VOL-> = 122;
    <VOL+> = 123;
    <POWR> = 124;
    <KPEQ> = 125;
    <I126> = 126;
    <PAUS> = 127;
    <I128> = 128;
    <I129> = 129;
    <HNGL> = 130;
    <HJCV> = 131;
    <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;
    <I150> = 150;
    <I151> = 151;
    <I152> = 152;
    <I153> = 153;
    <I155> = 155;
    <I156> = 156;
    <I157> = 157;
    <I158> = 158;
    <I159> = 159;
    <I160> = 160;
    <I162> = 162;
    <I163> = 163;
    <I164> = 164;
    <I165> = 165;
    <I166> = 166;
    <I167> = 167;
    <I169> = 169;
    <I170> = 170;
    <I171> = 171;
    <I172> = 172;
    <I173> = 173;
    <I174> = 174;
    <I175> = 175;
    <I176> = 176;
    <I177> = 177;
    <I179> = 179;
    <I180> = 180;
    <I181> = 181;
    <I182> = 182;
    <I185> = 185;
    <I186> = 186;
    <I187> = 187;
    <I188> = 188;
    <I189> = 189;
    <I190> = 190;
    <FK13> = 191;
    <FK14> = 192;
    <FK15> = 193;
    <FK16> = 194;
    <FK17> = 195;
    <FK18> = 196;
    <FK21> = 199;
    <FK22> = 200;
    <FK23> = 201;
    <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;
    <I218> = 218;
    <I220> = 220;
    <I223> = 223;
    <I224> = 224;
    <I225> = 225;
    <I226> = 226;
    <I227> = 227;
    <I228> = 228;
    <I229> = 229;
    <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;
    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 Shift_L+AnyOfOrNone(all) { action= SetMods(modifiers=Shift,clearLocks); }; interpret XF86Switch_VT_1+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=1,!same); }; interpret XF86Switch_VT_2+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=2,!same); }; interpret XF86Switch_VT_3+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=3,!same); }; interpret XF86Switch_VT_4+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=4,!same); }; interpret XF86Switch_VT_5+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=5,!same); }; interpret XF86Switch_VT_6+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=6,!same); }; interpret XF86Switch_VT_7+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=7,!same); }; interpret XF86Switch_VT_8+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=8,!same); }; interpret XF86Switch_VT_9+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=9,!same); }; interpret XF86Switch_VT_10+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=10,!same); }; interpret XF86Switch_VT_11+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=11,!same); }; interpret XF86Switch_VT_12+AnyOfOrNone(all) { repeat= True; action= SwitchScreen(screen=12,!same); }; interpret XF86Ungrab+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 XF86ClearGrab+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 XF86Next_VMode+AnyOfOrNone(all) { repeat= True; action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00); }; interpret XF86Prev_VMode+AnyOfOrNone(all) { repeat= True; action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00); }; interpret ISO_Level5_Shift+AnyOfOrNone(all) { action= SetMods(modifiers=LevelFive,clearLocks); }; interpret ISO_Level5_Latch+AnyOfOrNone(all) { action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock); }; interpret ISO_Level5_Lock+AnyOfOrNone(all) { action= LockMods(modifiers=LevelFive); }; interpret Caps_Lock+AnyOfOrNone(all) { action= LockMods(modifiers=Lock); }; interpret Any+Exactly(Lock) { action= LockMods(modifiers=Lock); }; interpret Any+AnyOf(all) { action= SetMods(modifiers=modMapMods,clearLocks); }; 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+us+inet(evdev)+level3(ralt_switch)+compose(rctrl)+eurosign(4)" {

name[group1]="English (US)";

key <ESC> { [ Escape ] }; key <AE01> { [ 1, exclam ] }; key <AE02> { [ 2, at ] }; key <AE03> { [ 3, numbersign ] }; key <AE04> { type= "FOUR_LEVEL", symbols[Group1]= [ 4, dollar, EuroSign, NoSymbol ] }; key <AE05> { [ 5, percent ] }; key <AE06> { [ 6, asciicircum ] }; key <AE07> { [ 7, ampersand ] }; key <AE08> { [ 8, asterisk ] }; key <AE09> { [ 9, parenleft ] }; key <AE10> { [ 0, parenright ] }; key <AE11> { [ minus, underscore ] }; key <AE12> { [ equal, plus ] }; key <BKSP> { [ BackSpace ] }; key <TAB> { [ Tab, ISO_Left_Tab ] }; key <AD01> { type= "ALPHABETIC", symbols[Group1]= [ q, Q ] }; key <AD02> { type= "ALPHABETIC", symbols[Group1]= [ w, W ] }; key <AD03> { type= "FOUR_LEVEL", symbols[Group1]= [ e, E , eacute, egrave ] }; key <AD04> { type= "ALPHABETIC", symbols[Group1]= [ r, R ] }; key <AD05> { type= "ALPHABETIC", symbols[Group1]= [ t, T ] }; key <AD06> { type= "ALPHABETIC", symbols[Group1]= [ y, Y ] }; key <AD07> { type= "FOUR_LEVEL", symbols[Group1]= [ u, U, ugrave, ucircumflex ] }; key <AD08> { type= "FOUR_LEVEL", symbols[Group1]= [ i, I, icircumflex, idiaeresis ] }; key <AD09> { type= "FOUR_LEVEL", symbols[Group1]= [ o, O, ocircumflex, odiaeresis ] }; key <AD10> { type= "ALPHABETIC", symbols[Group1]= [ p, P ] }; key <AD11> { [ bracketleft, braceleft ] }; key <AD12> { [ bracketright, braceright ] }; key <RTRN> { [ Return ] }; key <LCTL> { [ Control_L ] }; key <AC01> { type= "FOUR_LEVEL", symbols[Group1]= [ a, A, agrave, acircumflex ] }; key <AC02> { type= "ALPHABETIC", symbols[Group1]= [ s, S ] }; key <AC03> { type= "ALPHABETIC", symbols[Group1]= [ d, D ] }; key <AC04> { type= "ALPHABETIC", symbols[Group1]= [ f, F ] }; key <AC05> { type= "ALPHABETIC", symbols[Group1]= [ g, G ] }; key <AC06> { type= "ALPHABETIC", symbols[Group1]= [ h, H ] }; key <AC07> { type= "ALPHABETIC", symbols[Group1]= [ j, J ] }; key <AC08> { type= "ALPHABETIC", symbols[Group1]= [ k, K ] }; key <AC09> { type= "ALPHABETIC", symbols[Group1]= [ l, L ] }; key <AC10> { [ semicolon, colon ] }; key <AC11> { [ apostrophe, quotedbl ] }; key <TLDE> { [ grave, asciitilde ] }; key <LFSH> { [ Shift_L ] }; key <BKSL> { [ backslash, bar ] }; key <AB01> { type= "ALPHABETIC", symbols[Group1]= [ z, Z ] }; key <AB02> { type= "ALPHABETIC", symbols[Group1]= [ x, X ] }; key <AB03> { type= "FOUR_LEVEL", symbols[Group1]= [ c, C, ccedilla, ccedilla ] }; key <AB04> { type= "ALPHABETIC", symbols[Group1]= [ v, V ] }; key <AB05> { type= "ALPHABETIC", symbols[Group1]= [ b, B ] }; key <AB06> { type= "ALPHABETIC", symbols[Group1]= [ n, N ] }; key <AB07> { type= "ALPHABETIC", symbols[Group1]= [ m, M ] }; key <AB08> { [ comma, less ] }; key <AB09> { [ period, greater ] }; key <AB10> { [ slash, question ] }; key <RTSH> { [ Shift_R ] }; key <KPMU> { type= "CTRL+ALT", symbols[Group1]= [ KP_Multiply, XF86ClearGrab ] }; key <LALT> { [ Alt_L, Meta_L ] }; key <SPCE> { [ space ] }; key <CAPS> { [ Caps_Lock ] }; key <FK01> { type= "CTRL+ALT", symbols[Group1]= [ F1, XF86Switch_VT_1 ] }; key <FK02> { type= "CTRL+ALT", symbols[Group1]= [ F2, XF86Switch_VT_2 ] }; key <FK03> { type= "CTRL+ALT", symbols[Group1]= [ F3, XF86Switch_VT_3 ] }; key <FK04> { type= "CTRL+ALT", symbols[Group1]= [ F4, XF86Switch_VT_4 ] }; key <FK05> { type= "CTRL+ALT", symbols[Group1]= [ F5, XF86Switch_VT_5 ] }; key <FK06> { type= "CTRL+ALT", symbols[Group1]= [ F6, XF86Switch_VT_6 ] }; key <FK07> { type= "CTRL+ALT", symbols[Group1]= [ F7, XF86Switch_VT_7 ] }; key <FK08> { type= "CTRL+ALT", symbols[Group1]= [ F8, XF86Switch_VT_8 ] }; key <FK09> { type= "CTRL+ALT", symbols[Group1]= [ F9, XF86Switch_VT_9 ] }; key <FK10> { type= "CTRL+ALT", symbols[Group1]= [ F10, XF86Switch_VT_10 ] }; key <NMLK> { [ Num_Lock ] }; key <SCLK> { [ Scroll_Lock ] }; key <KP7> { [ KP_Home, KP_7 ] }; key <KP8> { [ KP_Up, KP_8 ] }; key <KP9> { [ KP_Prior, KP_9 ] }; key <KPSU> { type= "CTRL+ALT", symbols[Group1]= [ KP_Subtract, XF86Prev_VMode ] }; key <KP4> { [ KP_Left, KP_4 ] }; key <KP5> { [ KP_Begin, KP_5 ] }; key <KP6> { [ KP_Right, KP_6 ] }; key <KPAD> { type= "CTRL+ALT", symbols[Group1]= [ KP_Add, XF86Next_VMode ] }; key <KP1> { [ KP_End, KP_1 ] }; key <KP2> { [ KP_Down, KP_2 ] }; key <KP3> { [ KP_Next, KP_3 ] }; key <KP0> { [ KP_Insert, KP_0 ] }; key <KPDL> { [ KP_Delete, KP_Decimal ] }; key <LVL3> { [ ISO_Level3_Shift ] }; key <LSGT> { type= "FOUR_LEVEL", symbols[Group1]= [ less, greater, bar, brokenbar ] }; key <FK11> { type= "CTRL+ALT", symbols[Group1]= [ F11, XF86Switch_VT_11 ] }; key <FK12> { type= "CTRL+ALT", symbols[Group1]= [ F12, XF86Switch_VT_12 ] }; key <KATA> { [ Katakana ] }; key <HIRA> { [ Hiragana ] }; key <HENK> { [ Henkan_Mode ] }; key <HKTG> { [ Hiragana_Katakana ] }; key <MUHE> { [ Muhenkan ] }; key <KPEN> { [ KP_Enter ] }; key <RCTL> { type= "TWO_LEVEL", symbols[Group1]= [ Multi_key, Multi_key ] }; key <KPDV> { type= "CTRL+ALT", symbols[Group1]= [ KP_Divide, XF86Ungrab ] }; key <PRSC> { type= "PC_ALT_LEVEL2", symbols[Group1]= [ Print, Sys_Req ] }; key <RALT> { type= "ONE_LEVEL", symbols[Group1]= [ ISO_Level3_Shift ] }; key <LNFD> { [ Linefeed ] }; key <HOME> { [ Home ] }; key <UP> { [ Up ] }; key <PGUP> { [ Prior ] }; key <LEFT> { [ Left ] }; key <RGHT> { [ Right ] }; key <END> { [ End ] }; key <DOWN> { [ Down ] }; key <PGDN> { [ Next ] }; key <INS> { [ Insert ] }; key <DELE> { [ Delete ] }; key <MUTE> { [ XF86AudioMute ] }; key <VOL-> { [ XF86AudioLowerVolume ] }; key <VOL+> { [ XF86AudioRaiseVolume ] }; key <POWR> { [ XF86PowerOff ] }; key <KPEQ> { [ KP_Equal ] }; key <I126> { [ plusminus ] }; key <PAUS> { type= "PC_CONTROL_LEVEL2", symbols[Group1]= [ Pause, Break ] }; key <I128> { [ XF86LaunchA ] }; key <I129> { [ KP_Decimal, KP_Decimal ] }; key <HNGL> { [ Hangul ] }; key <HJCV> { [ Hangul_Hanja ] }; key <LWIN> { [ Super_L ] }; key <RWIN> { [ Super_R ] }; key <COMP> { [ Menu ] }; key <STOP> { [ Cancel ] }; key <AGAI> { [ Redo ] }; key <PROP> { [ SunProps ] }; key <UNDO> { [ Undo ] }; key <FRNT> { [ SunFront ] }; key <COPY> { [ XF86Copy ] }; key <OPEN> { [ SunOpen ] }; key <PAST> { [ XF86Paste ] }; key <FIND> { [ Find ] }; key <CUT> { [ XF86Cut ] }; key <HELP> { [ Help ] }; key <I147> { [ XF86MenuKB ] }; key <I148> { [ XF86Calculator ] }; key <I150> { [ XF86Sleep ] }; key <I151> { [ XF86WakeUp ] }; key <I152> { [ XF86Explorer ] }; key <I153> { [ XF86Send ] }; key <I155> { [ XF86Xfer ] }; key <I156> { [ XF86Launch1 ] }; key <I157> { [ XF86Launch2 ] }; key <I158> { [ XF86WWW ] }; key <I159> { [ XF86DOS ] }; key <I160> { [ XF86ScreenSaver ] }; key <I162> { [ XF86RotateWindows ] }; key <I163> { [ XF86Mail ] }; key <I164> { [ XF86Favorites ] }; key <I165> { [ XF86MyComputer ] }; key <I166> { [ XF86Back ] }; key <I167> { [ XF86Forward ] }; key <I169> { [ XF86Eject ] }; key <I170> { [ XF86Eject, XF86Eject ] }; key <I171> { [ XF86AudioNext ] }; key <I172> { [ XF86AudioPlay, XF86AudioPause ] }; key <I173> { [ XF86AudioPrev ] }; key <I174> { [ XF86AudioStop, XF86Eject ] }; key <I175> { [ XF86AudioRecord ] }; key <I176> { [ XF86AudioRewind ] }; key <I177> { [ XF86Phone ] }; key <I179> { [ XF86Tools ] }; key <I180> { [ XF86HomePage ] }; key <I181> { [ XF86Reload ] }; key <I182> { [ XF86Close ] }; key <I185> { [ XF86ScrollUp ] }; key <I186> { [ XF86ScrollDown ] }; key <I187> { [ parenleft ] }; key <I188> { [ parenright ] }; key <I189> { [ XF86New ] }; key <I190> { [ Redo ] }; key <FK13> { [ XF86Tools ] }; key <FK14> { [ XF86Launch5 ] }; key <FK15> { [ XF86Launch6 ] }; key <FK16> { [ XF86Launch7 ] }; key <FK17> { [ XF86Launch8 ] }; key <FK18> { [ XF86Launch9 ] }; key <FK21> { [ XF86TouchpadToggle ] }; key <FK22> { [ XF86TouchpadOn ] }; key <FK23> { [ XF86TouchpadOff ] }; key <MDSW> { [ Mode_switch ] }; key <ALT> { [ NoSymbol, Alt_L ] }; key <META> { [ NoSymbol, Meta_L ] }; key <SUPR> { [ NoSymbol, Super_L ] }; key <HYPR> { [ NoSymbol, Hyper_L ] }; key <I208> { [ XF86AudioPlay ] }; key <I209> { [ XF86AudioPause ] }; key <I210> { [ XF86Launch3 ] }; key <I211> { [ XF86Launch4 ] }; key <I212> { [ XF86LaunchB ] }; key <I213> { [ XF86Suspend ] }; key <I214> { [ XF86Close ] }; key <I215> { [ XF86AudioPlay ] }; key <I216> { [ XF86AudioForward ] }; key <I218> { [ Print ] }; key <I220> { [ XF86WebCam ] }; key <I223> { [ XF86Mail ] }; key <I224> { [ XF86Messenger ] }; key <I225> { [ XF86Search ] }; key <I226> { [ XF86Go ] }; key <I227> { [ XF86Finance ] }; key <I228> { [ XF86Game ] }; key <I229> { [ XF86Shop ] }; key <I231> { [ Cancel ] }; key <I232> { [ XF86MonBrightnessDown ] }; key <I233> { [ XF86MonBrightnessUp ] }; key <I234> { [ XF86AudioMedia ] }; key <I235> { [ XF86Display ] }; key <I236> { [ XF86KbdLightOnOff ] }; key <I237> { [ XF86KbdBrightnessDown ] }; key <I238> { [ XF86KbdBrightnessUp ] }; key <I239> { [ XF86Send ] }; key <I240> { [ XF86Reply ] }; key <I241> { [ XF86MailForward ] }; key <I242> { [ XF86Save ] }; key <I243> { [ XF86Documents ] }; key <I244> { [ XF86Battery ] }; key <I245> { [ XF86Bluetooth ] }; key <I246> { [ XF86WLAN ] }; modifier_map Control { <LCTL> }; modifier_map Shift { <LFSH> }; modifier_map Shift { <RTSH> }; modifier_map Mod1 { <LALT> }; modifier_map Lock { <CAPS> }; modifier_map Mod2 { <NMLK> }; modifier_map Mod5 { <LVL3> }; modifier_map Mod4 { <LWIN> }; modifier_map Mod4 { <RWIN> }; modifier_map Mod5 { <MDSW> }; modifier_map Mod1 { <META> }; modifier_map Mod4 { <SUPR> }; modifier_map Mod4 { <HYPR> }; };

xkb_geometry "pc(pc104)" {

width= 470; height= 180;

alias <AC00> = <CAPS>; alias <AA00> = <LCTL>;

baseColor= "white"; labelColor= "black"; xfont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1"; description= "Generic 104";

shape "NORM" { corner= 1, { [ 18, 18 ] }, { [ 2, 1 ], [ 16, 16 ] } }; shape "BKSP" { corner= 1, { [ 38, 18 ] }, { [ 2, 1 ], [ 36, 16 ] } }; shape "TABK" { corner= 1, { [ 28, 18 ] }, { [ 2, 1 ], [ 26, 16 ] } }; shape "BKSL" { corner= 1, { [ 28, 18 ] }, { [ 2, 1 ], [ 26, 16 ] } }; shape "RTRN" { corner= 1, { [ 42, 18 ] }, { [ 2, 1 ], [ 40, 16 ] } }; shape "CAPS" { corner= 1, { [ 33, 18 ] }, { [ 2, 1 ], [ 31, 16 ] } }; shape "LFSH" { corner= 1, { [ 42, 18 ] }, { [ 2, 1 ], [ 40, 16 ] } }; shape "RTSH" { corner= 1, { [ 52, 18 ] }, { [ 2, 1 ], [ 50, 16 ] } }; shape "MODK" { corner= 1, { [ 27, 18 ] }, { [ 2, 1 ], [ 25, 16 ] } }; shape "SMOD" { corner= 1, { [ 23, 18 ] }, { [ 2, 1 ], [ 21, 16 ] } }; shape "SPCE" { corner= 1, { [ 113, 18 ] }, { [ 2, 1 ], [ 111, 16 ] } }; shape "KP0" { corner= 1, { [ 37, 18 ] }, { [ 2, 1 ], [ 35, 16 ] } }; shape "KPAD" { corner= 1, { [ 18, 37 ] }, { [ 2, 1 ], [ 16, 35 ] } }; shape "LEDS" { { [ 75, 20 ] } }; shape "LED" { { [ 5, 1 ] } }; section "Function" { key.color= "grey20"; priority= 7; top= 22; left= 19; width= 351; height= 19; row { top= 1; left= 1; keys { { <ESC>, "NORM", 1 }, { <FK01>, "NORM", 20, color="white" }, { <FK02>, "NORM", 1, color="white" }, { <FK03>, "NORM", 1, color="white" }, { <FK04>, "NORM", 1, color="white" }, { <FK05>, "NORM", 11, color="white" }, { <FK06>, "NORM", 1, color="white" }, { <FK07>, "NORM", 1, color="white" }, { <FK08>, "NORM", 1, color="white" }, { <FK09>, "NORM", 11, color="white" }, { <FK10>, "NORM", 1, color="white" }, { <FK11>, "NORM", 1, color="white" }, { <FK12>, "NORM", 1, color="white" }, { <PRSC>, "NORM", 8, color="white" }, { <SCLK>, "NORM", 1, color="white" }, { <PAUS>, "NORM", 1, color="white" } }; }; }; // End of "Function" section

section "Alpha" { key.color= "white"; priority= 8; top= 61; left= 19; width= 287; height= 95; row { top= 1; left= 1; keys { { <TLDE>, "NORM", 1 }, { <AE01>, "NORM", 1 }, { <AE02>, "NORM", 1 }, { <AE03>, "NORM", 1 }, { <AE04>, "NORM", 1 }, { <AE05>, "NORM", 1 }, { <AE06>, "NORM", 1 }, { <AE07>, "NORM", 1 }, { <AE08>, "NORM", 1 }, { <AE09>, "NORM", 1 }, { <AE10>, "NORM", 1 }, { <AE11>, "NORM", 1 }, { <AE12>, "NORM", 1 }, { <BKSP>, "BKSP", 1, color="grey20" } }; }; row { top= 20; left= 1; keys { { <TAB>, "TABK", 1, color="grey20" }, { <AD01>, "NORM", 1 }, { <AD02>, "NORM", 1 }, { <AD03>, "NORM", 1 }, { <AD04>, "NORM", 1 }, { <AD05>, "NORM", 1 }, { <AD06>, "NORM", 1 }, { <AD07>, "NORM", 1 }, { <AD08>, "NORM", 1 }, { <AD09>, "NORM", 1 }, { <AD10>, "NORM", 1 }, { <AD11>, "NORM", 1 }, { <AD12>, "NORM", 1 }, { <BKSL>, "BKSL", 1 } }; }; row { top= 39; left= 1; keys { { <CAPS>, "CAPS", 1, color="grey20" }, { <AC01>, "NORM", 1 }, { <AC02>, "NORM", 1 }, { <AC03>, "NORM", 1 }, { <AC04>, "NORM", 1 }, { <AC05>, "NORM", 1 }, { <AC06>, "NORM", 1 }, { <AC07>, "NORM", 1 }, { <AC08>, "NORM", 1 }, { <AC09>, "NORM", 1 }, { <AC10>, "NORM", 1 }, { <AC11>, "NORM", 1 }, { <RTRN>, "RTRN", 1, color="grey20" } }; }; row { top= 58; left= 1; keys { { <LFSH>, "LFSH", 1, color="grey20" }, { <AB01>, "NORM", 1 }, { <AB02>, "NORM", 1 }, { <AB03>, "NORM", 1 }, { <AB04>, "NORM", 1 }, { <AB05>, "NORM", 1 }, { <AB06>, "NORM", 1 }, { <AB07>, "NORM", 1 }, { <AB08>, "NORM", 1 }, { <AB09>, "NORM", 1 }, { <AB10>, "NORM", 1 }, { <RTSH>, "RTSH", 1, color="grey20" } }; }; row { top= 77; left= 1; keys { { <LCTL>, "MODK", 1, color="grey20" }, { <LWIN>, "SMOD", 1, color="grey20" }, { <LALT>, "SMOD", 1, color="grey20" }, { <SPCE>, "SPCE", 1 }, { <RALT>, "SMOD", 1, color="grey20" }, { <RWIN>, "SMOD", 1, color="grey20" }, { <MENU>, "SMOD", 1, color="grey20" }, { <RCTL>, "SMOD", 1, color="grey20" } }; }; }; // End of "Alpha" section

section "Editing" { key.color= "grey20"; priority= 9; top= 61; left= 312; width= 58; height= 95; row { top= 1; left= 1; keys { { <INS>, "NORM", 1 }, { <HOME>, "NORM", 1 }, { <PGUP>, "NORM", 1 } }; }; row { top= 20; left= 1; keys { { <DELE>, "NORM", 1 }, { <END>, "NORM", 1 }, { <PGDN>, "NORM", 1 } }; }; row { top= 58; left= 20; keys { { <UP>, "NORM", 1 } }; }; row { top= 77; left= 1; keys { { <LEFT>, "NORM", 1 }, { <DOWN>, "NORM", 1 }, { <RGHT>, "NORM", 1 } }; }; }; // End of "Editing" section

section "Keypad" { key.color= "grey20"; priority= 10; top= 61; left= 376; width= 77; height= 95; row { top= 1; left= 1; keys { { <NMLK>, "NORM", 1 }, { <KPDV>, "NORM", 1 }, { <KPMU>, "NORM", 1 }, { <KPSU>, "NORM", 1 } }; }; row { top= 20; left= 1; keys { { <KP7>, "NORM", 1, color="white" }, { <KP8>, "NORM", 1, color="white" }, { <KP9>, "NORM", 1, color="white" }, { <KPAD>, "KPAD", 1 } }; }; row { top= 39; left= 1; keys { { <KP4>, "NORM", 1, color="white" }, { <KP5>, "NORM", 1, color="white" }, { <KP6>, "NORM", 1, color="white" } }; }; row { top= 58; left= 1; keys { { <KP1>, "NORM", 1, color="white" }, { <KP2>, "NORM", 1, color="white" }, { <KP3>, "NORM", 1, color="white" }, { <KPEN>, "KPAD", 1 } }; }; row { top= 77; left= 1; keys { { <KP0>, "KP0", 1, color="white" }, { <KPDL>, "NORM", 1, color="white" } }; }; }; // End of "Keypad" section

solid "LedPanel" { top= 22; left= 377; priority= 0; color= "grey10"; shape= "LEDS"; }; indicator "Num Lock" { top= 37; left= 382; priority= 1; onColor= "green"; offColor= "green30"; shape= "LED"; }; indicator "Caps Lock" { top= 37; left= 407; priority= 2; onColor= "green"; offColor= "green30"; shape= "LED"; }; indicator "Scroll Lock" { top= 37; left= 433; priority= 3; onColor= "green"; offColor= "green30"; shape= "LED"; }; text "NumLockLabel" { top= 25; left= 378; priority= 4; width= 19.8; height= 10; XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1"; text= "Num\nLock"; }; text "CapsLockLabel" { top= 25; left= 403; priority= 5; width= 26.4; height= 10; XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1"; text= "Caps\nLock"; }; text "ScrollLockLabel" { top= 25; left= 428; priority= 6; width= 39.6; height= 10; XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1"; text= "Scroll\nLock"; }; };

};

2017/08/26 Trance Family SF at Great Northern
π 2017-08-26 00:00 in Clubbing
After the loss of Ruby Skye, it was great to have another venue along with Verso (and 1015). It's conveniently located close to the freeway and plenty of street parking.
The venue was also very laid back, which was duly appreciated.

The main room is not huge, but of reasonable size. The top floor room is much smaller though. I'm also afraid that many people may not have noticed the stairs to it, in the back.
The decors have potential, they put work into them, but I think they'll have to put more work into driving them during the performances (lights and lasers were present, but didn't feel used too much). The good news is that, it'll be easily fixed :)

The lineup was solid:

  • Taj
  • Orkidea
  • Ferry Tayle
  • Jordan Suckley
  • Airwave
  • Gene Xander
  • Alastair james
  • Jonn Connor
  • Christopher Terrance
  • Oscow
  • Martin Cisco
  • I was only able to stay awake long enough to stay until 03:00, and here are some pictures below:







    Orkidea
    Orkidea



    Ferry Tayle
    Ferry Tayle


    Jordan Suckley
    Jordan Suckley




    Airwave
    Airwave










    40mn summary of most of the night (22:00 to 03:00):

    2017/08/23 Climbing and Hiking around Lassen
    π 2017-08-23 00:00 in Hiking
    On the way back from the Madras Eclipse, Lava Beds NP, and Klamatah Falls, we flew down to Chester-Rogers Airport, and got our rental car there. It's kind of funny since he flown just past Lassen on the way down, as well as the visitor center, but obvioulsy were not able to land, so we had to fly further south, and drive back up (about 1H).


    that's the peak we climbed
    that's the peak we climbed

    Since we got unexpectedly stuck in Klamath Falls the previous day, we got up around 05:30, were at the airport by 06:30, and in the air just before 07:00. This allowed us to land before 08:00 and start driving up to Lassen in time for the visitor center opening at 09:00.

    we got a escort through a one way section of the road up
    we got a escort through a one way section of the road up

    we arrived by the visitor center smack when it opened (09:00).
    we arrived by the visitor center smack when it opened (09:00).


    we didn't get lucky enough to see a pika this time
    we didn't get lucky enough to see a pika this time

    the park also has a Cinder Cone crater, which I failed to fly by
    the park also has a Cinder Cone crater, which I failed to fly by

    We then started driving up, with a quick stop at Sulphur Works:


    pretty active pool
    pretty active pool


    Next, we opted to climb Lassen peak while the weather was good:










    top of the world!
    top of the world!















    people studying snow
    people studying snow

    We then went to Bumpass Hell, which isn't much compared to yellowstone, but still worth seeing:


    this big rock was moved by glaciers
    this big rock was moved by glaciers









    My next plan worked out great, we hitchhiked to Devastated Area to view the displays, and from there we walked back down the road 10mn to hat creek trailhead. The plan was to hike back up to our car on the south side of the trail.




    it's full of big rocks that got brought by glaciers
    it's full of big rocks that got brought by glaciers

    We then hiked Hat Creek to Paradise Maedows and back to our car (with a quick stop at terrace lake and shadow lake because they were close enough. By then, Jennifer who was almost running in front of me, had run out of steam, so it was good that we got back to our car by 19:00, just in time to drive back to the airport and take off by 20:00 as the sun was setting:








    See more images for Climbing and Hiking around Lassen
    2017/08/21 Lava Beds National Park
    π 2017-08-21 00:00 in Hiking, Trips
    After flying from Madras to Klamath falls right after the total solar eclipse was over, we picked up a rental car waiting for us, and arrived at Lava Beds a mere 3h after having left Madras, while most everyone was probably still trying ot get out of the traffic jams. As a result the park was pretty much empty all afternoon, so we had a good 6H of visiting time until we watched sunset and went back to our campsite for the night.

    Lava Beds NP is full of caves and lava tubes


    The rangers in the visitor center were quite helpful at suggesting extra places to visit, and we started by doing a few caves on Cave Loop:




    caves were dark, even when some light came in, this is without firesword
    caves were dark, even when some light came in, this is without firesword

    and lit with firesword, 4000 lumens
    and lit with firesword, 4000 lumens

    actually I had 2 fireswords, one set on low (1000 lumens), and one set on high (4000 lumens)
    actually I had 2 fireswords, one set on low (1000 lumens), and one set on high (4000 lumens)

    some lava tubes were quite big
    some lava tubes were quite big

    sometimes the cave split up, more than once even
    sometimes the cave split up, more than once even

    at times, it really looked like a tube
    at times, it really looked like a tube

    other times, it was triangular
    other times, it was triangular

    Nice ceiling formations:





    Some caves required a bit of hiking:






    We then did a hike to and around Mammoth Crater. It wasn't the best lighting, but still nice crater to hike around:


    path around the crater
    path around the crater


    We still had a bit of time, so we went to check out skull cave. a huge cave opening with ice at the bottom floor:


    it was quite hot outside, and yet cool enough for ice at the bottom
    it was quite hot outside, and yet cool enough for ice at the bottom

    We used to the rest of the time to hike up Schonchin Butte Cinder Cone for sunset views, an easy 25mn hike up:





    nice plaques explaining the views
    nice plaques explaining the views



    We then went back to our campsite for dinner and stargazing:


    we had a nice roomy tent
    we had a nice roomy tent



    We started the 2nd day with what we should have done the first day: the beginner intro mushpot cave, all lit up and full of signs, including an interpretative walk, there:









    Next, we went to check out Valentine Cave, a pretty huge and interesting cave:



    the roof got low eventually, Jennifer went to check it out (my light)
    the roof got low eventually, Jennifer went to check it out (my light)

    that was Jennifer coming back with only her light on
    that was Jennifer coming back with only her light on


    We then hiked to symbol bridge and big painted cave, which had indian cave pictographs:








    I found a hole at the end of the cave and was able to descend to a smaller cave with ice
    I found a hole at the end of the cave and was able to descend to a smaller cave with ice

    Jennifer was a bit worried, the path in looked like it could collapse, but she came to check it out too
    Jennifer was a bit worried, the path in looked like it could collapse, but she came to check it out too

    more ice
    more ice

    the pictographs by the entrance were hard to find, but Jennifer found them
    the pictographs by the entrance were hard to find, but Jennifer found them


    By then, we were pretty much done, so on the way out, we stopped by the Black Crater lava flow:






    One the way back to Klamath Falls, we stopped by Captains Jacks Stronghold, where he basically fought and chased off the native americans who were happily there. To be honest, the trail wasn't that interesting or really worth the time:





    the native americans lived in small cool caves like this one
    the native americans lived in small cool caves like this one

    the battle was fought here apparently
    the battle was fought here apparently

    Lava Beds National Park was actually very nice. I had never heard about it, and that was a mistake. Thanks go to Arturo for recommending the place, we got to see more lava tubes than we had seen anywhere, including Hawaii. The only thing Hawaii has that Lava Beds doesn't, is fresh lava, and freshly cooled lava. Apart from that, this national park has a great variety of things to see and learn from.

    See more images for Lava Beds National Park
    2017/08/20 Madras Erickson Aircraft Collection
    π 2017-08-20 00:00 in Flying
    While at Madras for the eclipse, it was a good excuse to go visit the museum on the field, so I did, and here are a few pictures:














    interesting wing design
    interesting wing design


    That evening, a few more planes showed up just after sunset. Made for nice pictures:






    2017/08/20 Flight from Palo Alto to Madras via Shasta, Klamath Falls, and Lassen
    π 2017-08-20 00:00 in Flying
    ILike many other people, Jennifer and I went to Madras to go see the total solar eclipse, but thankfully we didn't have to drive. It was a slightly less than 4H flight thanks to a tailwind (I was afraid it would be more in a slow C172, the best plane I could get for that day since most planes were of course booked for that time.
    I had planned to take off before 07:00, but my fuel order the previous day, was not filled, and I was forced to wait until the competing fuel company opened up and could fuel us up. We eventually took off a bit after 07:20. Better than nothing.




    plane was pretty packed with 2 bikes and all our hiking and camping stuff
    plane was pretty packed with 2 bikes and all our hiking and camping stuff

    Jennifer soon resumed her copilot duties :)
    Jennifer soon resumed her copilot duties :)

    I flew by Mt Shasta on the way up:





    Sadly California had multiple fires, which made visibility often bad, especially by noon or so. On the way up, it wasn't too bad though and we got to see Crater Lake which was totally smoked in later on, on most days. We had actually planned to go to crater lake, but I cancelled that part of our trip once I saw how bad the visibility was on most days:




    I think that's the hike down to the ferry that goes around the lake
    I think that's the hike down to the ferry that goes around the lake

    We eventually got to Madras, which had nice scenery:




    After watching the eclipse, we flew to Klamath Falls, with its big lakes:



    once on the ground, we drove to that bridge to see the lake from both sides, you can see the falls aren't that big afterall :)
    once on the ground, we drove to that bridge to see the lake from both sides, you can see the falls aren't that big afterall :)

    big runway, hard to miss (I was asked to land long)
    big runway, hard to miss (I was asked to land long)

    there is an air force training base onsite
    there is an air force training base onsite


    We first landed in Klamath Falls to see Lava Beds National Park, and then on the way back, we had a look at the town.

    We were supposed to fly out the day after, but when we arrived, there was a line of thunderstorms around the airport and another one around Lassen where we were going, so I opted for us to stay the night in Klamath and fly down to Lassen early the next morning just after sunrise:



    got lots of pictures from Lassen on the way
    got lots of pictures from Lassen on the way




    and finally landed at Chester/Rogers airport, from where we had a rental car waiting, and we drove back up (1h) to Lassen
    and finally landed at Chester/Rogers airport, from where we had a rental car waiting, and we drove back up (1h) to Lassen

    After a full day in Lassen, we flew back at sunset (20:00) and got home in Palo Alto just before 22:00, tired, but happy from all the nice sightseeing.

    2017/08/20 Total Solar Eclipse at Madras, Oregon
    π 2017-08-20 00:00 in Flying, Trips
    After a longish flight from Palo Alto in a slow C172, we arrived at Madras Airport, smack in the middle of the path of totality for the eclipse, the first total eclipse in the US since the 1970's. Needless to say that everything on the path of the eclipse, was packed, and so was the airport, as well as camping sites nearby.

    Solartown, north of the airport
    Solartown, north of the airport

    the rest of the year, Madras has a small racetrack and drag racing strip
    the rest of the year, Madras has a small racetrack and drag racing strip

    when we landed on sunday morning, a few planes were there already, but many more arrived
    when we landed on sunday morning, a few planes were there already, but many more arrived

    I was able to negotiate a parking spot closer to the exit for the next morning, and we setup our camp
    I was able to negotiate a parking spot closer to the exit for the next morning, and we setup our camp

    some amount of vendors at the airport
    some amount of vendors at the airport


    We then took our foldable bikes and biked to Solarfest, a few miles south:

    Madras was ready for visitors
    Madras was ready for visitors

    and their money :)
    and their money :)

    we met Arturo at Solarfest
    we met Arturo at Solarfest



    Nasa had a display room, but hard to get into due to crowds
    Nasa had a display room, but hard to get into due to crowds




    Nasa gave talks
    Nasa gave talks


    lots of vendors
    lots of vendors

    I then went to Solartown to meet Arturo and Louis at their RV:




    It was then time to get back to the airport for sunset pictures:










    We then tried to sleep in our tent, and I very much appreciated the jet that landed at 05:02 and stayed idling close to our tent for a good 5mn :)

    people getting ready early
    people getting ready early

    I packed up our camp and turned the plane around in the direction of 'get the f out of here' :)
    I packed up our camp and turned the plane around in the direction of 'get the f out of here' :)

    I was one plane away from the last taxiway to the runway
    I was one plane away from the last taxiway to the runway

    Tim, one of my many coworkers who went to the event
    Tim, one of my many coworkers who went to the event

    In case the sun disappearance brought a big flood, some were ready :)
    In case the sun disappearance brought a big flood, some were ready :)

    And then, it started:



    this lucky guy landed 1mn before the runway closed
    this lucky guy landed 1mn before the runway closed

    getting closer
    getting closer

    that little sun left, is still very bright
    that little sun left, is still very bright

    without a filter, it was still super bright
    without a filter, it was still super bright


    almost there, but still way too bright to look with naked eyes
    almost there, but still way too bright to look with naked eyes

    and finally!
    and finally!

    the corona of hot plasma around the sun, only visible during an eclipse
    the corona of hot plasma around the sun, only visible during an eclipse

    mercury became visible
    mercury became visible

    So, it's hard to explain, but it does get quite dark, and cold. The cold was really noticeable, which is surprising how quickly it changed in just a portion of a minute:



    and then, after barely 2mn, it was over
    and then, after barely 2mn, it was over

    Just to give a feel for what it looked like, here are 4mn starting just before totality:

    Those 2mn were as cool as they went by quickly. As soon as totality was over, we rushed to the plane, and went in line for the runway, got the first spot and I was the first person to take off when the runway re-opened. While waiting over 30mn, I took a few more pictures from inside the plane before finally being able to take off:



    in the 40mn I waited before taking off, the roads were filled up already
    in the 40mn I waited before taking off, the roads were filled up already





    jets were the only ones allowed to take off for about 1h after I left
    jets were the only ones allowed to take off for about 1h after I left

    solarfest
    solarfest

    a long road home
    a long road home

    And one last shot of the partial eclipse still going on while we were flying to Klammath Falls:


    We had a great time, definitely an at least once in a lifetime experience.

    2017/08/16 Great Britain Trip Wrapup, and Thoughts
    π 2017-08-16 00:00 in Greatbritain2017, Trips
    Just like our Taiwan, Germany and France trips, Jennifer spent a great amount of time planning this. Despite help from the Rick Steve's book, it was still a lot of effort.
    A lot of the UK is not that easily accessible by public transport (unlike let's say Japan), so we made good use of our car. We drove 1300 miles (all the way to Edinburgh), and then were able to take trains to York and London for the way back. We lucked out with the rental car by getting a Vauxhall Astra turbo 1.4l, which had 150HP, making it quite swift when I had to pass (it wasn't mclaren fast of course, but for a rental car, it did well).

    So, here are some random thoughts:

    Driving

  • It starts with Motorways, the good roads. Sadly not nearly enough of them. Then, it goes to A roads, the more digits they have, the worse they get on average. A1 = good, A2345 = bad. And then it goes to B roads. By the time you're on B369, you are totally screwed :)
  • I realize we did go in the countryside to see some small villages, but England definitely had more crappy roads that often weren't wide enough for 2 cars and where I'd worry about scrapping the car on the left, or getting my right mirror taken out by an oncoming car every time one showed up
  • Roundabouts everywhere: those did not bother me, they are known to increase traffic flow. It's a shame the US doesn't use them (they did freak Jennifer out a little bit, they take some getting used to when they're 2-3 lanes wide and have 5 or more entrances and exits).
  • speed limits: they were not unreasonably slow, actually some country roads took rally driving skills to drive at their posted limit, especially in the rain, of which we got plenty.
  • there were plenty of radars that picture your plate and send you a ticket if you speed. I used android apps to get warnings of where most of them were, but they also put signs to tell you about them. However, there are also plenty of fake signs that warn you of radars that don't exist
  • People

  • overall people were nice, if not a bit rigid at times, which was not a surprise since I was ready for it. It's also worth noting that there is an incredible amount of variety in people and customs within GB, especially if you consider that Wales, Scotland and Ireland are virtually different countries within GB.
  • While we saw a comic who made fun of Americans for being fat, we felt that many british were not really in a position to make fun.
  • Could that be the reason that they still use stones as a unit of weight, something I thought they had gotten rid of. Dear brits, if you think it's cute, it's not, it really feels dumb, sorry.
  • As a cross between people and cars: let's talk about walking on sideways. What the hell is going on here? You drive left, most people seem to agree with that, which is good for overall life expectancy of motorists, but once you get on a sidewalk, it becomes a total clusterfuck. Most brits actually seem to walk on the right for no good reason that I could find. Some subways even tell you to do so. But in other places, they walk left, just so that you have on idea what's going to happen in a given city or location, and you'll end up being wrong most of the time. Seriously people, fix this.
  • Weather

  • it sucked about as much as I was ready for. We got rain every day (although thankfully not all day every day) of our first 14 consecutive days. It was just a question of how much and what time.
  • we did often get 3 seasons' worth of weather in a single day, thankfully no snow in August, but it was damn cold on many days
  • only by the time we got back to london was I able to stop carrying a wind/cold/rain jacket with me
  • Food

  • I was kind of prepared for the worst, but it was actually ok. Breakfast was pretty much the same eggs, tomato, beans, bacon that isn't US like, and sausage which was to be avoided in many places. It wasn't bad, but after 21 days of mostly the same thing, it got old.
  • Dinner were actually ok, but we carefully avoided fish and chips and pubs (setting the bar at gastro-pubs).
  • Like other trips, no time for lunch, that gets in the way of visiting stuff, and with the limited opening hours, we used every one of them.
  • Train

  • After doing trains in Japan, nothing really compares. The signaling in Japan is big and colorful, and trains run on time. In the UK neither was true, but oh well we got to our destinations anyway.
  • Our 2nd train left and arrived on time, but the carriage numbers written outside did not match the markings on the floor, and worse, once we got in, the number inside did not match the one marked outside, so we had to walk the entire train inside with our luggage, along with everyone else who also ended up in the wrong carriages. And just to make things more "fun", the numbers are not consecutive either, so you don't even know if you're walking in the right direction.
  • On the plus side, they at least had power for laptops once inside.
  • I feel that French and even Italian trains were better, but we got to where we needed to go, which is what matters ultimately
  • The subways in London definitely look dated by now, but on the plus side they run with a very high frequency
  • The one thing with the london subways is that they ring a tone to tell you the doors are closing at the same time. What's the point of that? I literally got in a train and heard the sound while I was going through the door that closed on my bag, trying to crush it, and leaving Jennifer stuck on the platform. This is just stupid, every other subway system I know rings a tone first, gives you a few seconds and then closes the door.
  • Another minus is while in Japan or Paris you have cell phone signal throughout the subway system (which is no small feat), in London, you do not. You might get signal here and there if you're lucky, but it's very inconsistent. This is mostly an issue if you're using data to look up destinations or even doing routing with google maps.
  • Misc

  • London has a mix of world class free museums that worked on donations, and other locations that were very overpriced (like the churches that effectively charge a hefty admission price of more than $30 per person), or the tower of london. It evened out in the end, the contrast was weird.
  • Jennifer had a sample of Georgian and Victonrian houses to visit. Honestly, maybe seeing one is worth it, at best.
  • All in all, we got quite lucky with avoiding long lines in London (although it wasn't luck, we planned for that, but we're lucky it worked out).
  • Locations

  • We could have spent more time in Liverpool and Edinburgh
  • Some of the Cotswold was skipable for someone with more limited time
  • Wales was nice though, especially its castles (which unfortunately were actually built by the british to control the local population)
  • I also quite enjoyed seeing about and visiting the Hadrian Wall
  • York was also worth a stop at least for the very good city museum and learning about how the Vikings invaded, but was worth 1.5 days, not 2.
  • Last Impressions, Conclusions

    While there were some neat things to see, and London alone is a reason to go to great britain, I wouldn't put it ahead of France, Germany, or Italy (in random order). They did have some very impressive cathedrals size-wise, not as well decorated as in Italy or Germany.
    As for the british people, I actually learned that they did have a republic for a short while (10-ish years) after killing their Monarch, ahead of the French doing the same later, but they somehow asked that dead monarch's son to rule the country again, which seemed like a mistake to me :)
    2017/08/15 London Science Museum's Airplane Section
    π 2017-08-15 00:00 in Flying, Greatbritain2017
    Usually I would only feature an airplane museum in the flying section, but the London Science Museum's section of airplanes is big enough that it deserves its own mention.

    There was a good history of early planes:


    a good reminder that the first aircraft that was heavier than air was French, even if it didn't fly far
    a good reminder that the first aircraft that was heavier than air was French, even if it didn't fly far

    very bird-like aircraft
    very bird-like aircraft

    of course the wright brothers are mentioned, along with their patents and thirst for money that caused the US to slip back decades while France quickly took over the world of flying machines
    of course the wright brothers are mentioned, along with their patents and thirst for money that caused the US to slip back decades while France quickly took over the world of flying machines

    one impressive thing on the wright brothers' airplane was the engine: light and efficient
    one impressive thing on the wright brothers' airplane was the engine: light and efficient


    lots of early french planes
    lots of early french planes

    While most people know about the French Mongolfier brothers and their hot air balloon, few know about all the dirigeables that many countries experimented with, including England:



    The section on VTOL aircraft was very nice. I didn't know about the pre-harrier prototypes:

    VTOL thrust vectoring prototype
    VTOL thrust vectoring prototype


    Short SC-1, first UK VTOL aircraft
    Short SC-1, first UK VTOL aircraft


    and harrier
    and harrier

    Other random planes:



    first german jet aircraft
    first german jet aircraft




    early airplane with inefficient propeller
    early airplane with inefficient propeller

    So again, while it was not an aviation museum, it sure had a worthwhile collection to check out.

    2017/08/15 London Science Museum
    π 2017-08-15 00:00 in Greatbritain2017, Sciencemuseums
    I had planned to spend 2-3H in London's Science Museum, and ended up spending 4H+ until they closed and kicked me out :)

    It definitely had interesting and unusal exhibits (at least for adults) and I smiled when I saw reviews that they didn't have enough basic things for small kids to bang violently on until they broke :)

    [The aviation part of that museum itself was quite impressive and I put it in its own page|/perso/flying/post_2017-08-15_London-Science-Museum_s-Airplane-Section.html


    nice to see a streetview bike
    nice to see a streetview bike










    I got to learn how multicord encoding worked at the time
    I got to learn how multicord encoding worked at the time

    kind of sad when I know some historical communication devices :)
    kind of sad when I know some historical communication devices :)

    nice to see more silicon lingots in museums, that's where all our chips come from
    nice to see more silicon lingots in museums, that's where all our chips come from




    the UK has several crappy 3 wheeled cars because taxes/insurance for them was cheaper
    the UK has several crappy 3 wheeled cars because taxes/insurance for them was cheaper


    gotta love old commercials
    gotta love old commercials

    even a section on genetics, including this 7 toed cat.
    even a section on genetics, including this 7 toed cat.

    or less fun, but good to mention, this euthanasia machine
    or less fun, but good to mention, this euthanasia machine

    See more images for London Science Museum

    More pages: September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 February 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 October 2003 August 2003 July 2003 May 2003 April 2003 March 2003 January 2003 November 2002 October 2002 July 2002 May 2002 April 2002 March 2002 February 2002 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 May 2001 April 2001 March 2001 February 2001 January 2001 December 2000 November 2000 October 2000 September 2000 August 2000 July 2000 June 2000 April 1999 March 1999 September 1997 August 1997 July 1996 September 1993 July 1991 December 1988 December 1985 January 1980