Ubuntu15.10のキーボードレイアウト変更方法

MacBookAirの環境を移行中。Ubuntu12.04の環境からUbuntu15.10にアップデートしたのだが、その際にかなりトラブったのでメモ。Ubuntu15.10からibusからfcitx(mozcで日本語入力する場合はfcitx-mozc)という多言語入力向けの入力機構に切り替わったのだが、日本語入力をONにした瞬間にキーボードの設定が上書きされてしまい、~/.Xmodmapの設定が消えてしまうではないか…。
私の環境(MacBookAir)では右Commandキーを右Ctrlキー, 左Commandキーを左Altキー, Optionキーを左Ctrlキーに設定している。Ubuntu12.04では.Xmodmapに以下設定を書いていたとメモ。VirtualBoxのHostキーの設定とタッチパネルのNatural Scrollingの設定も入っている。

clear mod1
clear mod4
clear control
! Set Command Key to Control_L
keycode 134 = Control_R
! Set Command Key to Alt_L
keycode 133 = Alt_L
! Set Option key to Control_L
keycode 64 = Control_L
add control = Control_L Control_R
add mod1 = Alt_L 
add mod4 = Super_L Super_R
! Set Kana Key to Zenkaku Hankaku
keycode 130 = Zenkaku_Hankaku
! Set Left Control to F12 (for Host Key of Virtualbox)
keycode 37 = F12
! For Lion's Natural Scrolling
pointer = 1 2 3 5 4 6 7 8 9 10 11 12

タッチパネルのNatural ScrollingはGUIから設定出来るようになっていて、System Settings --> Mouse & TouchPad --> Natural Scrollingにチェックを入れれば動き始める。
しかしキーの入れ替え設定は.Xmodmapの設定では動かないため、困っていた所、以下ページを見つけた。

上ページでも同様の問題が発生していたが、xkbの設定を変更することで対処出来たとのこと。本ページをもとに調査したところ、私の環境でも以下手順で無事キーの入れ替えが動くようになった。

  • 手順1: Scanコードの確認: xevコマンドを実行して、出てきたウィンドウの上で入れ替え対象のキーを押してScanコードを調べる。結果は以下
右Commandキー: 134 Super_R
左Commandキー: 133 Super_L
左Optionキー: 64 Alt_L
  • 手順2: Scanコードに対応するキーコードの確認: /usr/share/X11/xkb/keycodes/evdevを調べる。
 = 64;
 = 133;
 = 134;
  • 手順3: "~/.xkb/symbols/myswap"に以下を追加
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key  { [ Alt_L ] };
  modifier_map Mod5 {  };
  replace key  { type[Group1] = "ONE_LEVEL",
	               symbols[Group1] = [ Control_L ] };
  replace key  { [ Control_R ] };
  modifier_map Control { ,  };
};
  • 手順4: ".xkb/keymap/mykbd"に以下を追加 ("setxkbmap -print"コマンドの出力に"+myswap(swapkeys)"の設定を追加している)
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+jp+us:2+inet(evdev)+myswap(swapkeys)"	};
	xkb_geometry  { include "pc(pc105)"	};
};
  • 手順5: 以下コマンドを実行した後、キーボードが入れ替わることを確認。しかしこの設定でも日本語入力をONにした瞬間にキーアサインが戻るので、この設定をシステム設定に追加する。
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
  • 手順6: シンボル設定ファイルmyswapを/usr/share/X11/xkb/symbols/にコピーする。
sudo cp -i ~/.xkb/symbols/myswap /usr/share/X11/xkb/symbols/
  • 手順7: /usr/share/X11/xkb/rules/evdev の末尾に次の1行を追加
mysetting:swapkeys = +myswap(swapkeys)
  • 手順8: 本設定をgnomeのシステム設定に反映させる
gsettings set org.gnome.desktop.input-sources xkb-options "['mysetting:swapkeys']"
  • 再起動後、キーアサインが日本語入力をONにした後も反映されることが確認出来る。

その他参照したサイトは以下。

It's a note about the setting for swapping keys on Ubuntu15.10. It took time to find the way for my MacBookAir..