日本語入力設定 on elementary OS (0.4.1 Loki) + fcitx-mozc
設定環境
- ハードウェアはApple Magic Keyboard (US) + Mac。
- elementary OS (0.4.1 Loki)はVMware Fusion上で動いていて、Fusionのキーボード設定はデフォルトからほぼいじっていない。
Macでは、Karabiner-Elementsで「コマンドキーを単体で押したときに、英数・かなキーを送信する。」ルールを有効にしているが、いろいろうまくいかないことがあったので、VMware Fusionではこのルールを適用しないようにした。具体的には~/.config/karabiner/assets/complex_modifications/1520611597.json
の当該ルールの2箇所に下記コードを追加。
"conditions": [ { "type": "frontmost_application_unless", "bundle_identifiers": [ "^com\\.vmware\\.fusion$" ] } ]
右⌘でIME ON、左⌘でIME OFF
xkeysnail
xkeysnailを使わせていただいて、右⌘単体で変換キーに、左⌘単体で無変換キーにリマップする。xkeysnailはroot権限がいるのでsudoでパスワードを聞かれないように設定。最終行の<USER>
には自分のログインIDをいれます。ただ、sudoの設定ファイルの編集を間違うと、rootでログインしているウィンドウが開いていいない限り、どうしようもなくなる可能性があるので、これだけは手作業でやった方がいいと思います。慎重に。
sudo apt install python3-pip git clone --depth 1 https://github.com/mooz/xkeysnail.git cd xkeysnail sudo pip install --upgrade . #sudo sh -c "echo '<USER> ALL=(ALL) NOPASSWD: /usr/local/bin/xkeysnail' > /etc/sudoers.d/xkeysnail"
~/.config/xkeysnail/config.py
に設定ファイルを配置。
import re from xkeysnail.transform import * define_multipurpose_modmap({ Key.LEFT_META: [Key.MUHENKAN, Key.LEFT_META], Key.RIGHT_META: [Key.HENKAN, Key.RIGHT_META], })
デスクトップ起動時に自動的にxkeysnailが実行されるよう、~/.config/autostart/xkeysnail.desktop
を配置。こんなところで設定するのはおかしい気がするが、どうせ自分しか使わないし、動けばいいということで。上記と同じく、最終行の<USER>
には自分のログインIDをいれます。
[Desktop Entry] Type=Application Version=1.0 Name=Xkeysnail GenericName=Keymapper Exec=sudo xkeysnail /home/<USER>/.config/xkeysnail/config.py --devices /dev/input/event1 --quiet
fictx-mozc
fcitx-configtoolの、全体の設定>ホットキーで、拡張オプションの表示をすれば、トグルではなく、ONとOFFで別々のキーが設定できるので、右⌘にIME ON、左⌘にIME OFFを割り当て。 また、fcitx-configtoolのアドオンタブで拡張をチェックし、Provides XIM SupportをONにした。
Emacs
Emacsでも、というよりEmacsでこそmozcを使いたいので、emacs-mozc-binをインストールし、mozcのオン・オフを自前でやるように設定。
sudo apt install emacs-mozc-bin echo 'emacs24.useXIM: false' > ~/.Xresources
init.elの適当なところで、下記のような感じでキー割り当て。
(bind-keys ([henkan] . (lambda () (interactive) (activate-input-method default-input-method))) ([muhenkan] . (lambda () (interactive) (deactivate-input-method))))