Ubuntu 16.04のキーボード設定をMacBook向けにしてみる

## はじめに

Apple製品は好きだけど、開発用にどうしてもUbuntuにしたい！、という人、多いのではないでしょうか。

Apple製品に他OSをいれるとどうしてもついてまわるキーボード問題... 現在ネットに公開されている情報はUbuntu 14.04を対象にしたものが多かったので、Ubuntu 16.04向けに試行錯誤の結果を記載してみました。もっと良い方法があれば、是非コメントで教えてください。

Ubuntu 16.04のキーボード設定をする上での問題としては...

* Ubuntuのキーマップ設定は`xkb`に変更されました。`Xmodmap`などは陳腐化されており、うまくいかないようです。
* Ubuntu 14.04以降、言語入力の仕組みが`iBus`から`fxcit`に変更されました。

## 手順

1. [修正元となるキーボード設定をApple JISにする。](###修正元となるキーボード設定をApple JISにする。)
2. [IMを変更する。](###IMを変更する。)
3. [CommandキーをCtrlキーに変更する。](###CommandキーをCtrlキーに変更する。)

### 修正元となるキーボード設定をApple JISにする。

設定のベースとなるキーボード設定をAppleのJISキーボードにします。インストール時に聞かれるはずなので、インストール時に正しく設定できていれば本手順は不要です。

キーボード設定を呼び出します。

```terminal
dpkg-reconfigure keyboard-configuration
```

下記のように設定します。

* Apple アルミニウムキーボード (JIS)
* Japanese
* Japanese - Japanese (Macintosh)
* No toggling
* No temporaly switch
* The default for the keyboard

### IMを変更する。

IMを変更し、英数キーを押せばIMがオフに、かなキーがおさればIMがオンになるようにします。

Ubuntuは14.04以降入力方法を`fxcit`に変更しつつあるのですが、`fxcit`は残念ながら`iBus`ほど機能が充実していないようです。そこで、一旦`iBus`に入力方法を戻すことにします。`System setting` > `Language Support`を開き、下記のように設定します。

![ibus_fxcit.png](https://qiita-image-store.s3.amazonaws.com/0/152362/9c3c6052-43f5-a695-a60c-61eaf5adbc27.png)

次に、入力方法を設定します。`System setting` > `Text Entry`から`Japanese (Mozc) (iBus)`を追加します (ウィンドウ下部`+`ボタンより)。他のキーボードは消してください。

![text_entry.png](https://qiita-image-store.s3.amazonaws.com/0/152362/041ea1f7-f886-272b-9f53-511e09c73413.png)

`Japanese (Mozc) (iBus)`を選択すると、上記`Text Entry`画面に設定ボタンが現れます。設定ボタンをクリックし、キーマップを変更します。設定画面上の`Keymap style`からデフォルトとするキーマップを選び、カスタマイズします。同画面で英数ボタンに"Deactivate IME"を、かなボタンに"Activate IME"を割り当てましょう。なお、ここまで手順どおりにやっていれば、英数キーはひらがなキーとして、かなキーは英数キーとして認識されているはずですので、表示されるキー名があべこべでも大丈夫です。

最後に、Mozcが勝手にキーマップを変更しないようにしましょう。`/usr/share/ibus/component/mozc.xml`を編集します (`sudo vim /usr/share/ibus/component/mozc.xml`)[^1]。

```diff:/usr/share/ibus/component/mozc.xml.diff
 <component>
   <version>2.17.2116.102+gitfd0f5b34+dfsg-1ubuntu1.1</version>
   <name>com.google.IBus.Mozc</name>
   <license>New BSD</license>
   <exec>/usr/lib/ibus-mozc/ibus-engine-mozc --ibus</exec>
   <textdomain>ibus-mozc</textdomain>
   <author>Google Inc.</author>
   <homepage>http://code.google.com/p/mozc/</homepage>
   <description>Mozc Component</description>
 <engines>
 <engine>
   <symbol>&#x3042;</symbol>
   <rank>80</rank>
   <description>Mozc (Japanese Input Method)</description>
   <language>ja</language>
   <icon>/usr/share/ibus-mozc/product_icon.png</icon>
   <setup>/usr/lib/mozc/mozc_tool --mode=config_dialog</setup>
-  <layout>default</layout>
+  <layout>jp</layout>
   <name>mozc-jp</name>
   <longname>Mozc</longname>
 </engine>
 </engines>
 </component>
```
(diffだと思ってください)

### CommandキーをCtrlキーに変更する。

デフォルトの設定だと、Commandキーは"Superキー”に設定されてます。"Superキー"はWindowsにある"Windowsキー"と同じで、Unityのダッシュボードを操作したりする機能を提供します。自分はコピペとかをCommandキーですることが多いので、CommandキーもControlキーにしてしまうことにしました。（つまり、Controlキーが2つある）

xkbの設定ファイルに新たなオプションをaltwin2として追加します[^2][^3] (`sudo emacs /usr/share/X11/xkb/symbols/altwin2`)。

```c:/usr/share/X11/xkb/symbols/altwin2
partial modifier_keys
xkb_symbols "cmd_n_ctrl" {
    key <LWIN> {        [       Control_L               ]       };
    key <RWIN> {        [       Control_R               ]       };
    key <LCTL> {       [       Control_L         ]       };
    modifier_map Control { <LWIN>, <RWIN>, <LCTL> };
};
```

上記オプションを設定リストに追加します(`sudo emacs /usr/share/X11/xkb/rules/evdev`)。 

```diff:/usr/share/X11/xkb/rules/evdev.diff
 ! option	=	symbols
   grp:shift_toggle	=	+group(shifts_toggle)
   altwin:menu		=	+altwin(menu)
   altwin:meta_alt	=	+altwin(meta_alt)
   altwin:alt_win	=	+altwin(alt_win)
   altwin:ctrl_win	=	+altwin(ctrl_win)
   altwin:ctrl_alt_win	=	+altwin(ctrl_alt_win)
   altwin:meta_win	=	+altwin(meta_win)
   altwin:left_meta_win	=	+altwin(left_meta_win)
   altwin:hyper_win	=	+altwin(hyper_win)
   altwin:alt_super_win	=	+altwin(alt_super_win)
   altwin:swap_lalt_lwin	=	+altwin(swap_lalt_lwin)
   altwin:swap_alt_win	=	+altwin(swap_alt_win)
+  altwin2:cmd_n_ctrl    =       +altwin2(cmd_n_ctrl)
   grab:debug		=	+srvr_ctrl(grab_debug)
```
(diffだと思ってください)

上記オプションを設定リストに追加します(`/usr/share/X11/xkb/rules/evdev.lst`)。 

```diff:/usr/share/X11/xkb/rules/evdev.lst.diff
   gag             md: Moldavian (Gagauz)

 ! option
+  altwin2:cmd_n_ctrl    Win swapped with Ctrl
   grp                  Switching to another layout
   grp:switch           Right Alt (while pressed)
   grp:lswitch          Left Alt (while pressed)
```
(diffだと思ってください)

最後にキーボード設定に上記追加オプションを登録します。dconfの設定になるのですが、`dconf-editor`を使ってしまうと (`sudo apt-get install dconf-editor`) 簡単です.dconfの`org::gnome::desktop::input-sources`を下記のように設定します。

![dconf_input_sources.png](https://qiita-image-store.s3.amazonaws.com/0/152362/bb09f710-4368-b198-c943-b94d86fb761d.png)

## 参考 (環境)

* MacBook Pro Late 2013
    - JISキーボード
* Ubuntu 16.04 Desktop

## 参考文献

[^1]: Kuro_Code25, ["ibus-mozcのキーボードレイアウトが英語になるトラブルの対処法"](http://note.kurodigi.com/ibus-mozc-kbdlayout/)
[^2]: ZeptByteS, [http://qiita.com/ZeptByteS/items/db1de2cbd940c65b8d1f](http://qiita.com/ZeptByteS/items/db1de2cbd940c65b8d1f)
[^3]: Aleksandar Savkov, [Answer](http://askubuntu.com/a/501660) to "How to swap Command and Control keys with xkb step by step?"