はじめに
以前「WSL2のUbuntuにリモートデスクトップ接続する。(その2:xrdpインストール)」でWSL2
+Ubuntu 20.04
+genie
+xrdp
の組み合わせでWindows
からRDP
接続するやり方を紹介しましたが、WSL2
+Ubuntu 22.04.3
(ネイティブSystemd)+xrdp
の組み合わせでやってみたところ、いくつか前回の手順から変更しないとできなかったので、若干タイトルを変更して改めてまとめてみようと思います。
以下はWSL2
+Ubuntu 20.04
+genie
+xrdp
で紹介した以前の記事。
環境
以下環境のマシンにインストールします。
リソース | スペック |
---|---|
CPU | AMD Ryzen 7 3700U 2.30 GHz |
メモリ | 16.0 GB |
OSは前回から変更となっています。
アプリケーション | バージョン |
---|---|
Windows 11 Pro | 23H2 |
Ubuntu | 22.04.3 LTS |
genieとネイティブSystemdの違い
以前の記事でも少し紹介しましたが、genie
はボトルという疑似コンテナのような環境を構成することでSystemd
をPID 1
で動作できるようにした仕組みです。
WSL
は今までSystemd
をネイティブで実行することができなかったためgenie
等を挟んで実行する必要がありましたが、WSL
自体でSystemd
を実行できるようになったことから通常のLinux
と同等に使うことができるようになったのが一番の違いかと思います。
Ubuntuデスクトップ環境のインストール
Ubuntu 22.04.3
を起動して、Ubuntu Desktop
をインストールしますがacpid
とacpi-support
の更新を抑止しないとubuntu-desktop
インストール時に「Transport endpoint is not connected」のようなエラーが出続けてインストールできない状態となるため、抑止してインストールします。
sudo apt update
sudo apt upgrade
sudo apt-mark hold acpid acpi-support
sudo apt install ubuntu-desktop
xrdpのインストール
xrdp
は普通にインストールします。
sudo apt install xrdp
xrdpインストール後のセットアップ
Ubuntu Desktop
でxrdp
を使用する場合、いくつか修正する必要があるため、ファイルの修正と必要ファイルの作成を行っていきます。
- クリップボード用ドライブの名前の変更
sudo sed -i -e '/FuseMountName/s/thinclient_drives/shared-drives/g' /etc/xrdp/sesman.ini
ログイン確認してみた限り、今回はXwrapper.config
を修正しなくても良さそうではありますが、一応変更しておきます。
- 一般ユーザでのX起動を許可
sudo sed -i -e '/allowed_users/s/console/anybody/g' /etc/X11/Xwrapper.config
メッセージ抑止は前回と同様設定を行っておきます。
- PolKit関連メッセージの抑止
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
ResultAny=no
ResultInactive=no
ResultActive=yes
_EOF_
- リポジトリ更新のポップアップメッセージの抑止
sudo tee /etc/polkit-1/localauthority/50-local.d/46-allow-update-repo.pkla << _EOF_ > /dev/null
[Allow Package Management all Users]
Identity=unix-user:*
Action=org.freedesktop.packagekit.system-sources-refresh
ResultAny=yes
ResultInactive=yes
ResultActive=yes
_EOF_
前回作成していたstartubuntu.sh
は、今回はうまく行かなかったので、後述の.xsessionrc
で実行するように変更しています。
xrdp待ち受けポート番号の変更
WSL2
で起動している仮想マシンでは、WSL2
を動かしているWindows
ホストと仮想マシン間のみでやり取りするための個別のネットワーク(以下図の内部ネットワーク)を持っているため、ip a
等のコマンドで確認できるアドレスに対してWindows
ホスト`からリモートデスクトップ接続を行えば接続できますが、このアドレスはPCを再起動すると変更されてしまいます。
またWSL2
では、ホスト側となるWindows
で、WSL2
の仮想マシンで待ち受けているポートに対してポートフォワードする機能があり、デフォルトではWSL2
に転送するようになっているため、ホスト側のWindows
でlocalhost
を指定してリモートデスクトップアクセスすると、WSL2
で動作しているxrdp
にアクセスするような動作となります。
今回の環境はWindows 11 Pro
の環境となり、Windows
ホスト側でもリモートデスクトップサービスを動作させていることから、使用ポートが被ってしまうため、xrdp
の待ち受けポートを変更するようにします。
変更するポート番号はRDP
が動作する3389
以外なら何でもいいですが、ウェルノウンポート以外のポートにするのが望ましいので、今回は3389
に10000
を加えた13389
にします。
sudo sed -i -e '/^port/s/3389/13389/g' /etc/xrdp/xrdp.ini
Dock環境表示の設定
Ubuntu
をUbuntu Desktop
環境で使うと、画面左にDock
と呼ばれるアプリケーション起動用のバーが表示されますが、xrdp
ではそのままでは表示されません。
今回は各ユーザのホームディレクトリに.xsessionrc
を作成して、Dock
表示用の設定を行うことでDock
が表示できるようなので、作成します。
今回は後述する事情で新たにリモートデスクトップ接続用のユーザを作成するので、ユーザ作成時に.xsessionrc
ファイルが展開されるようスケルトンディレクトリにファイルを作成しておきます。
sudo tee /etc/skel/.xsessionrc << _EOF_ > /dev/null
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
_EOF_
Ubuntuの日本語化
WSL2
のUbuntu
は日本語化されていないため、日本語化しておきます。
sudo apt -y install language-pack-gnome-ja-base
sudo apt -y install language-pack-ja
sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
sudo localectl set-x11-keymap jp
入力ソースの追加は、各ユーザで実行するため、後ほどリモートデスクトップで接続後に以下実行します。
gsettings set org.gnome.desktop.input-sources sources "[('ibus', 'mozc-jp'), ('xkb', 'jp')]"
不足している日本語パッケージのインストール
Ubuntu Desktop
の画面から「設定」→「地域と言語」→「インストールされている言語の管理」をクリックした際に、足りないと言われるパッケージを予めインストールしておきます。
sudo apt -y install task-japanese-gnome-desktop
sudo apt -y install language-pack-gnome-ja
sudo apt -y install gnome-user-docs-ja
sudo apt -y install libreoffice-l10n-ja
sudo apt -y install firefox-locale-ja
sudo apt -y install mozc-utils-gui
sudo apt -y install thunderbird-locale-ja
sudo apt -y install fonts-noto-cjk-extra
sudo apt -y install libreoffice-help-ja
xrdpの再起動
この時点でxrdp
が起動しているので、再起動して設定を反映させます。
sudo systemctl restart xrdp
デフォルトユーザでログインできないことの回避策
前回WSL2
にxrdp
をインストールした際にはデフォルトのユーザでログインできたはずですが、今回はデフォルトユーザでログインしようとすると、画面が落ちてしまいログインできませんでした。
色々と調査したもののどうしてもデフォルトユーザではログインできなかったため、他の回避策を紹介します。
リモートデスクトップ接続用ユーザの作成
コマンドで一般ユーザを作成すれば、作成した一般ユーザにはログインできるので、コマンドで一般ユーザを作成します。
sudo adduser rdpuser
パスワード等を設定すればOKです。
Adding user `rdpuser' ...
Adding new group `rdpuser' (1001) ...
Adding new user `rdpuser' (1001) with group `rdpuser' ...
Creating home directory `/home/rdpuser' ...
Copying files from `/etc/skel' ...
New password: [任意のパスワードを入力]
Retype new password: [任意のパスワードを入力]
passwd: password updated successfully
Changing the user information for rdsuser
Enter the new value, or press ENTER for the default
Full Name []: [そのままEnterでOK]
Room Number []: [そのままEnterでOK]
Work Phone []: [そのままEnterでOK]
Home Phone []: [そのままEnterでOK]
Other []: [そのままEnterでOK]
Is the information correct? [Y/n] y
rootユーザのパスワードを設定する。(非推奨)
こちらの方法はroot権限でログインすることになるため、あまり推奨できませんが、もう一つの方法としてはデフォルトで設定されていないroot
ユーザのパスワードを設定してリモートデスクトップ接続でログインできるようにする方法です。
passwd
コマンドで設定しましょう。
sudo passwd
WSL2のUbuntuへのリモートデスクトップアクセス
先ほど記載した通り、WSL2
のUbuntu
に割り当てられているIPアドレスは再起動ごとに変わってしまうため、localhost
を指定してUbuntu
にポートフォワーディングさせます。
Windows
ホスト側の「リモートデスクトップ接続」を起動し、localhost
でポート転送して接続します。
また、先ほどxrdp
側のポート番号を変更しているため、後ろに13389
を加えてアクセスします。
ユーザ名、パスワードを入力後、以下の様な画面が表示されれば完了です。
おわりに
今回はWSL2
で正式サポートされた、ネイティブなSystemd
でxrdp
接続を行ってみましたが、Ubuntu
バージョンの違いなのか、ネイティブSystemdになったことの影響なのか、やっていることは前回と同じでも手順が思った以上に変わりました。
今回、Windows
がWindows 10 Home
からWindows 11 Pro
になったことで、Home
でできなかったブリッジ接続ができるようになったので、次回はUbuntu
にブリッジ接続して、外部のクライアントから直接接続できるようにしてみたいと思います。