WSL 上に Ubuntu 24.04 を インストールしてリモートデスクトップ接続できるようにします。
前提条件
WSL が version 2 としてインストールされている必要があります。
WSL を まだ インストールしていない人は、他のサイトでインストール・初期設定してください。
Ubuntu 24.04 イメージを直接 Ubuntu の サイトから ダウンロードして 環境構築します。
この手順では C:\WSL-Disk
に WSL 用の環境を作ります。
インストールイメージのダウンロード
から noble
をクリックして その中にある current
の中から ubuntu-noble-wsl-amd64-wsl.rootfs.tar.gz
を選んで ダウンロードして
C:¥WSL-Disk\initial-image
ディレクトリに保存します。
コマンドで行う場合
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
これで リモートデスクトップで ポート番号 localhost:13389
で 接続できるようになりました。
リモートデスクトップ接続で 接続します。
ログイン画面が 表示されたら ユーザ名・パスワードを入力して ログインします。
ログインできたら 下記のような画面が表示されます。
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 が自動シャットダウンしてしまいます。
日本語環境の設定
に書かれている手順を参考に 以下のコマンドを実行します。
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 にリモートデスクトップ接続でログインします。
すると下記のように日本語入力できるようになりました。
まとめ
Windows 上から Ubuntu の GUI 環境を簡単に作る手順を紹介しました。
もう一度最初から 作り直したい場合
WSLイメージが肥大化してきたので小さいイメージからやり直す手順 - Qiita
の手順を参考に 最初から 環境を構築したり
別の名前で 環境を構築することもできます。
コマンドで一括設定
上記手順を 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/