Windows10のWSL（WSLg）でGUIアプリが動くようになった

# はじめに

WSLでGUIを動かすためのWSLgがWindows10でも標準的に使用できるようになりました．Windows10でも簡単にWSL上でGUIアプリを動かすことができるようになったのでその紹介です．

# WSL上でGUIアプリを動かすには

WSLはターミナルの環境が基本ですがGUIアプリを動かすこともできます．方法は主に次の2通りがあります．

* Windows側にXサーバを自前でインストールする．
* WSLgを使用する．

もともとWSLにはGUI環境は入っていませんでしたが，Windows側にXサーバ（VcXsrv）をインストールして，WSLからそちらに接続するように設定することで，Windows上でLinuxのGUIを動かすことができます．WSL単体でGUI環境が用意できないので少し面倒です．
またWindows11の場合はWSLgを使ってGUIを動かすことができます．WSLgというのはWSLに入っているGUI環境になりますが，これまではWindows10では使用できませんでした．（一応Windows10でもWindows Insider Programに参加することでWSLgを使うことができていました．）

最近WSLに更新があり，Windows10でもWSLgが標準的に使用できるようになりました．本記事はこれの紹介です．

# Windows10でWSLgを使用する手順

まずはWSLを更新します．WSLは現状2種類があります．（2種類というとWSL1とWSL2が思い浮かびますが，それとは別の話です．）

* OSに内蔵されているWSL
* Microsoft Storeで提供されるWSL

Microsoft Storeの方が後発ですが，最近こちらがプレビュー版でなくなりv1.0.0になりました．今後このStore版が既定のWSL環境となるようです．
このv1.0.0へのアップデーにともない，Store版のWSLがWindows10でも使えるようになりました．そしてStore版のWSLを使用することでWSLgが使用可能となります．
（アイコンのペンギンがちょっと印象的なやつです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/51ba47f7-cd2d-3d41-ed4f-d6f55846c69f.png)
Microsoft Storeからインストールするか，従来のWSLを使用している場合はupdateコマンドからStore版に更新することができます．ただし事前にWindowsを最新に更新しておく必要があります．

自分が確認したときの環境はこちら．

* Windows 10 Pro （HomeでもOKのはず）
* バージョン：22H2
* OSビルド：19045.2311
* WSLディストリビューション：Debian 11

```console
> wsl --update  # 管理者権限が必要だったと思います
```

うまく更新されたかの確認は次のように行えます．OS内蔵版のWSLだとそもそも`wsl --version`が使えないようです．

```console
> wsl --version
WSL バージョン: 1.0.0.0
カーネル バージョン: 5.15.74.2
WSLg バージョン: 1.0.47
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.19045.2311
```

こちらにも表示されているようにWSLgが使用できます．
またStore版に更新してもこれまでのWSL環境（ディストリビューション）はそのまま使用できました．この時点でGUIアプリを起動するとばっちり表示されるようになっています．

# グラフィック系コードの実行

試しに昔に実装した「OpenGL ES 2.0 + EGL」のサンプルコードを起動してみます．

[サンプルコード](https://github.com/y-tsutsu/eglsample)

Remote Development拡張機能で接続VSCodeのターミナルから起動しても，ばっちりウィンドウが表示されます．これはすごい！もともとはビルドまでは行えていたのですが起動ができませんでした．自分はこの環境が欲しかったんです😀
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/be8a4e56-53c3-e1a5-e892-e807ae3fa11f.png)

# GUIアプリの起動と日本語対応

もちろんaptなんかでインストールされるGUIアプリも起動して使用することができます．ここではgeditを使ってみます．

```console
$ sudo apt install gedit
$ gedit .bashrc  # 適当なファイルを開く
```

自分の環境はもともと日本語化はしていたので，上部のボタンなどしっかりと日本語表記されています．ただわかりづらいかもしれませんがフォントが独特なものになっており見づらいです．またgedit上で日本語の入力ができません．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/97aed101-690e-b997-ae51-a5afe76fbfe2.png)
ここから日本語のフォントと日本語入力に対応します．大筋は[こちらの記事](https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/)を参考にさせてもらいました．
対応する流れは次の通りです．

* 日本語packageの導入とロケール設定
* 日本語フォントを使用できるように設定
* IME（Mozc）のインストール

まずは環境を日本語化します．検索すると手順はいろいろと見つかりますが，自分は次のように設定しています．ロケールは`ja_JP.UTF-8`を選択，タイムゾーンは`Asia・Tokyo`を選択します．

```console
$ sudo apt install -y task-japanese  # 日本語パッケージのインストール
$ sudo dpkg-reconfigure locales      # ロケールの設定
$ sudo dpkg-reconfigure tzdata       # タイムゾーンの設定
$ echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
$ source ~/.bashrc
```

次は日本語表記のフォントが微妙なのを改善します．参考にした記事ではWindows側のフォントをWSLでも参照できるようにする手順が紹介されています．`/etc/fonts/local.conf`に設定する内容で次はその抜粋です．

```console
$ 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
```

最後にIME（Mozc）をインストールします．こちらも参考した記事から抜粋です．（シンタックスハイライトが微妙ですが3行目以降はまとめて1回の操作です．）

```console
$ 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
```

ここまでで準備は完了です．改めてgeditを起動すると日本語表記や入力もいい感じに行えるようになっています．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/68f905bb-efd8-1a4b-9682-63d6b180f6e8.png)

# おわりに

最近は自分のLinux環境での開発はWSLが中心になっていましたが，WSLgが使えるようになってますます便利になりました．まだWindows10を使用している人も多いと思いますので，参考になればうれしいです．