WSL2にUbuntu Desktop環境をインストールしてみた

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

Windows 10のWSL2(Windows Subsystem for Linux)のUbuntu 20.04に、デスクトップ環境(Ubuntu Desktop)をインストールしてみました。

Windows 10の仮想環境でUbuntuのデスクトップ環境を使うというと、通常はVirtualBoxやVMWare、Hyper-V+RDP(リモートデスクトップ接続)などを使うと思いますが、フレームレートが低いため個人的にはレスポンスが悪いように感じます(設定が悪いだけかもしれません)。

対して、WSL2のUbuntu+VcXsrvでは、フレームレートが高いため、サクサク感があります。

WSL2のインストール

まだWindowsにWSL2をインストールしていない、という方は、こちらを参考にWSL2とUbuntu 20.04をインストールしてください。

Windows側でVcXsrvを設定

まず始めに、GUI環境を表示する先として、Windows側にXサーバーをインストールします。今回は、XサーバーソフトとしてVcXsrvを使用します。

VcXsrvのインストールと設定は上記の記事をご覧ください。ただし、「Display setting」の所では、「Multiple windows」ではなく「One large window」を選択してください。

理由は、「Multiple windows」のままUbuntu Desktop環境を起動すると、フルスクリーンでUbuntuの画面が表示されてしまって扱いづらいためです。

設定が終わると、ただの黒い画面が表示されます。後ほど、ここにUbuntu Desktopが表示されます。

One large windowでVcXsrvを起動すると、こんな感じの画面が出てきます

Ubuntu Desktopのインストール

Ubuntu Desktop自体は、コマンド一つでインストールできるのですが、そもそもUbuntu Desktopを動かすには、WSL2でGUIアプリが動くように設定してある必要があります。

まっさらなWSL2+Ubuntu 20.04の状態からUbuntu Desktopをインストールする場合と、既にGUIアプリが動くように設定済みの場合の、2パターンでインストール方法をまとめました。どちらか適切な方でインストールしてください。

まっさらなUbuntu 20.04にUbuntu Desktopをインストールするには

WSL2をインストール → Microsoftストアで「Ubuntu 20.04」アプリをインストール → 「Ubuntu 20.04」アプリを起動 → Unixユーザーの作成とパスワードの設定をしただけ、という所から環境を構築する人向けにBashスクリプトを用意しました。

これを任意の場所に保存して実行すれば、関連ソフトのインストールと初期設定ができます(例えば、Windows上のC:\init.shに保存したとすると、Ubuntu上でbash /mnt/c/init.shを実行すればOKです)。結構時間がかかります。

#!/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でGUIアプリが動くように設定し、Ubuntu Desktopをインストールします

# 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' >> ~/.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>
EOS
#起動確認:
# $ xeyes

#https://astherier.com/blog/2020/08/install-ubuntu-desktop-on-wsl2/
#Ubuntu Desktopのインストール
sudo apt -y install ubuntu-desktop
sudo service x11-common start
sudo service dbus start
#起動確認:
#WSLを再起動し、VcXsrvの設定を変更して
# $ sudo service x11-common start && sudo service dbus start && gnome-shell --x11 -r

echo "
一旦、WSL2を終了してください。
 例)wsl.exe -t Ubuntu-20.04
その後、もう一度WSL2 Ubuntuを起動してからGUIを起動してください。
"

これで準備完了です。次に、起動確認のためUbuntu Desktopを起動するに進んでください。

GUIアプリが動く環境にUbuntu Desktopをインストールするには

既にGUIアプリが動くように設定済みの場合は、単にUbuntu DesktopをインストールするだけでOKです。先に、こちらの記事の Ubuntu側にGUIアプリをインストール の設定を終わらせておいてください。

そうしたら、Ubuntu Desktopをインストールするため、次のコマンドを実行します。

$ sudo apt install ubuntu-desktop

依存ソフトも大量にインストールされるため、結構時間がかかります。

これで準備完了です。

Ubuntu Desktopを起動する

ubuntu-desktopをインストールした直後はうまく起動できないようなので、一旦WSL2を終了します。

