JIS配列キーボードのMacBookにインストールされたUbuntuをUS配列に変更する

# 問題点
MacBookにインストールされたUbuntu（Linux Mint)において、JIS配列のキーボードをUS配列として使用したいが、デフォルトで用意されているレイアウトではUSキーボードにある\`キーがない為、\`を入力できない。

# 解決策
[Jansi](http://kenie33-jansi.blogspot.jp/p/mac-os-x-104-107-jisascii.html)と同様に¥キーを押した際に\`が入力されるように変更する。

### xkbcomp
今回はxkbcompというコマンドを使って設定ファイルを読みこませる。この設定ファイルの場所はどこでもいいのだが、`$HOME/.xkb/keymap`に置くことにする。その設定ファイルの形式は以下のようになっている。

```
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+us(mac)+us"
		replace key <AE13> { [ grave,	asciitilde ] };
	};
	xkb_geometry  { include "macintosh(applealu_jis)"	};
};
```

xkbcompコマンドを使用する際、物理キーボードのマッピング等の設定ファイルが格納されたフォルダを指定する。Ubuntu/Linux Mintの場合`/usr/share/X11/xkb`にある。その配下には`compat`, `symbols`, `geometry`などのフォルダがあり、上記設定ファイルの`xkb_compat`, `xkb_symbols`, `xkb_geometry`はその対応するフォルダを読み込む。

例えば、上記の`xkb_geometry`の場合は`xkb/geometry/macintosh`のファイル内にある`xkb_geometry appleau_jis`の設定をインクルードしている。

### geometory
`xkb/geometory`の配下には物理キーボードとシンボルのマッピングを定義する設定ファイルが入っている。

`xkb/geometory/macintosh`は以下のようになっている。この`row>keys`の設定はキーボードの１行と対応しており、この例の場合それぞれTab,q，w，e，r...のキーが`AE01`,`AE02`,`AE03`,`AE04`のシンボルに対応している。このシンボルを使って次のキーのマッピングを変更する。


```
xkb_geometry "applealu_jis" {
  ...
  row {
      top=  0;
      left= 0;
      keys {
          { <AE01>, "KEY1",   0 },
          { <AE02>, "NORM",   3.5 }, { <AE03>, "NORM",   3.5 },
          { <AE04>, "NORM",   3.5 }, { <AE05>, "NORM",   3.5 },
          { <AE06>, "NORM",   3.5 }, { <AE07>, "NORM",   3.5 },
          { <AE08>, "NORM",   3.5 }, { <AE09>, "NORM",   3.5 },
          { <AE10>, "NORM",   3.5 }, { <AE11>, "NORM",   3.5 },
          { <AE12>, "NORM",   3.5 }, { <AE13>, "NORM",   3.5 },
          { <BKSP>, "BKSP",   3.5 }
      };
  };
}
```

キーボードの設定ファイル(keymap)には`xkb_geometry  { include "[ファイルパス]([xkb_geometry名])" };`を書く。今回の場合、MacのJIS配列のキーボードの定義を使うので`xkb_geometry  { include "macintosh(applealu_jis)" };`となる。

### symbols
`xkb/symbols`の配下にはシンボルと実際の入力をマッピングを定義する設定ファイルが入っている。

**xkb/symbols/us**

```
xkb_symbols "basic" {

    name[Group1]= "English (US)";

    key <TLDE> {	[     grave,	asciitilde	]	};
    key <AE01> {	[	  1,	exclam 		]	};
    key <AE02> {	[	  2,	at		]	};
    key <AE03> {	[	  3,	numbersign	]	};
}
```

`key <AE01>`はgeometoryで定義されたシンボル、`{[grave, asciitilde ]};`はシンボルに対応するキーが押された際の実際の入力を定義する。上記の例では`grave`はそのままキーを押した場合の入力、`asciitilde`はシフトキーを押しながらそのキーを押した場合の入力の定義となる。

MacBook上のJIS配列のキーボードをUS配列として使う場合、`1`キーの横にあるはずの**`**(TLDE)キーが存在しない為、代わりに使用されない`¥`キー(AE13)を**`**を入力する為に使用する。既に定義されているキーを置き換えるので、設定は以下のようになる。

```
replace key <AE13> { [ grave,	asciitilde ] };
```

# キーマップ変更の手順
### 1. keymapファイルを作る

**$HOME/.xkb/keymap**

```
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+us(mac)+us"
		replace key <AE13> { [ grave,	asciitilde ] };
	};
	xkb_geometry  { include "macintosh(applealu_jis)"	};
};
```

### 2. xkbcompでキーボードの設定を変更
```
xkbcomp -I/usr/share/X11/xkb ~/.xkb/keymap $DISPLAY> /dev/null
```

### 3. .zshrc(.bashrc)に追加
動作することを確認できたら、Ubuntu/Linux Mint起動時にその設定が反映されるように変更する。

```
echo 'xkbcomp -I/usr/share/X11/xkb ~/.xkb/keymap $DISPLAY> /dev/null' >> $HOME/.zshrc;
```