wsl2でubuntuのデスクトップ表示までの手順ログ

WSL2を使ってubuntuのデスクトップを表示。 デスクトップ表示はVcXsrv(Xサーバ)Windowsに入れて表示するサイトが多いが 以下の参考サイトのとおりRDP(リモートデスクトップ)でいいのではないかと私も思う。

参考サイト: WSL2+ubuntu20.04: GUI化して使う方法

インストール

1. WSL2を有効にする

管理者でPowerShellを開いて以下を実行。

PS C:\windows\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.844

イメージのバージョン: 10.0.19042.867

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
PS C:\windows\system32>
PS C:\windows\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.844

イメージのバージョン: 10.0.19042.867

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
PS C:\windows\system32>

再起動する。

参考サイト: やさしいWSL2のインストール手順とエラー

2. WSL2をアップグレード

Windows 10 用 Windows Subsystem for Linux のインストール ガイド の「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」のリンクから。

3. WSL2をデフォルトに設定

PS C:\windows\system32> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
PS C:\windows\system32>

4. ubuntuのインストール

Microsoft Storeからubuntuで検索し、「Ubuntu 20.04 LTS」をインストール。 インストール終了後、Windowsの通知がポップアップするので「起動」してみる。 最初なのでubuntuのデフォルトアカウントを作成する。

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: foobar
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)
....
~$

PowerShellで確認。

PS C:\windows\system32> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
PS C:\windows\system32>

5. Windows ターミナルをインストール

便利なんでインストールしちゃう。 Microsoft Storeからterminalで検索し、Windows Terminalをインストール。

docs.microsoft.com

6. ubuntuのdesktop環境

参考にしたサイトではapt -y install xfce4としているが できるだけ軽いものをインストールしたくて とりあえずsudo apt install lxde lxde-common lxsession-logoutとした。

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install lxde lxde-common lxsession-logout
yを入力

7. xrdpの設定

$ sudo apt-get install xrdp
yを入力
$ sudo update-rc.d -f xrdp defaults
$ cd /etc/xrdp
$ sudo wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
$ sudo mv km-e0010411.ini km-0411.ini
$ sudo chmod 644 km-0411.ini
$ sudo ln -s km-0411.ini km-e0010411.ini
$ sudo ln -s km-0411.ini km-e0200411.ini
$ sudo ln -s km-0411.ini km-e0210411.ini
$ sudo cp -ip xrdp.ini xrdp.ini_sv20210404
$ sudo vi xrdp.ini
port=3389から3390に変更
max_bpp=32から128に変更
$ sudo service xrdp restart

8. firefoxのインストール

$ sudo apt -y install firefox

9. 日本語表示・入力設定

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

日本語は「半角/全角」キーで切り替え。

10. xrdpが起動していない。

SELinux辺りのせいで自動起動がenableになっていても起動していないとの情報もあるが SELinuxになっていないのになぜなのか今のところ不明。

$ systemctl list-unit-files -t service
....
xrdp-sesman.service     enabled enabled
xrdp.service            enabled enabled
$ service xrdp status
 * xrdp-sesman is not running
 * xrdp is not running
$ 

とりあえず起動時にxrdpを起動するように/etc/profileに追加して パスワードなしで起動するよう/etc/sudoersに追加する方法で回避。

$ sudo vi /usr/local/sbin/service_start.sh
#!/bin/sh

# xrdp
retval=$(service xrdp status >/dev/null 2>&1; echo $?)
if [ ! $retval -eq "0" ]; then
    service xrdp start
fi
$ sudo chmod 755 /usr/local/sbin/service_start.sh
$ sudo vi /etc/sudoers
# 以下を追加(先頭はユーザ名)
foo   ALL=(ALL:ALL) NOPASSWD: /usr/local/sbin/service_start.sh
$ sudo vi /etc/profile
# 以下を最後に追加
sudo /usr/local/sbin/service_start.sh

参考サイト: WSL2 でデスクトップ環境(xfce4)

11. No session for pid XXXの対処

RDPで接続するとNo session for pid XXXというダイアログを表示する。 XXXのPIDはlxpolkitというプロセスで、これは https://wiki.archlinux.jp/index.php/Polkit には、

polkit は非特権プロセスが特権プロセスと通信できるようにするポリシーを定義および操作するためのアプリケーションレベルのツールキットです: 特権操作へのアクセス許可を非特権アプリケーションに与えるかの判断を集中的に行うフレームワークになります。

と記載されているもののLXDE版(man lxpolkit)。 本家は https://gitlab.freedesktop.org/polkit/polkit/ にあり。 どうにかならないかと思ったが以下で対処。

  1. RDPでLXDEに接続してメニューから「設定」「LXSessionのデフォルトのアプリケーション」を選択。
  2. 「コアアプリケーション」を選択して「Polkitエージェント」にlxpolkitが入力されているので消去。

参考サイト: https://note.com/catmanp/n/nd53ac1e47d7c

12. その他

メモリ制限

.wslconfigにメモリの制限を入れておかないとどんどん増えるらしい。

C:\User\foo> type .wslconfig
[wsl2]
memory=8G
C:\User\foo>

参考サイト: WSL2(Ubuntu18.04 LTS)をセットアップしてDocker(on Ubuntu)とGUIアプリを使う

systemdの問題

WSL2ではpid=1がsystemdでなくinitとのこと。そのため、 systemctlなどでsystemdを使用する場合は失敗してしまう。 解決策の一つとしてgenieをインストールするらしいが現状何もしない。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: ホストが落ちています

参考サイト: WSL2でSystemdを使うハック

音がならない

今のところ、tcp経由で出力してwindows側で受け取るようにする方法(PulseAudio)があるとのこと。 windowsubuntu側双方の設定が必要。やはり/dev/*でなんとかならないのか。これからを期待して、ここでは設定しない。

参考サイト:

WSL2+Ubuntu 20.04LTSでデスクトップ(xfce4)を表示する。

WSL2+Ubuntu 20.04環境から音声を出力する

ところが、この後の次期Windowsアップデート(2021年4月21日のWindows 10 Insider Preview Build 21364(CO_RELEASE))では RDP経由みたいなことをしなくてもGUIツールが起動できるようになるらしい。 この記事ではaudioツールを動かしているので音問題も解消されそうだし、 GUI画面出すまでの面倒なことがなくなりとてもいい感じになりそう。

https://forest.watch.impress.co.jp/docs/news/1320369.html

Chromeをインストール

wgetをインストールし、公開鍵の登録とリポジトリの追加後、Google Chromeのインストール。

sudo apt install wget
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo apt update
sudo apt install google-chrome-stable

終了方法

PS C:\windows\system32> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
PS C:\windows\system32> wsl --shutdown
PS C:\windows\system32> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
PS C:\windows\system32>

その他の参照