Win11のWSL2 (WSLg)を日本語化 & Mozcで日本語入力

WSL 2Linux,Ubuntu,Windows,Windows 11,WSL2

Windows10やWindows11のInsider Previewで利用できるWSL2には、「WSLg」という、WSL2側にインストールしたGUIアプリを表示する仕組みがあります。

日本語版のWindowsを利用していてもWSL中のUbuntu環境は英語設定のままですので、WSLgを使ってGUIアプリを起動すると日本語が文字化けしてしまいます。ターミナル上で動くCUI (CLI) アプリであれば、Windows Terminalなどのターミナルソフトが日本語に対応しているので問題ないものの、GUIアプリは日本語非対応のままだとどうしようもありません。

そこで、本記事ではWSLg環境で動くGUIアプリを、日本語表示・日本語入力に対応させる方法を紹介します。

まえがき

検証環境

本記事は、Windows 11 Pro Insider Preview(21H2、ビルド22000.65)で動くことを確認しています(恐らく、Windows 10のInsider Previewでも動きます)。WindowsもWSLgも、現時点ではどちらもプレビュー版のものですので、今後状況が変わる可能性があります。

また、記事執筆時点の通常リリース版であるWindows 10 21H1では、そもそもWSLgは使えませんので、このページの方法だけではGUIアプリの表示ができません。現行Windows 10をお使いの方は、当サイトの次の記事をご覧ください。

事前準備:WSL2(WSLg)のインストール

先に、WindowsにWSL2をインストールしておいてください。WSL2のインストール方法は、こちらの記事で紹介しています。

こちらの記事の「GUIアプリをインストール」の項(xeyesを起動するところ)あたりまでは行っておいてください。

xeyesが動く所まで、事前に設定しておいてください

本記事では、ここまで設定が終わっていることを前提に進めます。

WSL2 & WSLgを日本語化する(Bashスクリプトで)

WSL2をインストールした直後の人向けに、一括で日本語化するBashスクリプトを用意しました。多くの方は、Bashスクリプトを実行すれば問題ないと思いますので、このまま読み進めてください。

いろいろ設定済みで他の設定との競合が心配な方や、何をやっているか1つずつ見ながら設定していきたい方は、本項を飛ばして「ステップ・バイ・ステップ」の項へ進んでください。

さて、一括で日本語化設定を行うBashスクリプトはこちらです。こちらを実行すれば、自動的に必要なソフトのインストールや初期設定が行えます。後ほどダウンロードリンクも紹介します。

#!/bin/bash
# Copyright (c) 2021 astherier
# This software is released under the MIT License.
# http://opensource.org/licenses/mit-license.php
#
#japanize-wslg.sh
#WSL2/WSLgを日本語環境にし、Fcitx+Mozcをインストールします
#最終更新:2021/07/11
#https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/

#Ubuntuの各アプリをアップデート
sudo apt update
sudo apt upgrade -y

#Ubuntu側から、Windows側にあるフォントを扱えるようにする
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 bash script from https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/ -->
EOS

#日本語パックを入れて、ロケールをja_jpにする
#これ以降、コマンドラインのエラー表示なども日本語になります。
sudo apt -y install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8

#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 bash script from https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/
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
#Added by bash script: end
EOS

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

こちらのスクリプトを、WSL2から見える所に置いて実行すればOKです。ただし、WSL2のUbuntuはあくまでLinux環境ですので、「BOMなしUTF-8 & 改行コード:LF」の状態で保存する必要があります。Windows標準のメモ帳では改行コードLFで保存することができませんので、他のテキストエディタをご利用ください。

・・・というのも面倒ですので、「BOMなしUTF-8 & 改行コード:LF」で保存したファイルをこちらに置いておきました。
https://astherier.com/static/blog/2021-07-11/japanize-wslg.sh

ということで結局、Windows TerminalなどからUbuntuを起動して、次の2行を実行するだけでOKです。

$ wget https://astherier.com/static/blog/2021-07-11/japanize-wslg.sh
$ bash japanize-wslg.sh

もしくは、ブラウザでシェルスクリプトをダウンロードしてWSL2側から実行することもできます。例えば、Cドライブの直下にダウンロードした場合は、Ubuntuから次のコマンドを実行すればOKです。

$ bash /mnt/c/japanize-wslg.sh

実行すると、sudoから昇格のためのパスワードを聞かれます。Ubuntuのユーザーアカウントを作った際のパスワードを入力してください。しばらく待って、「一旦、WSL2を終了してください」というメッセージが表示されたら終了です。(シェルスクリプトはもう不要ですので、削除しても大丈夫です)

「一旦、WSL2を終了してください」というメッセージが表示されたら終了です

続いて、(次項を飛ばして)「日本語化設定を確認」の項へ進んでください。

WSL2 & WSLgを日本語化する(ステップ・バイ・ステップ)

この項では、上記シェルスクリプトの解説も兼ねて、一つずつ必要な設定などを紹介していきます。何らかの理由でシェルスクリプトを実行したくない方は、この項に従って設定を進めていってください。

各種ソフトのアップデート

Windows TerminalなどからUbuntuを立ち上げます。まずは、各種ソフトのアップデート(apt upgrade)を行っておきましょう。

$ sudo apt update && sudo apt upgrade -y

日本語フォントを読み込む

標準のWSL2環境には、日本語のフォントはインストールされていません。試しにfc-listコマンドを実行すると、次のように6個しかフォントがありません。

