MC's Journal

Happy Hacking Keyboard och XKB, del 2

Som jag skrev i förra inlägget så vill jag gärna låta bli att skriva i systemfiler för att göra något så enkelt som att mappa om mitt tangentbord. Tänk om jag inte har root, liksom?

Med xmodmap är det förstås busenkelt. Nu är det äntligen löst med XKB också. Det nämns inte mycket om det här i manualer så det tog en stund att klura ut.

Så här gör man:

Skapa en beskrivning av ditt totala tangentbord. Så här ser min ut beskrivning ut:

xkb_keymap {
  xkb_keycodes { include "xfree86+aliases(qwerty)" };
  xkb_types { include "complete" };
  xkb_compat { include "complete" };
  xkb_symbols { include "pc+se(se)+mchack(se)" };
  // xkb_symbols { include "pc+us+mchack(us)" };
  xkb_geometry { include "hhk(win2)" };
};

Spara den här beskrivningen i en katalog för XKB. Jag har den i ~/mc/conf/xkb/mchack.xkb.

Observera ”mchack(se)”. Det är det som är mina egna definitioner.

En rad är utkommenterad. Använd den i stället om du vill ha amriskt tangentbord men med svenska tecken med AltGr + krullar och hakar, som i swascii.

Skapa sedan en katalog som heter symbols i samma katalog och stoppa in dina förändringar och döp den filen till vad du skrivit ovan, alltså i mitt fall ”mchack”. Där stoppar jag in:

// Swedish map for use with HHKB Pro 2 with SW 01 1010, that is Lite ext,
// Backspace on rubout and diamond gives Alt.
default partial alphanumeric_keys modifier_keys
xkb_symbols "se" {
    include "latin(type2)"
    include "se(se)"

    key <AE04> { [ 4, dollar ] };
    key <BKSL> { [ apostrophe, asterisk, grave ] };
    key <TLDE> { [ less, greater ] };
    key <AD11> { [ aring, Aring, braceright, bracketright ] };
    key <AD12> { [ asciitilde, asciicircum, dead_diaeresis, dead_circumflex] };
    key <AC10> { [ odiaeresis, Odiaeresis, bar, backslash ] };
    key <AC11> { [ adiaeresis, Adiaeresis, braceleft, bracketleft ] };

    key <LWIN> { [ Hyper_L ] };
    key <LALT> { [ Meta_L ] };

    // Override default in se(se) which has RALT as Level 3 shift.
    // Stops xkbcomp's complaints about multiple symbols.
    key <RALT> { 
      type[Group1]="TWO_LEVEL",
      type[Group2]="TWO_LEVEL",
      type[Group3]="TWO_LEVEL",
      type[Group4]="TWO_LEVEL",
      symbols[Group1] = [ Meta_R ], 
      symbols[Group2] = [ Meta_R ], 
      symbols[Group3] = [ Meta_R ], 
      symbols[Group4] = [ Meta_R ]
    };

    key <RWIN> { [ ISO_Level3_Shift ] };

    modifier_map Mod1 { Meta_L, Meta_R };
    modifier_map Mod4 { Hyper_L };
    modifier_map Mod5 { ISO_Level3_Shift };
};

// American version of the above but with Swedish characters on
// AltGr+brackets, braces, backslash and bar.
partial alphanumeric_keys modifier_keys
xkb_symbols "us" {
    include "us"

    key <AD11> { [ bracketleft, braceleft, adiaeresis, Adiaeresis ] };
    key <AD12> { [ bracketright, braceright, aring, Aring ] };
    key <BKSL> { [ backslash, bar, odiaeresis, Odiaeresis ] };

    key <LWIN> { [ Hyper_L ] };
    key <LALT> { [ Meta_L ] };
    key <RALT> { [ Meta_R ] };
    key <RWIN> { [ ISO_Level3_Shift ] };

    modifier_map Mod1 { Meta_L, Meta_R };
    modifier_map Mod4 { Hyper_L };
    modifier_map Mod5 { ISO_Level3_Shift };
};

Ladda allt det goda med:

% xkbcomp -I/home/mc/conf/xkb ~/conf/xkb/keymap/mchack.xkb $DISPLAY

eller din motsvarighet för hemkatalog.

OBS! Det skall inte vara något mellanslag efter ”-I”.

Klart!

Jag får fortfarande lite felmeddelanden från xkbcomp men alla handlar om obundna keycodes. De obundna symbolerna spelar nog ingen roll.