ubuntuで英字キーボードを使用したときの日本語入力設定
私は普段Ubuntuに英字キーボードを繋いでいるのですが、そうなるとめんどくさいのが日本語入力の設定です。この記事では私がたどり着いた答えを解説していこうと思います。 また、この記事のやり方を真似ることで、vimで日本語入力をオンにしたままノーマルモードに入った際に自動でオフにしてくれる設定も可能になります。
前提
デフォルトのインプットメソッドがfcitxでないとできません。設定->地域と言語->インストールされている言語の管理 からキーボード入力に使うIMシステムをfcitxにしてください。
設定方法
レイアウトを英字にする
$ sudo dpkg-reconfigure keyboard-configuration
画像のように選択していく。普通のキーボードだったら画像の通りで大丈夫ですが、HHKBなどを使っている場合は、キーボードモデルのところで使っているものを選択してください。




そのようにしたら、/etc/default/keyboardが以下のようになっていればok
$ cat /etc/default/keyboard BACKSPACE="guess" XKBMODEL="pc105" XKBLAYOUT="us" XKBVARIANT="" XKBOPTIONS=""
次に/usr/share/ibus/component/mozc.xmlの
fcitxの設定
まずはfcitx-mozcをインストールします。
$ sudo apt install fcitx-mozc
そうしたら、アプリケーション一覧から下の画像のように、fcitxの設定を起動します。

入力メソッドをmozc、英字キーボードのみにし、2つともレイアウトは英字にしてください。
次に画像のように、「入力メソッドのオンオフ」を好きなバインドにしてみてください。ここではこれをバインドAと呼びます。(画像の例ではSuper+Space)

mozcの設定
先程mozcもインストールしたはずですので、アプリケーション一覧からmozcの設定を起動してください。もしない場合は、aptなどで簡単に入ると思います。
下の画像のように、キー設定->キー設定の選択をカスタムにして、編集を選択してください。

すると、以下の画像のような画面が出てくるので、直接入力モードのIMEを有効化に好きなバインドにしてください。先程のバインドとは異なることに注意してください。ここではこれをバインドBと呼びます。(画像の例ではShift Space)

以上で設定は終わりです。このようにすると、バインドAで日本語入力と半角入力をトグルすることができます。なお、バインドBはログインした最初のときに日本語入力がオフになっている場合があるのでそのときに使います。
つまり流れとしては、
- ログインする
- 日本語入力をバインドBでオンにする
- 以降はバインドAでトグルする
となります。
注意点
バインドは、システム全体のバインドと被っていると動きません。
おまけ macみたいにIMEをオンオフする
トグルではなく、macのように、これを押したら必ず日本語入力、半角入力になるとしたい場合は、下の画像のように、fcitxの設定の入力メソッドをオンに、オフにというところを設定してやるとそのようになります。

私は、トグルに慣れてしまったので設定していません。
おまけ vimでの設定
日本人Vimmerなら、日本語入力のままノーマルモードに入ってしまってイライラしたことがあると思います。
以下のように設定することで、日本語入力のままノーマルモードに入ったときに、自動で半角モードに切り替えることができます。
使用しているメソッドの確認
fcitxをインストールすると、fcitx-remoteというコマンドラインツールが自動的に入るのですが、これはコマンド経由でIMEを切り替えられるというものです。つまり、インサートモードを抜けるときにこのコマンドを適切に発火してやれば所望の動作が実現できます。
$ cat ~/.config/fcitx/profile | sed 's/,/\n/g' | grep True # True False # True False #WidePunc=True # True False EnabledIMList=mozc:True fcitx-keyboard-us:True # True False #PreeditStringInClientWindow=True
mozc,fcitx-keyboard-usという2つを使っていることがわかりました。つまり、以下のコマンドでコマンドラインで半角入力にすることができます。
# 半角 fcitx-remote -s fctix-keyboard-us # 日本語 fcitx-remote -s mozc
vimscriptでの設定
fcitx-remoteコマンド単体だと、現在のIMEの状態(日本語入力だと1のinactive)を返すので、インサートモードを抜けたときに日本語入力だった場合のみ半角入力に戻しています。
if has('unix') autocmd InsertLeave * :call OffIME() endif function! OffIME() abort " fcitx-remote returns 1 if current method is mozc let l:fcitx_status = system('fcitx-remote') if fcitx_status == 1 call system('fcitx-remote -s fcitx-keyboard-us') endif endfunction