$ sudo apt install fontconfig
$ fc-list
/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book
/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf: DejaVu Serif:style=Book

この状態でもGUIアプリは使えますが、GUIアプリ中に日本語(2バイト文字)があると、下図のようにすべて文字化けしてしまいます。これでは全く使えませんので、日本語フォントを扱えるようにしたいと思います。

LXTerminal(右下)で日本語を表示させた例。「あいうえお」が文字化けしている。

WSL2側で日本語フォントを扱えるようにする方法はいくつかあるようですが、ここではWindows側にインストールされているフォントをWSL2側でも参照するように設定したいと思います。次のコマンドを実行し、/etc/fonts/local.conf ファイルを作成します。(参考サイト[1])

$ 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 bash script from https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/ -->
EOS

見ての通り、local.confの中身はXMLファイルで、「/mnt/c/Windows/Fonts」つまり「C:\Windows\Fonts」も参照するように設定しています。これを作成することで、下図のように日本語も問題なく表示できるようになります。ちなみに、fc-list コマンドをもう一度実行すると、メイリオやMSゴシックなど、見覚えのあるフォントが増えていると思います。

Windows側のフォントを読み込むと、正しく日本語が表示される(右下)

Ubuntuのロケールを日本語(ja_JP)にする

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ファイルを作成します。(参考サイト[2])

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

続いて、環境変数などを.profileファイルに設定します。

$ cat << 'EOS' | tee -a ~/.profile
#Added by bash script from https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/
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
#Added by bash script: end
EOS

環境変数については、参考サイト[2]を参考にしました。if文の1行目はFcitxをスタートするコマンド、2行目は半角全角キーの連打を抑制するものです。if文の所は参考サイト[3]を参考にしました。

以上でインストール完了です。引き続き次項の確認を行ってください。

日本語化設定を確認

ソフトのインストールや設定を行った直後は、正常に日本語入力が動作しません。設定の再読込や関連サービスの起動をするため、まずWSL2の再起動を行います。

現在開いているUbuntuのターミナルは exit コマンドなどで一旦閉じてください。

続いて、Windows側でPowerShellやコマンドプロンプトを開き、WSL2をシャットダウンするコマンドを実行します。コマンドの書式は wsl -t <ディストリ名> です。ディストリ名は、皆さんの環境に合わせて読み替えてください。下記は、「Ubuntu 20.04」の場合です。無印の「Ubuntu」を利用している場合は、単に「Ubuntu」と入力します。その他、WSLの終了方法についての詳細は別記事にまとめていますので、良ければそちらもご覧ください。

PS C:\> wsl -t Ubuntu-20.04

終了したら、もう一度Windows TerminalなどからUbuntuを起動します。

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

$ fcitx-config-gtk3

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

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

Mozcが指定されているか確認します。なければ「+」ボタンから足してください。

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

「Zenkakuhankaku」が指定されているか確認します。なければ、設定します。

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

動作の確認

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

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

$ sudo apt -y install lxterminal
$ lxterminal

半角全角キー(もしくは[Ctrl]+[Space])を押して、日本語入力ができたら設定完了です。お疲れ様でした。

LXTerminalなどのGUIアプリで日本語入力の動作を確認します

不具合

まだWSLgはプレビュー版ですので、いくつか不具合が見られます。私が試した限り、下記のような不具合を確認しました。

Firefoxでは日本語が表示できない

Firefoxでは、日本語フォントの読み込みがうまくいかず、日本語のページを表示しても文字化けしてしまいます。ページ中のフォントをメイリオなどと指定してもうまくいきませんし、そもそもタブバーやアドレスバーなどのUI部分も文字化けしています。

Chromeでは問題ないため、Firefox側の問題だと思うのですが、今のところ解決策は見つけられていません。(以前のVcXsrvで表示する方法だとFirefoxも問題なかったと思いますが・・・)

Chrome(左上)は問題ないが、Firefox(左下)は右下のようにメイリオを指定しても文字化けする

mozcの変換候補が変なところに出てくる

通常、mozcの変換候補は入力欄の下に出てきますが、WSLg環境だと変な所に出てくることがあります。変換候補ウィンドウもドラッグすれば動かせますが、次に入力する時は元の位置に戻ってしまいます。

[半角/全角]キーが効かない

本来、キーボードの[半角/全角]キーを押せば日本語入力と直接入力を切り替えられるはずですが、ソフトによっては「`(バッククォート)」が入力されてしまいます。これまた、解決策は見つけられていません(本記事の設定内容が悪い可能性もあります)。

とりあえず、[Ctrl]+[Space]で切り替えができますので、そちらで代用してください。

参考サイト

参考サイト[1]

参考サイト[2]

参考サイト[3]

参考サイト[4]:こちらの記事によれば、WSL2が動いていない状態で、スタートメニューやwslg.exeからGUIアプリを起動するとIMEが起動しないらしい(.profileが実行されないため)。ただ、私が試した限りでは、問題なく日本語入力可能でした。


ちなみに、本記事は、当サイトの昔の記事をWindows 11 (WSL2 + WSLg)用に書き直したものです。元ネタの記事はこちらです。

おすすめ記事

WSL2のUbuntu環境にChromeをインストールしたい場合は、こちらの記事をご覧ください。Windows 10用の記事ですが、今でも問題なくインストールできます。ただし、こちらの記事では「音を出したい場合はこの設定も」と紹介していますが、WSLgではそのまま音声も出力可能です。ちなみに、Firefoxは sudo apt install firefox でインストールできます。