Arch + KDE 6 (Wayland) で日本語入力環境を少しでもまともにする

:::note warn
#### 2024/04/12追記: 手順を変更しました
これまでの記事では、Fcitx5とIBusを導入することで無理やり日本語入力に対応させていましたが、いつの間にかFcitx5のみで動作するようになっていたため、記事を少し書き換えました。
:::

:::note info
#### 2024/12/25追記: Chromiumの扱いが簡単になりました
Chromium系アプリケーションの調整について、手順を書き換えました。
起動パラメーターを直接指定する方法のうち、デスクトップエントリについて、パッケージのアップグレード時に破壊されないよう編集する方法へ書き換えました。
また、各アプリケーション固有の設定ファイルを使用する方法や、`chrome://flags`を使用する方法について加筆しました。
:::


## はじめに
Arch系のディストリビューションであるEndeavourOSにKDE6をインストールしたのですが、ほぼすべてのアプリケーションで日本語入力を行えるような環境の構築に苦戦したため、メモを残しておきます。



## 環境
2025/01/09 時点:
key|value
--:|:--
OS | EndeavourOS
デスクトップ環境 | KDE Plasma 6.2.5
グラフィック | Wayland + Xwayland
カーネル | 6.12.4-arch1-1-surface




## 前提
Arch + KDE**6** + Wayland (+ Xwayland) の環境を想定しているため、これ以外の環境では異なる手順となる可能性があります。



## 手順

### パッケージの導入
まずはpacmanやyay等を用いて、`fcitx5-im`と`fcitx5-mozc`をインストールします。
`fcitx5-im`はFcitx5系のパッケージ4つが含まれています。
```shell:バニラMozc版
yay -S fcitx5-im fcitx5-mozc
```

:::note info
変換精度を高めたい場合は、代わりに`fcitx5-mozc-ut`をインストールして、UT辞書を使用してください[^1]。(ただしバニラMozcよりもビルドに時間がかかります)

途中で表示されるMozcのフレーバー選択では、`mozc`ではなく`mozc-ut`を選んでください。

```shell:UT辞書Mozc版
yay -S fcitx5-im fcitx5-mozc-ut
```
:::

IBus系パッケージが導入されている場合は削除しておくことをおすすめします。


### 環境変数の調整

次は`/etc/environment`に環境変数`XMODIFIERS`の設定を追記し、アプリケーション側にfcitxを使うように指示します。
```shell
sudo vim /etc/environment
```
```shell:/etc/environment
# ... (略) ...
XMODIFIERS=@im=fcitx
```
:::note warn
`XMODIFIERS`には`fcitx5`ではなく`fcitx`を指定します。
また、今回は`GTK_IM_MODULE`や`QT_IM_MODULE`を**設定しないでください**[^2]。
:::


### KDE設定の調整

再起動後、`KDE システム設定`を開きます。
左側のメニューから`キーボード`>`仮想キーボード`を開き、`Fcitx 5`を選択します。
(`Fcitx 5 Wayland ランチャー…`でも動作します)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2149594/4f1612e9-ce24-167a-a1c1-703ee381c1ce.png)

左側のメニューから`入力メソッド`を開き、`入力メソッドを追加…`からMozcをリストに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2149594/65710342-3fae-fc18-50c1-dd0a63160bcc.png)

必要であれば、この画面にある`グローバルオプションを設定…`からキーバインド等を変更してください。(私は入力メソッドのオン・オフに`変換`・`無変換`を割り当てています)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2149594/7047ca94-6b72-27f6-870a-d7399b943115.png)

もう一度再起動し、日本語入力が行えるようになっていれば成功です。

### Chromium/Electron周りの調整

Chromium/Electronを用いたアプリケーションをXwayland上で動作させると、変換中にタイプしたキーの一部がIMEを貫通してアプリケーション側にそのまま伝わるという奇妙なバグが発生します。
アプリケーションを強制的にWaylandで実行させることで、正しく入力できるようになります。

#### 起動フラグに手を加える
多くのアプリケーションは、起動時に追加の引数 `--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime` [^3] を付加するとWaylandネイティブで動作するようになります。

```shell:例: 一時的に引数をつけて起動
discord --enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime
```

普段から使用するアプリケーションの場合はデスクトップエントリごと編集しておきます。
デフォルトのファイル`/usr/share/applications/*.desktop`はパッケージのアップグレード時に上書きされるため、`~/.local/share/applications/`へコピーしてから編集を行います。
```shell
desktop-file-install --dir=$HOME/.local/share/applications /usr/share/applications/discord.desktop
vim ~/.local/share/applications/discord.desktop
```
```diff_shell:例: ~/.local/share/applications/discord.desktop
  [Desktop Entry]
  Name=Discord
  # ...
- Exec=/usr/bin/discord
+ Exec=/usr/bin/discord --enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime
  # ...
```

変更を反映するには:

```shell
update-desktop-database ~/.local/share/applications
```

#### アプリケーション側の設定ファイルを使用する
独自の設定ファイルからフラグを指定できる場合もあります。
[visual-studio-code-bin](https://aur.archlinux.org/packages/visual-studio-code-bin)では、`~/.config/code-flags.conf`に指定した引数が自動的に使用されます。
```shell:~/.config/code-flags.conf
--enable-features=UseOzonePlatform
--ozone-platform=wayland
--enable-wayland-ime
```
[IsmaelMartinez/teams-for-linux](https://github.com/IsmaelMartinez/teams-for-linux)では、`~/.config/teams-for-linux/settings.json`[^4]を編集します。
```diff_json:
  {
      "app": {
          "partitions": [
              {
                  "name": "persist:teams-4-linux",
                  "zoomLevel": 0
              }
          ]
-     }
+     },
+     "electronCLIFlags": [
+         ["enable-features", "UseOzonePlatform"],
+         ["ozone-platform", "wayland"],
+         "enable-wayland-ime"
+     ]
  }

```

#### `chrome://flags`から変更する
こちらはブラウザに適した方法です。まずは`chrome://flags`を開き、`Preferred Ozone platform`を`Wayland`に、`Wayland text-input-v3`の値を`Enabled`に書き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2149594/f60b7802-1f84-4e4a-7a9f-98cdc00734f4.png)



## おわりに

こちらの環境では、 Chromium、Discord (Electron)、Toolbox版のIntelliJ IDEA CE (Java)、Prism Launcher (Qt)、GNOME Calculator (GTK) などのアプリケーションで日本語入力が行えることを確認できました。

よりスマートな、あるいは新しい解決法をご存知の方はぜひコメント等で教えてください。

[^1]: https://wiki.archlinux.jp/index.php/Mozc#UT_.E8.BE.9E.E6.9B.B8
[^2]: https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#KDE_Plasma
[^3]: https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#Chromium_.2F_Electron
[^4]: https://github.com/IsmaelMartinez/teams-for-linux/blob/main/app/config/README.md#electron-cli-flags