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をインストール。
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/ にあり。 どうにかならないかと思ったが以下で対処。
- RDPでLXDEに接続してメニューから「設定」「LXSessionのデフォルトのアプリケーション」を選択。
- 「コアアプリケーション」を選択して「Polkitエージェント」にlxpolkitが入力されているので消去。
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)があるとのこと。 windows側ubuntu側双方の設定が必要。やはり/dev/*でなんとかならないのか。これからを期待して、ここでは設定しない。
参考サイト:
ところが、この後の次期Windowsアップデート(2021年4月21日のWindows 10 Insider Preview Build 21364(CO_RELEASE))では RDP経由みたいなことをしなくてもGUIツールが起動できるようになるらしい。 この記事ではaudioツールを動かしているので音問題も解消されそうだし、 GUI画面出すまでの面倒なことがなくなりとてもいい感じになりそう。
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>