==================== My keyboard layout ==================== :CreationDate: 2009-09-15 13:20:11 :Id: SW/my-layout :tags: - keyboard - configs I use a `Dvorak layout `_, on an `Apple Aluminum Keyboard (A1243) `_, on a Gentoo Linux PC. I could *mostly* do with the `xorg`-provided dvorak layout, by putting this in my ``xorg.conf`` file:: Section "InputClass" Identifier "keyboard-generic" Driver "evdev" Option "XkbOptions" "compose:ralt,altwin:meta_win,terminate:ctrl_alt_bksp" Option "XkbLayout" "us" Option "XkbModel" "evdev" Option "XkbVariant" "dvorak" MatchIsKeyboard "on" EndSection but a few keys were wrong: the "tilde" and "section" keys were swapped, the "fn" key was not recognized, and most function keys did not work. For the "fn" key, I had to `write a bit of code <../xf86-input-evdev/>`_, but for the rest I only had to configure `XKB` properly. Now my ``xorg.conf`` file contains:: Section "InputClass" Identifier "keyboard-generic" Driver "evdev" Option "XkbOptions" "compose:ralt,altwin:meta_win,terminate:ctrl_alt_bksp" MatchIsKeyboard "on" EndSection Section "InputClass" Identifier "keyboard-apple-alu" Driver "evdev" Option "XkbLayout" "dakkar" Option "XkbModel" "applealu_iso" Option "XkbVariant" "dvorak-apple-al" Option "event_key_remap" "464=118 120=210 204=211" MatchIsKeyboard "on" MatchProduct "Apple, Inc Apple Keyboard" EndSection and I have a ``/usr/share/X11/xkb/symbols/dakkar`` file with:: default partial alphanumeric_keys xkb_symbols "dvorak-apple-al" { name[Group1] = "USA Dvorak Apple Aluminium keyboard"; include "us(dvorak)" key { [ quoteleft, asciitilde ] }; key { [ section, plusminus ] }; key { [ XF86MonBrightnessDown, F1, F1, XF86_Switch_VT_1 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86MonBrightnessUp, F2, F2, XF86_Switch_VT_2 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86Launch3, F3, F3, XF86_Switch_VT_3 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86Launch4, F4, F4, XF86_Switch_VT_4 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86KbdBrightnessDown, F5, F5, XF86_Switch_VT_5 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86KbdBrightnessUp, F6, F6, XF86_Switch_VT_6 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86AudioPrev, F7, F7, XF86_Switch_VT_7 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86AudioPlay, F8, F8, XF86_Switch_VT_8 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86AudioNext, F9, F9, XF86_Switch_VT_9 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86AudioMute, F10, F10, XF86_Switch_VT_10 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86AudioLowerVolume, F11, F11, XF86_Switch_VT_11 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ XF86AudioRaiseVolume, F12, F12, XF86_Switch_VT_12 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ F13, F13, F13, F13 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ F14, F14, F14, F14 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ F15, F15, F15, F15 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ F16, F16, F16, F16 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ F17, F17, F17, F17 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ F18, F18, F18, F18 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ F19, F19, F19, F19 ] , type[Group1] = "FOUR_LEVEL_X" }; key { [ ISO_Level3_Shift, Insert ] }; }; The first two ``key`` lines swap "tilde" and "section", the rest are more interesting. You see, on this keyboard (on a Mac, at least) "F1" … "F18" are reached in combination with the "fn" key, and the primary function of those keys is to be shortcuts for programs (like Exposé or Dashboard) or commands (change screen brightness, playing track, volume). So I made it work the same on X11. The ``FOUR_LEVEL_X`` type defines a key that has 4 possible symbols: on its own, with ``LevelThree``, with ``Shift+LevelThree``, and with ``Control+Alt``; since I map the "ins" (really, "fn") key to ``ISO_Level3_Shift``, I can access the function keys in combination with "fn", I can access the command keys on their own, and (quite important) I can still switch to the text consoles ``:-)``. Oh, and ``Shift+Fn`` actually produces ``Shift+Insert``, so I can paste from the primary selection into my terminals without reaching for the mouse.