Ubuntu 18.04 の GNOME に XRDP 接続してみたかった

最近 Ubuntu 18.04 をイジっている。一般には不人気らしいけど、デフォルトの GNOME デスクトップは個人的には気に入っている。

自分が構築した Ubuntu 環境は以下の3種類がある。

  1. ThinkPad X250 にクリーンインストールした Ubuntu 18.04 日本語 Remix
    • 最もピュアな Ubuntu 環境として他の環境を構築する際に参考にしている
    • コイツに XRDP 接続することはなく、Chrome Remote Desktop で事足りている
  2. Windows Subsystem for Linux (WSL) の Ubuntu 18.04
    • GNOME 環境を構築し、VcXsrv で接続することで、「日本語 Remix」と遜色ない使い心地を実現できている
    • コイツに対して、VcXsrv ではなく、Windows 標準の「リモートデスクトップ」で接続できたら良いなーと思い、XRDP 接続を試みようとしている
  3. Oracle Cloud Infrastructure の Always Free な Compute Instance に立てた Ubuntu 18.04
    • Always Free (VM.Standard.E2.1.Micro シェイプ) な VM に Public IP を割り当てて作成した
    • Canonical-Ubuntu-18.04-2020.02.18-0 イメージを使用しており、WSL Ubuntu と同様のパッケージをインストールして GNOME 環境の準備はした
    • 主にクラウド VM に対して「リモートデスクトップ」で接続できる Ubuntu 環境が構築できたら便利かなーと思い、コイツを本命に XRDP 接続を試みようとしている
    • ちなみに、以前 Oracle Linux 7 + Xfce でリモートデスクトップ接続可能な OCI VM を作ったことはあるが、パッケージが少なくて使っていない
      OCI Always Free Instance に Xfce をインストールして GUI 化する

というワケで、「リモートデスクトップ」からサクッと接続できる Ubuntu デスクトップがあったら便利かなーという軽いノリで XRDP を入れてみたが、うまく行かず…。今回はその記録を載せておく。

目次

WSL Ubuntu に XRDP 接続したかった

対象の Windows 環境は以下のとおり。Windows10 Pro 使用、WSL2 基盤の Ubuntu 18.04 を使用。

@Rem コマンドプロンプトでバージョンが確認できる
>ver
Microsoft Windows [Version 10.0.19569.1000]

VcXsrv を使った GNOME デスクトップ環境、および日本語入力環境は構築済なので、次のように XRDP をインストールしセットアップしてみた。

sudo apt install xrdp

# port=3389 と書いてあるので 3390 にする
# カーソルの背景に黒い枠ができるのを防ぐため new_cursors を false にする
# sudo vi /etc/xrdp/xrdp.ini
sudo sed -i 's/port=3389/port=3390/g'                /etc/xrdp/xrdp.ini
sudo sed -i 's/new_cursors=true/new_cursors=false/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/max_bpp=128/g'             /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/xserverbpp=128/g'       /etc/xrdp/xrdp.ini

sudo service xrdp restart

cat <<EOL > ~/.xsessionrc
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOL

「リモートデスクトップ」にて、localhost:3390 で接続すると、XRDP のログイン画面までは表示される。しかしその後のログインがうまく行かない。

connecting to sesman ip 127.0.0.1 port 3350
sesman connect ok
sending login info to session manager, please wait...
login successful for display 10
VNC started connecting
VNC connecting to 127.0.0.1 5910
VNC error - problem connecting
some problem

ってな感じで思ったような動きにならず、コレ以上知識もなくて断念。

OCI の Ubuntu VM に XRDP 接続したかった

OCI の Ubuntu 18.04 イメージを使って Always Free VM を構築した。Out of capacity のエラーメッセージが若干変わってた。

Out of capacity for shape VM.Standard.E2.1.Micro in availability domain JAPC:AP-TOKYO-1-AD-1. Please try a different shape, availability domain, or fault domain. Or wait a few minutes and try again.

1日置いたら VM が作れるようになっていた。

Ubuntu VM には opc ユーザではなく ubuntu ユーザで SSH 接続する。SSH 接続したら、WSL の GNOME 環境を構築したときと同様に、各種日本語パッケージを入れたりしていった。

その後、次のように XRDP 接続の準備を進めていった。

sudo apt install -y xrdp
sudo sed -i 's/new_cursors=true/new_cursors=false/g' /etc/xrdp/xrdp.ini
sudo systemctl restart xrdp

# PolicyKit 設定
cat <<EOL | sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla
[Netowrkmanager]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device
ResultAny=no
ResultInactive=no
ResultActive=yes
EOL
sudo systemctl restart polkit

# XRDP 接続用ユーザを作る (opc や ubuntu ユーザとは別に)
sudo adduser neo  # パスワードを設定する
sudo gpasswd -a neo root
sudo gpasswd -a neo sudo
sudo gpasswd -a neo admin
sudo gpasswd -a neo lpadmin

sudo su - neo
cat <<EOL > ~/.xsessionrc
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOL

# ファイアウォールが「状態: 非アクティブ」であることを確認する
sudo ufw status

# XRDP を再起動する
sudo systemctl restart xrdp
sudo systemctl enable xrdp.service
sudo systemctl enable xrdp-sesman.service

systemctl list-unit-files -t service | grep xrdp
xrdp-sesman.service                            enabled
xrdp.service                                   enabled

# パスワードを使用して SSH 接続できるようにする
sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo /etc/init.d/ssh restart

こんな風に設定した。

VCN の Security List は、3389 や 3390 ポートなどへの接続を許可しておいた。しかし、「リモートデスクトップ接続」で 【Public IP】:3389 と入力しても接続できず 0x204 エラーになってしまった。どうもリモートデスクトップ接続のリクエストが VM にまで到達していないように見受けられる。

他に、VNC 接続を試してみたが、コチラも理解が及ばず、見様見真似では何もできなかった。

sudo apt install -y tigervnc-standalone-server tightvncserver

# パスワードを決める・質問は n で回答する
vncserver :1

# 終了する
vncserver -kill :1

echo "exec gnome-session &" | tee ~/.vnc/xstartup
vncserver -localhost no

こんな風にすると 5901 ポートで VNC 接続ができるらしいが、何か CPU 使用率が爆上がりして全く動かなくなったりと不調が多く、断念した。

X Window System 周りの知識なさすぎる…

LPIC Level 1 の勉強してるときも思ってたけど、Linux の GUI 環境構築周りの知識がなさすぎて辛い。何が悪いのか、どこを調べたらどう解決できるのか、全然分からん。

今回はもうやる気も削がれたので断念することにする。サクッとやれるやり方誰か教えてくんろー。

参考文献