Japanese and English Keyboards

fun with evdev

I have been using Japanese keyboards now for many years and always make sure my laptops come with them. I like the layout and have become accustomed to it. However I was recently given a new Kinesis keyboard that has a US keyboard layout.

Kinesis Keyboard

This new keyboard and now that evdev has become the flavour of the month when configuring keyboards under X make me write this post.

UPDATE: The following config is only usefull if you are using Xorg 1.7. For Xorg 1.8+ see this post. japanese keyboard with xorg 1.8+

evdev and the default fdi keymap However, the default fdi config does not play so nicely with Japanese keyboards. So here is my fdi keymap:

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
    <match key="info.capabilities" contains="input.keyboard">
      <merge key="input.x11_driver" type="string">kbd</merge>
        <merge key="input.x11_options.XkbRules" type="string">evdev</merge>
        <merge key="input.x11_options.XkbLayout" type="string">jp</merge>
        <merge key="input.x11_options.XkbModel" type="string">jp106</merge>
        <merge key="input.x11_options.XkbOptions" type="string">ctrl:nocaps</merge>
        <!-- If we\'re using Linux, we use evdev by default (falling back to keyboard otherwise). -->
        <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
        <merge key="input.x11_driver" type="string">evdev</merge>

This works fine. Until you plug in another keyboard other than Japanese.

Keymap switching alias To switch between Japanese and Keyboard layouts I have created the following aliases.

english='setxkbmap us'
japanese='setxkbmap jp'

This works fine except for the the "|" key. Switching to English sees this key disappear all together. And if you have an international US keyboard the \"|\\\" International Key becomes an "<>" key. So to fix this I have done the following.

# Create an ~/.Xmodmap file to remap keys 94 and 51 \"|\\\"

keycode 94 = backslash bar
keycode 51 = backslash bar

# Change the above mentioned english alias.

english='setxkbmap us ; xmodmap ~/.Xmodmap'

tags: evdev, Japanese, Linux

Fri 21 May 2010, 23:36