まずは、上記のインストール作業を行ったコンソールを、exitか×ボタンで閉じます。

次にコマンドプロンプトを起動して、WSL2を終了するコマンドを実行します。次のコマンドは、Microsoftストアから「Ubuntu 20.04」アプリをインストールしている場合の例です。「Ubuntu」アプリをインストールしている場合は、末尾の「-20.04」を省いてください。

> wsl.exe -t Ubuntu-20.04

これでWSL2が終了できますので、もう一度「Ubuntu 20.04」アプリを起動します。では、Ubuntuのデスクトップ環境を起動してみましょう。起動するには次のコマンドを実行します。

$ sudo service x11-common start && sudo service dbus start && gnome-shell --x11 -r

&&で区切って三つのコマンドを実行していますが、前二つは関連サービスの起動で、三つ目がGUIを起動するコマンドです。

Windows側のVcXsrvにUbuntuのデスクトップ環境が表示されたら成功です。通常のUbuntuと同じように、マウス操作でいろいろ操作できます。

WSL2のUbuntu 20.04でUbuntu Desktopが動いています

冒頭で「サクサク」と書きました。マウスでウィンドウを移動したり、動画を視聴したりしても高フレームレートで表示されて、サクサク感はあります。

ただし、動画をフルスクリーンで再生したりすると、かなり負荷が大きく、Core i7 9700KのCPU使用率が50~60%くらい、GeForce RTX 2080のGPU使用率が30%くらいになります。また、(LANを経由しているわけではないと思いますが、)WSLの仮想イーサネットが4Gbpsくらい通信しています。

なので、WSL2でデスクトップ環境を動かしてパフォーマンスを求めるのはやめた方が良さそうです。

画面録画してみました(2021/06/13追記)

実際の使用感がどんな感じかは文字では伝えきれないので、画面録画をYouTubeに上げてみました。

マウス操作に対するレスポンスがよく、動画のフレームレートも高いためサクサク使えます。ただ、画面の描画が重いようで、スクロールしたり動画を再生したりするとCPU使用率がかなり上がります。

画面描画の負荷は解像度(VcXsrvの画面サイズ)によっても変わります。YouTubeに上げた動画は、フルHDディスプレイに対して半分くらいのサイズでVcXsrvを表示しています。これくらいのサイズだと動画も難なく再生できます(体感50~60fpsくらい)が、4Kディスプレイ全体で表示させたりすると、動画がカクつきます(体感20fpsくらい)。

参考サイト

この記事は、こちらのページを参考にさせていただきました。

おすすめの記事

本記事の解説の場合、日本語フォントが表示できるように設定していますが、日本語の入力はできません。日本語入力も必要な場合は、こちらをご覧ください。

また、Ubuntu側で音を鳴らしたい場合は、こちらの記事が参考になると思います。

ついでに、Ubuntu 20.04にGoogle Chromeをインストール方法もまとめています。こちらもどうぞ。

created by Rinker
SB Creative
¥2,970(2021/07/30 23:05:55時点 楽天市場調べ-詳細)
著者・三宅英明
Bashシェルスクリプトをイチから学べる本です。よく見かけるものの一見トリッキーな「ifの条件式にコマンドを書く」、「&&や||でコマンドをいくつか並べる」などの書き方も、一つ一つ細かく動きを解説していて分かりやすかったです。また、grep、sed、xargs、getoptなどの使い方や正規表現についても、詳細に説明があります。
網羅的に書かれており、辞書的に使えるおすすめの書籍です。

記事の修正履歴

WSL2の再起動が必要なことを明記 他(2020/12/27)

ubuntu-desktopのインストール後、WSL2の再起動を行っておかないと、GUI起動時にエラーが発生してしまうようです。そのため、GUI起動の前にWSL2を終了する、という説明を書き加えました。(jazzwalker様、コメント欄でのご指摘ありがとうございます)

WSL2の終了方法については、別記事に詳しくまとめています。こちらも合わせてご覧ください。

また、シェルスクリプト中のcat << EOSを、cat << 'EOS'に変更しました。(上記コードの場合、この変更をしても意味は変わらないはずですが、他の記事での記載内容に合わせました)