The aluminium “laptop-style” Apple keyboards are really nice: quick and easy to type on. I’ve got one on my main Linux machine. But they’re mapped oddly (or at least the UK one is): backtick is next to Z, and backslash next to Enter. As I’m usually watching the screen and not the keyboard while typing, the fact that these think-different mappings are borne out by the printing on the keycaps doesn’t help.
So I needed to swap them back again. And, X being the stovepipe it is, I needed to do it twice, once for inside X (including Gnome and KDE) and once for the console.
X was actually easier: I added this to ~/.xinitrc:
# Apple silver keyboard has these keycodes swapped
xmodmap -e "keycode 94 = grave notsign grave notsign bar bar"
xmodmap -e "keycode 49 = backslash bar backslash bar bar brokenbar"
For console use there doesn’t seem to be a similar way of modifying just certain keycodes, so you end up needing to make a whole new keymap:
dumpkeys > keymap.txt
(edit keymap.txt)
loadkeys < keymap.txt
Here’s the diff I had to apply to the standard UK map to get the Apple keyboard working the way my fingers expect:
--- std_keymap 2010-03-12 13:49:34.000000000 +0000 +++ silverapple.keymap 2010-03-12 13:50:39.000000000 +0000 @@ -93,9 +93,9 @@ shift control keycode 40 = nul alt keycode 40 = Meta_apostrophe shift alt keycode 40 = Meta_at -keycode 41 = grave notsign bar nul - alt keycode 41 = Meta_grave - control alt keycode 41 = Meta_nul +keycode 86 = grave notsign bar nul + alt keycode 86 = Meta_grave + control alt keycode 86 = Meta_nul keycode 42 = Shift keycode 43 = numbersign asciitilde control keycode 43 = Control_backslash @@ -201,10 +201,10 @@ control alt keycode 83 = Boot keycode 84 = Last_Console keycode 85 = -keycode 86 = backslash bar bar Control_backslash - alt keycode 86 = Meta_backslash - shift alt keycode 86 = Meta_bar - control alt keycode 86 = Meta_Control_backslash +keycode 41 = backslash bar bar Control_backslash + alt keycode 41 = Meta_backslash + shift alt keycode 41 = Meta_bar + control alt keycode 41 = Meta_Control_backslash keycode 87 = F11 F23 Console_23 F35 alt keycode 87 = Console_11 control alt keycode 87 = Console_11
And to get this loaded on every boot, I stuck it in /etc/rc.local:
# Apple keyboards start up in "F-keys are magic" mode; this puts them in # "F-keys are F-keys" mode echo 2 > /sys/module/hid_apple/parameters/fnmode # Also they have the backslash and backtick keys swapped loadkeys < /etc/silverapple.keymap
Oh, right, yes, the function keys: they think different too, or at least they default to think-different mode on power-up. To get them thinking same, you need to have the Linux hid_apple module loaded, and to set its “fnmode” parameter as above. (Other systems may use other ways of setting module parameters.)
If you’ve found this and want to check that your fingers are mapped the same way mine are, this is the list of keys that, with the setup above, do not generate the symbol printed on the keycap:
labelled | generates |
§ | ` (backtick) |
± (shift-§) | ¬ (notsign) |
@ (shift-2) | " |
" (shift-') | @ |
\ | # |
| (shift-\) | ~ |
` (backtick) | \ |
~ (shift-`) | | |
Overall you lose the ability to type “§” and “±”, and gain “¬” (meh) and, rather surprisingly, the hash character “#”, which isn’t marked anywhere on the Apple keyboard.
No comments:
Post a Comment