WSL2にFcitx+Mozcを入れて日本語入力する

2020年8月14日WSL 2Linux,Ubuntu,Windows,WSL2

先日、WSL2(Windows Subsystem for Linux)環境のUbuntu 20.04でGUIアプリが動くように設定して、日本語を表示できるようにしましたが、よくよく考えたら日本語入力の設定をしてませんでした。

今回は、WSL2環境にFcitxとMozcをインストールして、日本語入力できるようにしてみたいと思います。

Windows Insider Preview 参加者の方へ(2021/7/11追記)

Windows 10やWindows 11のInsider Previewでは、WSLg(WSL GUI)のプレビュー版が配信されています。WSLg用の日本語化の仕方は別記事にまとめましたので、次のリンクをご覧ください。

現在のWindows 10通常リリース版である「21H1」ではWSLgは使えません。本ページ(次項以降)では、WSLgを使わずVcXsrvを用いた環境向けの解説です。現行Windows 10をご利用の方は、本ページの説明に従って設定を進めてください。

最初にまとめ

忙しい人向けにBashスクリプトにまとめてみました。

MicrosoftストアからインストールしたばかりのまっさらなUbuntuからスタートする場合、こちらのスクリプトを実行すれば一通り日本語入力ができるようになります。(2020/10/14に、本スクリプトを一部修正しました。詳細は後述の修正履歴をご覧ください)

ただし、GUIアプリを動かすにあたってWindows側でのVcXsrvの設定も必要です。詳細はこちらの記事の「Windows側にXサーバーをインストール」をご覧ください。

#!/bin/bash
# Copyright (c) 2020 astherier
# This software is released under the MIT License.
# http://opensource.org/licenses/mit-license.php
#
#WSL2のUbuntu 20.04にFcitx+Mozcをインストールします。

# https://astherier.com/blog/2020/07/install-wsl2-on-windows-10-may-2020/
#WSL環境の各パッケージをアップデートします。
sudo apt update -y
sudo apt upgrade -y

# https://astherier.com/blog/2020/08/run-gui-apps-on-wsl2/
#GUIアプリを動かすため、いくつかソフトを入れて設定します。
#Windows側の設定も必要です。詳細は上記リンクを見てください。
sudo apt install -y libgl1-mesa-dev xorg-dev xbitmaps x11-apps
echo 'export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '\''{print $2}'\''):0.0 #https://astherier.com/blog/2020/08/run-gui-apps-on-wsl2/' >> ~/.profile
cat << 'EOS' | sudo tee /etc/fonts/local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig> 
<!-- Created by https://astherier.com/blog/2020/08/run-gui-apps-on-wsl2/ -->
EOS

# https://astherier.com/blog/2020/08/install-fcitx-mozc-on-wsl2-ubuntu2004/
#日本語の言語パックをインストールします。
#これにより、コマンドのエラーメッセージなども日本語になります。
sudo apt -y install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8

# https://astherier.com/blog/2020/08/install-fcitx-mozc-on-wsl2-ubuntu2004/
#FcitxとMozcをインストールし、関連の設定をします。
sudo apt install -y fcitx-mozc dbus-x11
sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id"
cat << 'EOS' | tee -a ~/.profile
#Added by https://astherier.com/blog/2020/08/install-fcitx-mozc-on-wsl2-ubuntu2004/
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
if [ $SHLVL = 1 ] ; then
  (fcitx-autostart > /dev/null 2>&1 &)
  xset -r 49  > /dev/null 2>&1
fi
#end
EOS

echo "
一旦、WSL2を終了してください。コマンド:wsl.exe -t ディストリ名
もう一度WSL2を起動して、fcitx-config-gtk3で設定の確認をしてください。
  ・Input Method(入力メソッド)にMozcを足す
  ・Global Config(全体の設定)のTrigger Input MethodにZenkakuhankakuもセットする
"

このスクリプトを使用した方は、次に「再起動して設定を確認」へ進んでください。

ここからは、一つずつコマンドを打ちながら設定していく人向けに説明します。

GUIアプリが動くところまで

まだWSL2をインストールしていない方は、こちらの記事をご覧ください。

次にGUIアプリが動くように設定していきます。GUIアプリ動作環境の構築は、こちらの記事をご覧ください。

Ubuntuを日本語化する

Ubuntuの日本語化を行います。

これは必須ではありませんが、日本語化を行っておくと、次回WSLを起動したときに自動的にMozcを使うよう設定してくれるみたいです。

$ sudo apt -y install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF8

これらのコマンドを実行すると、コマンドのエラーメッセージやChromeなども日本語表示になります。

fcitx-mozcのインストール

日本語入力ソフトのfcitx-mozcと関連ソフトをインストールします。

$ sudo apt install -y fcitx-mozc dbus-x11

次に、machine-idファイルを作成します。

$ sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id"

続いて、環境変数などを.profileファイルに設定します。(2020/10/11と10/14に、このコマンドを修正しました。詳細は後述の修正履歴をご覧ください)

