Ubuntu20.04 on WSL2をGUIで利用できるようにする

Ubuntu20.04 on WSL2をGUIにしてみたかったので、今回はXvncを利用してGUIで利用できるようにしていきます。

 

環境

Windows10にてwsl2を有効化し、Ubuntu20.04をインストールしています。

 

準備

下記のコマンドより、Ubuntuを更新しましょう。

 Ubuntu on WSL2
sudo apt update
sudo apt upgrade

sudo apt updateで「E: Release file for xxx is not valid yet」みたいなエラーが出る方はこちらの記事をどうぞ。

eye_catch_time_error_for_ubuntu_on_wsl2
Ubuntu20.04 on WSL2でapt updateするとE: Release file for xxx is not valid yetとなる問題

続きを見る

準備は完了です。

 

Ubuntuへのインストール

今回Ubuntuにインストールするものは、主に下記の6つです。

  1. tasksel → GUIパッケージをインストールするため
  2. GUIパッケージ
  3. VNCサーバー
  4. dotnet-runtime → systemd-genieに必要なため
  5. systemd-genie

それではインストールしていきましょう。

 

1.taskselのインストール

taskselとは、デスクトップ環境作るために必要なパッケージをかんたんにインストールすることができるツールです。

Ubuntuサーバーではデフォルトでインストールされていますが、それ以外のUbuntuにはインストールされていません。

下記コマンドを実行して、インストールします。

 Ubuntu on WSL2
sudo apt install tasksel

 

2.GUIパッケージのインストール

1で追加したtaskselを利用して、GUIパッケージをインストールします。

今回はUbuntu Desktopをインストールします。

他のデスクトップがいい人は好きなものを選択してください。

 Ubuntu on WSL2
sudo tasksel

 

上記コマンドを実行すると下記のような画面が表示されます。

select-ubuntu-desktop-on-tasksel

ここで下記の4つにチェックを入れて、「OK」に移動しエンターを押下します。

  • Ubuntu Cloud Image(Intance)
  • Ubuntu Desktop
  • Open SSH
  • Basic Ubuntu Server

チェックは、スペースキーで操作できます。

「OK」への移動はタブキーで移動可能です。

 

インストールが完了するまで待ちましょう。

 

3.VNCサーバーのインストール

VNCとは、パソコンを遠隔操作するときに利用するソフトです。

今回のケースだとUbuntuにVNCサーバー、WindowsにVNCクライアントをインストールすることで、WindowsからUbuntuをGUI操作できるようになります。

インストールは、コマンドを一行打つだけです。

 Ubuntu on WSL2
sudo apt install tigervnc-standalone-server

簡単ですね。

 

4.dotnet-runtime

dotnet-runtimeは次にインストールするsystemd-genieにて必要となるソフトです。

systemd-genieをインストールしても自動でインストールしてくれないので、事前にインストールします。

下記コマンドでインストールできます。

 Ubuntu on WSL2
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install dotnet-runtime-3.1

バージョンが気になる方はこちらでどうぞ。

 

5.systemd-genie

sytemd-genieは、systemdを利用できるようにしてくれます。

GDMやLightDMなどを実行するために必要なものです。詳しくはこちら

では3つのステップでインストールしましょう。

step
1
systemd-genieリポジトリをaptリポジトリのリストに追加するファイルを作成する。

 Ubuntu on WSL2
sudo nano /etc/apt/sources.list.d/wsl-translinux.list

 

step
2
ファイル内に下記を貼り付けて保存する。

 command
deb [trusted=yes] https://wsl-translinux.arkane-systems.net/apt/ /

 

step
3
systemd-genieをインストールする。

 Ubuntu on WSL2
sudo apt update
sudo apt install systemd-genie

systemd-genieはインストール完了です。

 

これで、Ubuntuに必要なものはすべてインストールしました!

 

Ubuntuの環境設定

VNCサーバーのパスワードを設定

Ubuntu内の全てのユーザーに対して、VNC接続する際に必要となるパスワードを設定できます。

まずは今あなたがログインしているユーザーのパスワードを設定します。

 Ubuntu on WSL2
vncpasswd

 

次にルートユーザーのパスワードを設定します。

 Ubuntu on WSL2
sudo vncpasswd

 

最後に、gdmのユーザーが作成されているのでgdmユーザーのパスワードを設定します。

 Ubuntu on WSL2
sudo -u gdm vncpasswd

※他のユーザーのvncパスワードを設定したい場合は、gdmの部分を任意のユーザー名に変更して、コマンドを入力すると設定できます。

