日本語106キーボードにかなキー

1. xkeyboard-config-1.0でかなキー

どんどん悪くなるxorg。かなキーの設定を更新しなければいけない日がやってきた。グループ2にかなのキーマップを追加しなければならない。

1.1. ISO_Next_Groupをかなキーにする

この方法はxorg.confとxkbのシステムファイルを直接書き換えてグループ2にかなのキーマップを追加し、さらにかなキーにしたいキーにISO_Next_Groupを割り当てます。

  1. /usr/local/share/X11/xkb/rules/baseに次の行を追加します。

    diff -cr xkb.orig/rules/base xkb/rules/base
    *** xkb.orig/rules/base	Sun Aug 19 09:28:10 2007
    --- xkb/rules/base	Sun Aug 19 09:34:14 2007
    ***************
    *** 835,840 ****
    --- 835,841 ----
        nbsp:level4           =	+nbsp(level4)
        nbsp:level4n          =	+nbsp(level4n)
        japan:nicola_f_bs    =	+jp(nicola_f_bs)
    +   japan:kana            =	+jp(kana):2
    
      ! option	=	compat
        grp_led:num		=	+lednum(group_lock)
    
  2. 次のように/etc/X11/xorg.confの入力デバイスセクションにXkbOptionsを追加します。

    Section "InputDevice"
            Identifier  "Keyboard0"
            Driver      "kbd"
            Option      "XkbRules" "xorg"
            Option      "XkbModel" "jp106"
            Option      "XkbLayout" "jp"
            Option      "XkbOptions" "japan:kana,grp_led:scroll"
    EndSection
  3. Xサーバを再起動します。

  4. 左の旗マークキー(キーコード115)をかなキーにするには、次のようにします(~/.xinitrcや~/.xsessionで実行するようにした方が便利です)。

    % xmodmap -e "keycode 115 = ISO_Next_Group"
  5. 「かなキーを押すと、キーボードの第3LED(もともとScrollLockキー用だったもの)が点灯する」ことを確認してください。なお、ScrollLockキーを押しても、そのLEDはもはや点灯しません。

1.2. xkbcompでISO_Next_Groupをかなキーにする

上記の方法のようにシステムファイルを書き換えられない場合は、xkbcompで同様なことを実現できます。

  1. 次のようなファイルを用意しておきます。

    xkb_keymap {
      xkb_keycodes { include "xfree86(jp106)+aliases(qwerty)" };
      xkb_types    { include "complete" };
      xkb_compat   { include "complete+japan+ledscroll(group_lock)" };
      xkb_symbols  { include "pc+jp(106)+jp(kana):2" };
      xkb_geometry { include "pc(jp106)" };
    };
  2. 用意したファイルを次のようにxkbcompでコンパイルしてXサーバに設定し、左の旗マークキー(キーコード115)をかなキーに割り当てます(実際には~/.xinitrcや~/.xsessionで実行することになります)。

    % xkbcomp -I/usr/local/share/X11/xkb 用意したファイル $DISPLAY
    % xmodmap -e "keycode 115 = ISO_Next_Group"

1.3. バーチャルなKana_Lockキーを追加する

ISO_Next_Groupではなく、Kana_Lockキーを使用する方法を説明します。ただし、Kana_Lockのキーシムを無視しないXクライアントを使用する場合、この方法は適さないでしょう。

  1. /usr/local/share/X11/xkb/rules/baseに次の行を追加します。

    diff -cr xkb.orig/rules/base xkb/rules/base
    *** xkb.orig/rules/base	Sun Aug 19 09:28:10 2007
    --- xkb/rules/base	Sun Aug 19 09:34:14 2007
    ***************
    *** 835,840 ****
    --- 835,841 ----
        nbsp:level4           =	+nbsp(level4)
        nbsp:level4n          =	+nbsp(level4n)
        japan:nicola_f_bs    =	+jp(nicola_f_bs)
    +   japan:kana            =	+jp(kana):2
    
      ! option	=	compat
        grp_led:num		=	+lednum(group_lock)
  2. 次のように/etc/X11/xorg.confの入力デバイスセクションにXkbOptionsを追加します。

    Section "InputDevice"
            Identifier  "Keyboard0"
            Driver      "kbd"
            Option      "XkbRules" "xorg"
            Option      "XkbModel" "jp106"
            Option      "XkbLayout" "jp"
            Option      "XkbOptions" "japan:kana,japan:kana_lock,grp_led:scroll"
    EndSection
  3. Xサーバを再起動します。

  4. 次のように左の旗マークキー(キーコード115)をかなキーにします(実際には~/.xinitrcや~/.xsessionで実行します)。

    % xmodmap -e "keycode 115 = Kana_Lock"

