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」みたいなエラーが出る方はこちらの記事をどうぞ。
Ubuntu20.04 on WSL2でapt updateするとE: Release file for xxx is not valid yetとなる問題
続きを見る
準備は完了です。
Ubuntuへのインストール
今回Ubuntuにインストールするものは、主に下記の6つです。
- tasksel → GUIパッケージをインストールするため
- GUIパッケージ
- VNCサーバー
- dotnet-runtime → systemd-genieに必要なため
- 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
上記コマンドを実行すると下記のような画面が表示されます。
ここで下記の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
1systemd-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
3systemd-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
4Xorgのパーミッションを設定します。
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
1VNC 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
3VNC 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の起動を忘れないようにしてください。