はじめに
WSL2にUbuntuを導入して、Dockerやsystemd、Xserverが動く環境を作ります。3部構成でやります。
背景や環境などについては、その1(WSL2にUbuntu-20.04をインストールする)、その2(GenieやDockerを導入する)、も参照ください。
ゴール
- WSL2にUbuntu-20.04をインストールする。
- systemdが動くようにする(Genieの導入)。
- Dockerを使えるようにする。
- リモートデスクトップで接続できるようにする(xrdpの導入)。<-本章はココ
上から順にやっていくと何となくWSLが使えるようになることを目指していますが、うまくいかない環境がある点についてもご了承ください。
前置き
systemdが使えるようになったら、意味など関係なくGUIを有効にしてみたくなるのが人情というものです。お仕事環境でも使えるようにVNCのインストール不可という縛りも付けたいので、xrdpも導入してWindowsのリモートデスクトップ接続で利用できるようにします。
導入
xrdpをインストール
リモートデスクトップ接続で利用するためには、xrdpをインストールしてRDPを有効にする必要があります。デフォルトの接続ポートは3389ですが、ホストマシンのWindowsのリモートデスクトップと競合してしまうので、3390に変更します。また、色深さ設定をクライアント依存に変更します。
fjij@STELLA:~$ sudo apt -y install xrdp
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
- 省略 -
libc-bin (2.31-0ubuntu9.7) のトリガを処理しています ...
dbus (1.12.16-2ubuntu2.1) のトリガを処理しています ...
systemd (245.4-4ubuntu3.15) のトリガを処理しています ...
sgml-base (1.29.1) のトリガを処理しています ...
fjij@STELLA:~$ sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
fjij@STELLA:~$ sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
fjij@STELLA:~$ sudo sed -i 's/max_bpp=32/#max_bpp=32/g' /etc/xrdp/xrdp.ini # color depthを制限なしに設定
fjij@STELLA:~$ sudo sed -i 's/^xserverbpp=24/#xserverbpp=24/g' /etc/xrdp/xrdp.ini # Xserverのcolor depthをクライアントに合わせる
fjij@STELLA:~$ sudo systemctl start xrdp
fjij@STELLA:~$ sudo systemctl enable xrdp
Synchronizing state of xrdp.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable xrdp
fjij@STELLA:~$
desktopのインストール
desktop周りをインストールします。今回はxfce4なので、xubuntu-desktopです。
fjij@STELLA:~$ sudo apt -y install xubuntu-desktop
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
- 省略 -
途中で、lightdmの設定を行います。gdm3
を選択してください。
また、途中で Initializing mlocate database; this may take some time... のメッセージを表示したままフリーズしたと勘違いするくらい止まることがありますが、お湯を沸かしてコーヒーを飲むくらい、じっくりと待ってください。
- 省略 -
fonts-knda (2:1.2) を設定しています ...
fonts-tlwg-loma (1:0.7.1-3) を設定しています ...
mlocate (0.26-3ubuntu3) を設定しています ...
update-alternatives: /usr/bin/locate (locate) を提供するために自動モードで /usr/bin/mlocate を使います
グループ `mlocate' (GID 134) を追加しています...
完了。
Initializing mlocate database; this may take some time...
- 省略 -
engrampa (1.24.0-2) を設定しています ...
fontconfig (2.13.1-2ubuntu3) のトリガを処理しています ...
unity-gtk3-module:amd64 (0.0.0+18.04.20171202-0ubuntu2) を設定しています ...
desktop-file-utils (0.24-1ubuntu3) のトリガを処理しています ...
unity-greeter (18.04.0+20.04.20200312-0ubuntu2) を設定しています ...
initramfs-tools (0.136ubuntu6.7) のトリガを処理しています ...
fjij@STELLA:~$
心配な場合は、別のターミナルを開いて top
コマンドを打つと updatedb.mlocat
プロセスが頑張っているのがわかります。
xsessionまわりの設定
xfce4のセッションが起動するように設定を行います。
fjij@STELLA:~$ echo xfce4-session > ~/.xsession
fjij@STELLA:~$ tee ~/.xsessionrc << _EOF_ > /dev/null
> echo export XDG_SESSION_DESKTOP=xubuntu
> export XDG_DATA_DIRS=/usr/share/xfce4:/usr/share/xubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop:/usr/share
> export XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/etc/xdg:/etc/xdg
> _EOF_
fjij@STELLA:~$
カラーマネジメントの設定
リモートデスクトップで接続すると、認証を求めるダイアログが表示されてしまいます。固定の設定を追加すと回避することができます。
fjij@STELLA:~$ sudo tee /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << _EOF_ > /dev/null
> [Allow Colord all Users]
> Identity=unix-user:*
> Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ltAny=> ResultAny=no
> ResultInactive=no
ResultA> ResultActive=yes
> _EOF_
fjij@STELLA:~$
genieの設定追加
GUIを使うことが決まったので、いらない警告メッセージを無効化します。genie起動時の genie: WARNING: systemd default target is default.target;~というメッセージが表示されなくなります。
fjij@STELLA:~$ sudo sed -i 's/target-warning=true/target-warning=false/g' /etc/genie.ini
fjij@STELLA:~$
WSLの設定変更
現在はデフォルトでWSLgがインストールされています。これはWSLのウインドウアプリケーションを、リモートデスクトップの仕組みを使って、Windowsのウインドウアプリケーションのように表示する機能ですが、当然のごとくxrdpと競合するため無効化が必要です。
また、WSLにlocalhostでアクセスできるようにもしておきます。
%USERPROFILE%\.wslconfig
ファイルに設定を追加します。
[wsl2]
localhostForwarding=True
guiApplications=False
設定が終わったら、Powershellを開いてwsl --shutdown
コマンドを実行して、一度WSLを再起動します。
GUIにログイン
リモートデスクトップ接続を開き、localhost:3390
に接続します。
セッションへのログイン画面が表示されるので、WSLの初期設定で設定したユーザー名とパスワードを入力します。
Desktopが表示されれば成功です。
正直なところ、GUIが使えるようにする嬉しさは自己満足でしかありません。
実際にシェルスクリプトを書く際は、VSCodeにRemote WSL拡張機能を入れて使っていますし、Postman使うより、curl + jqを使ってRESTAPIを叩きます。
でも、やっぱり使えるようにしておきたいのです。今後は、そんな夢と現実みたいなところも書いていけたら良いなと思います。
Tips
ubuntu-desktopを使う場合
今回はxfce4をデスクトップに選びましたが、通常のubuntu-desktopを使用することもできます。
実は、インストール自体はxfe4を使うよりも簡単です。
desktop周りをインストールで、ubuntu-desktop
を指定します。
lightdm設定も、xsessionまわりの設定も要らないのでスキップしてください。
fjij@STELLA:~$ sudo apt -y install ubuntu-desktop
ただ、私の環境では図のように、画面の乱れが発生します。また、ソフトウエアアップデートなどの認証を必要とする画面を表示しようとすると Oh no! Something has gone wrong. で落ちてしまう現象が発生してしまったので、今回はxfce4を利用することにしました。
他のマシンでは同じ手順でも発生しないので、環境依存なんでしょうか・・・。
Ubuntuを初期状態に戻したいとき
いろいろWSL環境で試行錯誤していると、初期状態に戻したくなることがあります。アプリケーションの設定などから設定することもできますが、もっと簡単にPowershellでアンインストールできます。
PS C:\Users\fjij> wsl --unregister Ubuntu-20.04
再度、Ubuntuのインストールから実施してください。