1.4. xkbcompでバーチャルなKana_Lockキーを追加する

上記の方法でシステムファイルを書き換えられない場合は、xkbcompで同様なことを実現できます。

  1. 次のようなファイルを用意しておきます。

    xkb_keymap {
      xkb_keycodes { include "xfree86(jp106)+aliases(qwerty)" };
      xkb_types    { include "complete" };
      xkb_compat   { include "complete+japan+japan(kana_lock)+ledscroll(group_lock)" };
      xkb_symbols  { include "pc+jp(106)+jp(kana):2" };
      xkb_geometry { include "pc(jp106)" };
    };
  2. 用意したファイルを次のようにxkbcompでコンパイルしてXサーバに設定し、左の旗マークキー(キーコード115)をかなキーに割り当てます(実際には~/.xinitrcや~/.xsessionで実行することになります)。

    % xkbcomp -I/usr/local/share/X11/xkb 用意したファイル $DISPLAY
    % xmodmap -e "keycode 115 = Kana_Lock"

1.5. 特定のキーをかなキーにする

最初に左の旗マークキーをかなキーにする例を説明します。

  1. /usr/local/share/X11/xkb/rules/baseに次の行を追加します。

    diff -cr xkb.orig/rules/base xkb/rules/base
    *** xkb.orig/rules/base	Sun Aug 19 09:28:10 2007
    --- xkb/rules/base	Sun Aug 19 09:34:14 2007
    ***************
    *** 835,840 ****
    --- 835,841 ----
        nbsp:level4           =	+nbsp(level4)
        nbsp:level4n          =	+nbsp(level4n)
        japan:nicola_f_bs    =	+jp(nicola_f_bs)
    +   japan:kana            =	+jp(kana):2
    
      ! option	=	compat
        grp_led:num		=	+lednum(group_lock)
  2. 次のように/etc/X11/xorg.confの入力デバイスセクションにXkbOptionsを追加します。

    /usr/local/share/X11/xkb/rules/baseに次の行を追加します。

    Section "InputDevice"
            Identifier  "Keyboard0"
            Driver      "kbd"
            Option      "XkbRules" "xorg"
            Option      "XkbModel" "jp106"
            Option      "XkbLayout" "jp"
            Option      "XkbOptions" "japan:kana,grp:lwin_toggle,grp_led:scroll"
    EndSection
  3. Xサーバを再起動します。

下線部を次のいずれかに変更することで、かなキーの割り当てを変更できます。

grp:toggle
grp:shifts_toggle
grp:ctrls_toggle
grp:alts_toggle
grp:ctrl_shift_toggle
grp:caps_toggle
grp:shift_caps_toggle
grp:alt_caps_toggle
grp:ctrl_alt_toggle
grp:alt_shift_toggle
grp:menu_toggle
grp:lwin_toggle
grp:rwin_toggle
grp:lshift_toggle
grp:rshift_toggle
grp:lctrl_toggle
grp:rctrl_toggle
grp:lalt_toggle

それぞれの意味は/usr/local/share/X11/xkb/symbols/groupを参照してください。

1.6. xkbcompで特定のキーをかなキーにする

上記の方法でシステムファイルを書き換えられない場合は、xkbcompで同様なことを実現できます。

  1. 次のようなファイルを用意しておきます。

    xkb_keymap {
      xkb_keycodes { include "xfree86(jp106)+aliases(qwerty)" };
      xkb_types    { include "complete" };
      xkb_compat   { include "complete+japan+ledscroll(group_lock)" };
      xkb_symbols  { include "pc+jp(106)+jp(kana):2+group(lwin_toggle)" };
      xkb_geometry { include "pc(jp106)" };
    };
  2. 用意したファイルを次のようにxkbcompでコンパイルしてXサーバに設定します(実際には~/.xinitrcや~/.xsessionで実行することになります)。

    % xkbcomp -I/usr/local/share/X11/xkb 用意したファイル $DISPLAY

