UbuntuベースOSでの、US Keyboard+mozc(+ Fcitx) による日本語変換の設定

# はじめに

* macOSでの日本語切り替え同様の操作感が欲しい（次のWindowsでも同様にIMEはON/OFF別キーの操作になりそうですしUbuntuでも同じ環境で操作したい。
* Fcixの機能を利用した、 `mozc` + `キーボード 英語(US)` の2つの`入力メソッド`切り替えではなくて、 `mozc` のみでの切り替えを行いたい（ `入力メソッド` 自体の切り替えより軽い？ことを期待。 `入力メソッド` 自体を切り替えるとたまに入力が変になる/取りこぼす気がする）


# 構成

* Hardware : US Keyboard Notebook
* Linux Mint 19.1  (Linux papa 4.18.0-15-generic #16~18.04.1-Ubuntu SMP Thu Feb 7 14:06:04 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux) ※ Ubuntu 18.04ベース
* Fcitx
* mozc
* 日本語入力ONを `右ALT` キー
* 日本語入力OFFを `左ALT` キー

## 問題点

* `mozc` の入力切り替えにおいて、 `ALT`を利用することが出来ない（そのあたりの説明はこの辺に記載されています）
* https://github.com/google/mozc/issues/395
* https://github.com/google/mozc/blob/master/src/gui/config_dialog/keybinding_editor.cc

# 設定方法

1. `mozc` の切り替えキーの設定
2. `Fcitx` からの呼び出しキーボードの設定
3. Ubuntu側での キーマップ の変更

## mozcの切替キーの設定

`Mozcのツール` → `設定ツール` を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11540/974ccdc7-40f3-ab91-2302-f413e9ec7aca.png)

`キー設定の選択` の `編集` をクリックします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11540/4914926e-60ef-3719-a6f6-49a5913c5736.png)

以下のように設定を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11540/7fc3fc0e-c4c9-486f-8472-0b678a3977fc.png)

* `ALT`キー単体では特に利用してないため `Katakana` を `右ALT` にマッピング、 `Hiragana` を `左ALT` にマッピングする予定です。既存の設定は重複しないように一旦消してから行います。
* `ALT`  キーとしては登録できないのでUSキーボードでは存在していないキーを登録することで代替することにします。

## Fcitx からの呼び出しキーボードの設定

* Fcitxでの `入力メソッド` としては `mozc` のみを設定します。よく英語キーボードを追加しているケースがありますが今回は利用しません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11540/237cb6b7-bb16-48ef-b654-1821a3de3fe2.png)

`Mozc` をクリックするとキーボードレイアウトが表示されます。ここでは `英語(US)` を選択します。ここで `既定の入力メソッド` は選択しないでおきます。ここで設定したキーボードレイアウトでmozcが起動します。かりにOS側で英語キーボードを選択していても、ここで日本語を選択するとmozcでの入力は日本語キーボードとして認識されます。したがってここでは `英語` に指定して置くほうが無難です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11540/e4571401-490c-2681-148f-0b0ce5f3cc89.png)

## Ubuntu側での キーマップ の変更

以下のファイルを用意します

```
❯❯❯ ls -lR .xkb
drwxr-xr-x 2 hideaki hideaki 4096  3月  3 22:28 keymap
drwxr-xr-x 2 hideaki hideaki 4096  3月  3 23:44 symbols

.xkb/keymap:
合計 8
-rw-r--r-- 1 hideaki hideaki 297  3月  3 22:28 myxkb

.xkb/symbols:
合計 8
-rw-r--r-- 1 hideaki hideaki 114  3月  3 23:44 myswap
```

```.xkb/keymap/myxkb. 
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+us+inet(evdev)+ctrl(swap_lwin_lctl)+terminate(ctrl_alt_bksp)+myswap(swapkeys)"	};
	xkb_geometry  { include "pc(pc104)"	};
};
```

```.xkb/symbols/myswap.
partial modifier_keys
xkb_symbols "swapkeys" {
  key <LALT>  { [ Hiragana ] };
  key <RALT>  { [ Katakana ] };
};
```

以下のスクリプトを用意してシステムログイン時に起動させることで有効になります。

```~/dotfiles/bin/keymap-change.sh
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/myxkb $DISPLAY
```

* 今回利用してるLinux Mintの場合にはシステム設定の `StartUp Application` へ追加します。これで起動します。起動は少しまってから行っています。 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/11540/72d73dbc-c20d-af68-d7fd-47522905e8fa.png)

* キーボードの値が何かを知りたい場合には `xev` で確認することが出来ます。


## 加筆（2021/08/13）
Gnomeの環境で、サスペンドに入るとどうしても標準の状態に戻ってしまいます。そこでシステムワイドの変更にはなってしまいますが以下を追加します。

先程つくったmyswapをシステム側のsymbolsにコピーします

```
sudo cp -i ~/.xkb/symbols/myswap /usr/share/X11/xkb/symbols/
```

/usr/share/X11/xkb/rules/evdevの最終行に以下を追加します

```/usr/share/X11/xkb/rules/evdev
mysetting:keyboard-notebook   =       +myswap(keyboard-notebook)
```
以下のコマンドでGnome側に設定を反映します

```
gsettings set org.gnome.desktop.input-sources xkb-options "['mysetting:keyboard-notebook']"
```


# 確認

ちなみにこの状態でも `ALT+xx` のショートカットは死んでいません。普通に使うことが出来ますなので影響あるのは単体の `ALT` が使えないということになります。（今のところそのことで困っていません）
実際のところ Fcitxでの `入力メソッド` の切替とどの程度何が違うのかはしばらく使ってみないとわかりませんが今のところ大きな不具合はなさそうです。

* iBusの方はそもそもこういう動作ですよね？

# 既知の問題

* Chomeブラウザで `右ALT`を利用した際にカーソルがウインドウを外れることがある
* Chomeブラウザで、Facebook入力欄に「。」の入力後Enter（送信）が出来ない状態になる。イラッとする（追記　2019/03/10）
*