$ cat << 'EOS' | sudo tee -a ~/.profile
#Added by https://astherier.com/blog/2020/08/install-fcitx-mozc-on-wsl2-ubuntu2004/
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
if [ $SHLVL = 1 ] ; then
  (fcitx-autostart > /dev/null 2>&1 &)
  xset -r 49  > /dev/null 2>&1
fi
#end
EOS

環境変数については、参考サイト[1]を参考にしました(ただし、DISPLAY変数はGUIアプリ設定のところで設定済みなので削除しています)。if文の1行目はFcitxをスタートするコマンド、2行目は半角全角キーの連打を抑制するものです。if文の所は参考サイト[2]を参考にしました。

以上でインストール完了です。

再起動して設定を確認

インストールが完了したら、設定を反映させるため一旦WSLを再起動します。(いろいろ試したところ、WSLを再起動しないとうまく動かないみたいでした)

WSLを終了するためPowerShellかコマンドプロンプトから次のコマンドを実行します。Ubuntu-20.04の部分はディストリビューション名です。Microsoftストアから「Ubuntu」アプリをインストールしている場合は、代わりにUbuntuと入力してください。

PS C:\> wsl.exe -t Ubuntu-20.04

もう一度WSL2のUbuntu 20.04を起動します。

入力設定確認のため、fcitx-config-gtk3を実行します。(警告は無視して大丈夫だと思います)

$ fcitx-config-gtk3

こちらで入力メソッドの設定をします。

まず「入力メソッド」タブでMozcが指定されているか確認してください。ない場合は、下のプラスボタンで足してください(日本語化してからインストールした方は既に設定されていると思います)

「入力メソッド」で「Mozc」を指定します

続いて、「全体の設定」タブでTrigger Input MethodにZenkakuhankakuが指定されているか確認してください。Emptyになっている場合は、そこをクリックして半角全角キーを押すと、半角全角キーで入力切り替えできるようになります。(こちらも、日本語化した人は設定済みだと思います)

「Trigger Input Method」に「Zenkakuhankaku」を指定します

設定が終わったら、×を押して閉じます。

動作の確認

以上で日本語入力の設定は完了です。

動作確認のため、試しにLXTerminalをインストールしてみます。

$ sudo apt install lxterminal

インストールが終わったら、LXTerminalを起動してみます。

$ lxterminal

半角全角キーを押して、日本語入力ができたら設定完了です。お疲れ様でした。

無事、Mozcで日本語入力できるようになりました

参考サイト

この記事は、こちらのサイトを参考にさせていただきました。

参考サイト[1]

参考サイト[2]

おまけ

Google Chromeをインストールすれば、Chrome上でも日本語が打てるようになります。

もちろん、Chromeでも日本語入力できます

記事の修正履歴

「環境変数を.profileに書き込むコマンド」を修正(2020/10/11)

記事初出時、「fcitx-mozcのインストール」の項の、環境変数を.profileに書き込むコマンドが誤っていました。2020/10/11に、コマンド1行目を下記の通り修正しました(「EOS」をシングルクオートでくくっています)。
※最初に掲載しているシェルスクリプトは、当初から問題ありませんでした。

(誤)cat << EOS | sudo tee -a ~/.profile
(正)cat << 'EOS' | sudo tee -a ~/.profile

こちらの誤った記載でコマンドを実行した方は、.profileの記載が正しくない可能性があります。下記の確認をお願いします。

~/.profileファイルを開いて下の方にスクロールしていくと、本記事で書き足した環境変数などがあると思います。そのあたりに
if [ 0 = 1 ] ; then
という行があると思います。(左辺は、人によって違う数字が入っているかもしれません)

このif文条件式の左辺を「$SHLVL」に書き換えて、
if [ $SHLVL = 1 ] ; then
のようにしてください。このように変更することで、正しく動くようになると思います。

宇宙まっくす様、a_sue様、コメント欄でご指摘いただきまして、ありがとうございました!

fcitx-autostart、xsetコマンドを修正(2020/10/14)

記事初出時、.profileファイルに書き込むfcitx-autostartコマンドとxsetコマンドについて、下記の通り記載していました。

(fcitx-autostart > /dev/null 2&>1 &)
xset -r 49  > /dev/null 2&>1

この2&>1は、2>&1の誤りでしたので、下記のように修正しました。

(fcitx-autostart > /dev/null 2>&1 &)
xset -r 49  > /dev/null 2>&1

誤ったコマンドで実行された方は、.profileファイルを編集して、上記と同様に修正をお願いします。また、WSL起動時のワークディレクトリに「1」という名前のファイルができているかもしれません。中身が「Fcitxがどうのこうの」というファイルでしたら、それは誤ったコマンドによって生成された不要なファイルですので、削除しておいてください。

宇宙まっくす様、ご指摘いただきまして、ありがとうございました!

2020/10/17修正:この修正履歴を書き足した際、2&>12>&1がグチャグチャになっていましたので、再度修正しました(本文の方は大丈夫のはずです)。試行錯誤 様、ご指摘ありがとうございます!