WSL で Ubuntu 24.04 の GUI に リモートデスクトップ接続する環境を作成する

WSL 上に Ubuntu 24.04 を インストールしてリモートデスクトップ接続できるようにします。

### 前提条件

WSL が version 2 としてインストールされている必要があります。

WSL を まだ インストールしていない人は、他のサイトでインストール・初期設定してください。

Ubuntu 24.04 イメージを直接 Ubuntu の サイトから ダウンロードして 環境構築します。

この手順では `C:\WSL-Disk` に WSL 用の環境を作ります。


### インストールイメージのダウンロード

[Ubuntu WSL Images](https://cloud-images.ubuntu.com/wsl/)

から `noble` をクリックして その中にある `current` の中から `ubuntu-noble-wsl-amd64-wsl.rootfs.tar.gz` を選んで ダウンロードして
`C:¥WSL-Disk\initial-image` ディレクトリに保存します。

コマンドで行う場合 
PowerShell を開いて

``` powershell
mkdir C:\WSL-Disk\initial-image
cd C:\WSL-Disk\initial-image
curl https://cloud-images.ubuntu.com/wsl/noble/current/ubuntu-noble-wsl-amd64-ubuntu24.04lts.rootfs.tar.gz -o ubuntu-noble-wsl-amd64-ubuntu24.04lts.rootfs.tar.gz
```

### WSL 上に Ubuntu 24.04 をインストールして 初期設定

以下のコマンドは PowerShell から行ってください。

先ほどダウンロードした Ubuntu イメージを `Ubuntu-24.04-gui1` という名前でインポートします。

	mkdir C:\WSL-Disk\Ubuntu-24.04-gui1
    cd C:\WSL-Disk\
	wsl --import Ubuntu-24.04-gui1 Ubuntu-24.04-gui1 C:\WSL-Disk\initial-image\ubuntu-noble-wsl-amd64-ubuntu24.04lts.rootfs.tar.gz

この `Ubuntu-24.04-gui1` に 管理者でログインします。


    wsl -d Ubuntu-24.04-gui1 -u root


必要なアプリのインストール

	apt-get update && apt-get install xfce4 xfce4-goodies xrdp -y

xrdp の 接続ポートを `13389` に変更します。

	sed -i -e 's|^port=[0-9]*$|port=13389|g' /etc/xrdp/xrdp.ini

ユーザが xfce4 デスクトップに接続できる設定

	echo "startxfce4" > /etc/skel/.xsession 

リモートデスクトップで利用するためのユーザを追加します。
パスワードを聞かれるので必要に応じて入力してください。

	adduser user

ユーザが sudo できるように権限設定します。

	usermod -G sudo user

一旦、WSL から出ます。

    exit

WSL 上の Ubuntu から PowerShell に戻ってきました。

WSL にログインするデフォルトユーザを変更します。

	Function WSL-SetDefaultUser ($distro, $user) { Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq $distro | Set-ItemProperty -Name DefaultUid -Value ((wsl -d $distro -u $user -e id -u) | Out-String); };

	WSL-SetDefaultUser Ubuntu-24.04-gui1 user

今度は WSL の `Ubuntu-24.04-gui1` に 一般ユーザでログインします。

    WSL -d Ubuntu-24.04-gui1

xrdp サービスを起動します。

    sudo /etc/init.d/xrdp start

すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/2fcda2e4-7e32-a7f4-9134-61bce65e13c9.png)
と表示されます。

これで リモートデスクトップで ポート番号 `localhost:13389` で 接続できるようになりました。



リモートデスクトップ接続で 接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/f7813a13-5ec6-b21f-9362-c53646ac344b.png)

ログイン画面が 表示されたら ユーザ名・パスワードを入力して ログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/bbfc8af9-283f-a658-99fb-c1d4e3075a19.png)

ログインできたら 下記のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/c605ea9d-9d5d-8590-b1a3-e448c9304458.png)

### GUI 起動を簡単にする ショートカットの作成

WSL を簡単に起動できるためのショートカットを作成します。

WSL に 管理者でログインします。

    wsl -d Ubuntu-24.04-gui1 -u root

sudo /etc/init.d/xrdp start をパスワード無しで実行できるように設定します。

    echo "user ALL=(ALL:ALL) NOPASSWD:/etc/init.d/xrdp"> /etc/sudoers.d/90_xrdp

WSL から 抜けます。

    exit

下記の内容でバッチファイルを作成します。
ファイル名は `WSL-GUI起動.bat` などでいいでしょう。

    wsl -d Ubuntu-24.04-gui1 sudo /etc/init.d/xrdp start
    powershell.exe [System.Threading.Thread]::Sleep(3000);
    start mstsc.exe /v:localhost:13389
    wsl -d Ubuntu-24.04-gui1 tmux new -s backgroundsession

