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にした後も反映されることが確認出来る。
その他参照したサイトは以下。
- xkbで無変換にctrlを割り当てる … Ctrlを特殊キーとして認識させるには"modifier_map Control"の行の設定が必要
- how to assign another modifier to Alt key for X11? … Altキーを特殊キーとして認識させるには、"modifier_map Mod5"の行の設定が必要との記載があった。
- github:libxkbcommon/test/data/symbols/altwin … もともと特殊キーだったキーに新しいキーをアサインする際は、元の設定を解除する必要があった。本ページの"type[Group1] = "ONE_LEVEL""の設定が使えた。
- XKB Configuration Files … ON_LEVELの設定の詳細説明が書いてある
It's a note about the setting for swapping keys on Ubuntu15.10. It took time to find the way for my MacBookAir..