ChromebookのLinux環境(Crostini)に公式サイトから.debでVS Codeをインストールし、Fcitx + Mozcも導入したのに、「ターミナルでは日本語が打てるのにVS Code上では入力できない」という現象に遭遇しました。
結論から言うと、原因は「VS Code(Electron)のWayland対応とFcitxの相性問題」でした。解決に至るまでの切り分けと、恒久的な対策をまとめます。
環境
- Chromebook (ChromeOS)
- Linux開発環境 (Crostini / Debian)
- Visual Studio Code (公式サイトから
.debでインストール) - Fcitx + Mozc (導入済み)
陥りがちな「ターミナルの罠」
トラブルシューティング中、「Linuxターミナル上では『かな/英数』キーで日本語が打てているからFcitxは正常に動いているはずだ」と思い込んでいました。
しかし、Chromebookの標準ターミナルはChromeOSのネイティブアプリです。ターミナル上で日本語が打てていたのは、Linux側のFcitxが動いていたわけではなく、ChromeOS本体のIMEが効いていただけでした。(Ctrl + SpaceによるFcitxの切り替えがターミナルで反応しなかったことで発覚しました)。
問題の切り分け方法
本当にLinux側でFcitxがGUIアプリに対して機能しているかを確認するため、標準的なLinuxアプリであるgedit(メモ帳)を使ってテストしました。
sudo apt install gedit
env GTK_IM_MODULE=fcitx XMODIFIERS=@im=fcitx gedit
gedit上ではFcitx経由で正常に日本語入力ができたため、「Linux環境のFcitx自体は正常だが、VS Code特有の環境(Electron/Wayland)が原因で日本語入力を弾いている」ということが確定しました。
解決策:X11モードで起動し、環境変数を渡す
VS Codeをターミナルから code . で起動する際、デフォルトのWaylandモードではなくX11モードを強制し、同時にFcitx用の環境変数を渡すことで解決します。
1. テスト起動
まずは以下のコマンドでVS Codeを起動し、日本語入力ができるか確認します。
env GTK_IM_MODULE=fcitx XMODIFIERS=@im=fcitx code . --ozone-platform=x11
これでFcitxが起動し、日本語入力ができれば成功です。
2. 恒久的な設定(エイリアスの登録)
毎回この長いコマンドを打つのは現実的ではないため、~/.bashrc にエイリアス(別名登録)を設定し、普段通り code . と打つだけでこの設定が適用されるようにします。
① .bashrc を開く
nano ~/.bashrc
② 以下の1行を末尾に追記する
alias code="env GTK_IM_MODULE=fcitx XMODIFIERS=@im=fcitx code --ozone-platform=x11"
③ 設定を反映させる
source ~/.bashrc
これで、ターミナルから code . で起動しても、バッチリVS Code上で日本語入力ができるようになります!
まとめ
- ターミナルで日本語が打てる=Fcitxが動いている、とは限らない(ChromeOS側のIMEが効いているだけの場合がある)。
- GUIアプリの切り分けには
geditなどのシンプルな標準アプリを使うと分かりやすい。 - Wayland環境のChromebookでVS Code + Fcitxを使う場合は、
--ozone-platform=x11のオプションが必要。
同じ現象でハマっている方の参考になれば幸いです!