`tmux` を使うことで WSL が自動シャットダウンする事を防いでいます。 
コマンドを実行して最後に表示されるターミナルが不要な場合 「×」で閉じてください。
exit コマンドで 閉じると WSL が自動シャットダウンしてしまいます。

### 日本語環境の設定

https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/

に書かれている手順を参考に 以下のコマンドを実行します。

Ubuntu に GUI でログインします。

画面下にある `Terminal Emulator` を起動して 下記のコマンドを実行します。

日本語パッケージのインストール

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

ユーザのログイン時に 日本語入力 IME 起動できる設定

    cat << 'EOS' | tee -a ~/.profile
    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    export XMODIFIERS=@im=fcitx
    export DefaultIMModule=fcitx
    EOS
    
    mkdir ~/.config/autostart -p
    cat << 'EOS' > ~/.config/autostart/fcitx.desktop
    [Desktop Entry]
    Type=Application
    Name=Fcitx Autostart
    Exec=fcitx-autostart
    EOS

※ Ubuntu 24.04 で動きが変更になったのか？ $SHLVL 環境変数の判定処理をオリジナルから変更しています。

WSL を 一旦終了させます。

    wsl -t Ubuntu-24.04-gui1

もう一度 WSL の Ubuntu にリモートデスクトップ接続でログインします。 
すると下記のように日本語入力できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/0cab503f-357a-ba23-69ec-722f1a1e00a8.png)


### まとめ

Windows 上から Ubuntu の GUI 環境を簡単に作る手順を紹介しました。

もう一度最初から 作り直したい場合

[WSLイメージが肥大化してきたので小さいイメージからやり直す手順 - Qiita](https://qiita.com/kkato233/items/82dd2516e4dde151e67c)

https://qiita.com/kkato233/items/82dd2516e4dde151e67c

の手順を参考に 最初から 環境を構築したり

別の名前で 環境を構築することもできます。
 
### コマンドで一括設定

上記手順を PowerShell に コピー＆ペーストして環境を作る手順です。

##### PowerShell で実行

    $Distro = "Ubuntu-23.04-gui"
    $WSLDir = "C:\WSL-Disk"
    mkdir $WSLDir\initial-image
    cd $WSLDir\initial-image
    curl https://cloud-images.ubuntu.com/wsl/lunar/current/ubuntu-lunar-wsl-amd64-wsl.rootfs.tar.gz -o ubuntu-lunar-wsl-amd64-wsl.rootfs.tar.gz
    cd $WSLDir
    mkdir $WSLDir\$Distro
    cd $WSLDir
    wsl --import $Distro $Distro $WSLDir\initial-image\ubuntu-lunar-wsl-amd64-wsl.rootfs.tar.gz
    wsl -d $Distro -u root

##### WSL で実行 


    apt-get update && apt-get install xfce4 xfce4-goodies xrdp -y
    sed -i -e 's|^port=[0-9]*$|port=13389|g' /etc/xrdp/xrdp.ini
    echo "startxfce4" > /etc/skel/.xsession 
    adduser user --disabled-password --gecos ""
    echo user:'password' | /usr/sbin/chpasswd
    usermod -G sudo user
    echo "user ALL=(ALL:ALL) NOPASSWD:/etc/init.d/xrdp"> /etc/sudoers.d/90_xrdp
    exit

##### PowerShell で実行

    Function WSL-SetDefaultUser ($distro, $user) { Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq $distro | Set-ItemProperty -Name DefaultUid -Value ((wsl -d $distro -u $user -e id -u) | Out-String); };
    WSL-SetDefaultUser $Distro user
    wsl -d $Distro sudo /etc/init.d/xrdp restart && start mstsc.exe /v:localhost:13389 && wsl -d $Distro tmux new -s backgroundsession

リモートデスクトップ画面が開くので ユーザ名 user パスワード password でログインします。

##### RDP ポートのポート番号変更

RDP ポートのポート番号を 23389 に変更する場合下記の手順を行います。

PowerShell で実行


    wsl -d $Distro -u root -e sed -i -e 's|^port=[0-9]*$|port=23389|g' /etc/xrdp/xrdp.ini
    wsl -d $Distro sudo /etc/init.d/xrdp restart && start mstsc.exe /v:localhost:23389 && wsl -d $Distro tmux new -s backgroundsession

### 参考

`tmux` を利用すると自動シャットダウンしない。
https://devblogs.microsoft.com/commandline/tmux-support-arrives-for-bash-on-ubuntu-on-windows/