下線部を次のいずれかに変更することで、かなキーの割り当てを変更できます。

toggle
shifts_toggle
ctrls_toggle
alts_toggle
ctrl_shift_toggle
caps_toggle
shift_caps_toggle
alt_caps_toggle
ctrl_alt_toggle
alt_shift_toggle
menu_toggle
lwin_toggle
rwin_toggle
lshift_toggle
rshift_toggle
lctrl_toggle
rctrl_toggle
lalt_toggle

それぞれの意味は/usr/local/share/X11/xkb/symbols/groupを参照してください。


2. xkeyboard-config-0.9(またはそれ以前)でかなキー

2.1. ISO_Next_Groupをかなキーにする

この方法はかなキーにしたいキーにISO_Next_Groupを割り当てます。

  1. 次のように/etc/X11/xorg.confの入力デバイスセクションにXkbOptionsを追加します。

    Section "InputDevice"
            Identifier  "Keyboard0"
            Driver      "kbd"
            Option      "XkbRules" "xorg"
            Option      "XkbModel" "jp106"
            Option      "XkbLayout" "jp"
            Option      "XkbOptions" "grp_led:scroll"
    EndSection
  2. Xサーバを再起動します。

  3. 左の旗マークキー(キーコード115)をかなキーにするには、次のようにします(~/.xinitrcや~/.xsessionで実行するようにした方が便利です)。

    % xmodmap -e "keycode 115 = ISO_Next_Group"
  4. 「かなキーを押すと、キーボードの第3LED(もともとScrollLockキー用だったもの)が点灯する」ことを確認してください。なお、ScrollLockキーを押しても、そのLEDはもはや点灯しません。

2.2. xkbcompでISO_Next_Groupをかなキーにする

上記の方法でシステムファイルを書き換えられない場合は、xkbcompで同様なことを実現できます。

  1. 次のようなファイルを用意しておきます。

    xkb_keymap {
            xkb_keycodes  { include "xfree86(jp106)+aliases(qwerty)"        };
            xkb_types     { include "complete"      };
            xkb_compat    { include "complete+japan+ledscroll(group_lock)" };
            xkb_symbols   { include "pc+jp(latin)+jp:2"     };
            xkb_geometry  { include "pc(jp106)"     };
    };
  2. 用意したファイルを次のようにxkbcompでコンパイルしてXサーバに設定し、左の旗マークキー(キーコード115)をかなキーに割り当てます(実際には~/.xinitrcや~/.xsessionで実行することになります)。

    % xkbcomp -I/usr/local/share/X11/xkb 用意したファイル $DISPLAY
    % xmodmap -e "keycode 115 = ISO_Next_Group"

3. さらに昔の話

  1. /usr/X11R6/lib/X11/XF86Configのキーボードセクションが次のようになっているか確認します。ただし、XkbOptionsの行はなくてもいいです。

    Section "Keyboard"
    ...
        XkbOptions  "ctrl:swapcaps"
        XkbRules    "xfree86"
        XkbModel    "jp106"
        XkbLayout   "jp"
    ...
    EndSection
  2. ルートになります。

  3. /usr/X11R6/lib/X11/xkb/compat/basicのバックアップを取ります。

  4. ファイルbasic.gzを展開してできるファイルbasicを/usr/X11R6/lib/X11/xkb/compat/におきます。

  5. ルートの作業はこれで終わりです。

  6. Xサーバを再起動します。

  7. 「Shiftキーと変換キーを同時に押すと、キーボードの第3LED(もともとScrollLockキー用だったもの)が点灯する」ことを確認してください。なお、ScrollLockキーを押しても、そのLEDはもはや点灯しません。

  8. この段階でも、Shift+変換キーでかなキーの代用になりますが、左の旗マークキーをかなキーにするには、次のようにします(~/.xinitrcや~/.xsessionで実行するようにした方が便利です)。

    % xmodmap -e "keycode 115 = Mode_switch"
Last modified: Mon May 12 05:22:02 JST 2008