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)
  1. 次のように/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
  1. Xサーバを再起動します。

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

% xmodmap -e "keycode 115 = ISO_Next_Group"
  1. 「かなキーを押すと、キーボードの第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)" };
};
  1. 用意したファイルを次のように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)
  1. 次のように/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
  1. Xサーバを再起動します。

  2. 次のように左の旗マークキー(キーコード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)" };
};
  1. 用意したファイルを次のように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)
  1. 次のように/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:lwin_toggle,grp_led:scroll"
EndSection
  1. 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)" };
};

用意したファイルを次のように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
  1. Xサーバを再起動します。

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

% xmodmap -e "keycode 115 = ISO_Next_Group"
  1. 「かなキーを押すと、キーボードの第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)"     };
};
  1. 用意したファイルを次のように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
  1. ルートになります。

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

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

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

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

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

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

% xmodmap -e "keycode 115 = Mode_switch"