ディスプレイマネージャーのデフォルト設定をXからXvncへ変更

step
1
念の為、Xorgファイルのバックアップを取ります。

 Ubuntu on WSL2
sudo mv /usr/bin/Xorg /usr/bin/Xorg_old

 

step
2
新しくXorgファイルを作成します。

 Ubuntu on WSL2
sudo nano /usr/bin/Xorg

 

step
3
下記を貼り付けて、保存します。

 Ubuntu on WSL2
#!/bin/bash for arg do shift case $arg in # Xvncはvtxxをサポートしてないので、ttyxxに変更 vt*) set -- "$@" "${arg//vt/tty}" ;; # Xvncは-keepttyをサポートしてない -keeptty) ;; # Xvncは-novtswitchをサポートしてない -novtswitch) ;; # 他の引数はそのまま *) set -- "$@" "$arg" ;; esac done
# 解像度は任意の数値に変更 command=("/usr/bin/Xvnc" "-geometry" "1920x1080" "-PasswordFile" "${HOME:-/root}/.vnc/passwd" "$@")
systemd-cat -t /usr/bin/Xorg echo "Starting Xvnc:" "${command[@]}"
exec "${command[@]}"

※解像度はあなたのPCの設定に合わせて設定してください。
(Windowsのホーム画面右クリック>ディスプレイの設定からあなたのPCの解像度を確認できます。)

 

step
4
Xorgのパーミッションを設定します。

 command
sudo chmod 0755 /usr/bin/Xorg

 

Ubuntu環境の設定も完了です。

systemd-genieを起動

systemd-genieを起動して、VNC接続の準備を完了させましょう。

 Ubuntu on WSL2
genie -i

これでXvncのインスタンスが作成されました。

SSDだと30秒くらい待つと5900番ポートでリスニング状態になります。(HDDだと2、3分かかるかもしれません)

下記コマンドで確認してみましょう。

 Ubuntu on WSL2
hikari@xps15:~$ ss -lt4
State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
LISTEN  0       5       0.0.0.0:5900        0.0.0.0:*

上記のように表示されていれば、OKです。

 

VNCクライアントからアクセス

お好きなVNCクライアントをWindowsにインストールしてください。

今回は、VNC Viewerを使います。

step
1
VNC Viewerを起動し、<IPアドレス>:5900へ接続します。

IPアドレスは、下記コマンドで確認できます。

 command
hikari@xps15:~$ ip a
#一部抜粋
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:54:6d:83 brd ff:ff:ff:ff:ff:ff
inet 172.30.49.213/20 brd 172.30.63.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe54:6d83/64 scope link
valid_lft forever preferred_lft forever

<eth0のインターフェースのIPアドレス>:5900で接続可能だと思います。

私の例だと、「172.30.49.213:5900」ですね。

 

※警告画面が出た場合は、「Continue」を選択してください。

 

step
2
先程設定したgdmユーザーのvncパスワードを入力、ユーザーログインします。

まずは、「sudo -u gdm vncpasswd」のコマンドで設定したパスワードです。

2番目のパスワードは、該当ユーザーのvncパスワードです。

パスワードを入力すると、空白の画面が表示されると思いますが、正常なので安心してください。

5900番ポートへのアクセスが完了すると、ユーザーデスクトップ用のXvncインスタンスが作成され、5901番ポートがリスニングされます。

 

step
3
VNC Viewerより、新たに<IPアドレス>:5901に接続します。

先程の手順で、5901番ポートにアクセスし、ログインします。

これでUbuntu on WSL2がGUIで利用可能になりました。

 

次回からは、Ubuntu上でsystemd-genieを起動(genie -i)するだけで、VNC接続が可能になります。

 

トラブルシューティング

1.journalctlのログを確認

下記コマンドで確認できます。

 command
journalctl -t /usr/lib/gdm3/gdm-x-session -t /usr/bin/Xorg

 

2.vncパスワードの再設定

パスワードを設定していなかったり、パスワードが間違っている可能性があるので、「VNCサーバーのパスワードを設定」をもう一度実施してみてください。

 

3.WSL2の再起動

Ubuntu on WSL2は、Ubuntu上からシャットダウンなどの操作ができません。

Windowsのコマンドプロンプト上からシャットダウンが可能です。

 command Prompt
C:\Users\hikari>wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-20.04 (既定)
C:\Users\hikari>wsl -t Ubuntu-20.04

Ubuntu on WSL2起動後、systemd-genieの起動を忘れないようにしてください。

 

 

-IT, サーバー, 備忘録