Ubuntu22.04でxrdp(0.9.17-2ubuntu2)の不具合に対処する

公開日時:2022-05-14 Sat. 09:14:31 JST
最終更新日時:2022-05-14 Sat. 09:14:31 JST
Ubuntu MATE 22.04 LTS
by kiyozzy

■ Ubuntu22.04のxrdp(0.9.17-2ubuntu2)の不具合について

xrdp(0.9.17-2ubuntu2)には不具合がある。
Getting error during login attempt: "error loading libvnc.so specified in xrdp.ini"
VNC を使う方法に不具合がある。 Xorg では不具合はないが、 tigervnc や vino を使う方法が使えない。
修正パッチは存在する。上記 launchpad 記載、
Request to merge avolkov-guest:build-forgotten-rfb-c into master"
の右側のドロップダウンリスト"Download as"で"Plain diff"でダウンロードできる。"5.diff"となる。
後の手順で wget で取得するのでここではダウンロード不要。

■ 対処方法

いつ修正されるのか分からないため、対処方法を書いておく。
修正パッチはあるので、修正した deb ファイルを作成し、
apt でオリジナルをインストールしておいて、修正したファイルで上書く。
修正した deb を dpkg などでインストールすると、
apt update;apt upgrade の際、オリジナルが入ってしまうからだ。

■ ソースコードから修正版をビルド

(下記手順でビルドしたファイルはこちらです。-> xrdp_0.9.17-2ubuntu2_amd64.deb)

パッチを当てて修正したxrdpをビルドする。
いろいろインストールするので、それが嫌な場合は、VirtualBoxなどで別環境で作成してもよい。
ビルド方法はこちらを参考した。 debパッケージをソースコードで落として自分でビルドして中身を見てみる
不具合のあるxrdpのバージョンは 0.9.17-2ubuntu2 。

u@h:~$ # /etc/apt/sources.list の deb-src を有効にする。
u@h:~$ sudo sed -i.pre_src -E 's/# deb-src/deb-src/g' \
 /etc/apt/sources.list
u@h:~$ sudo apt update
u@h:~$ # ビルドツールのインストール
u@h:~$ sudo apt install build-essential devscripts
u@h:~$ # 作業ディレクトリを作成
u@h:~$ mkdir bld
u@h:~$ cd bld
u@h:~/bld$ # ここに修正パッチ 5.diff を置く。
u@h:~/bld$ wget https://salsa.debian.org/\
debian-remote-team/xrdp/-/merge_requests/5.diff
u@h:~/bld$ # ソース取得
u@h:~/bld$ apt source xrdp
u@h:~/bld$ cd xrdp-0.9.17
u@h:~/bld/xrdp-0.9.17$ # パッチを当てる
u@h:~/bld/xrdp-0.9.17$ patch -p1 < ../5.diff
u@h:~/bld/xrdp-0.9.17$ # 依存パッケージのインストール
u@h:~/bld/xrdp-0.9.17$ sudo apt build-dep xrdp
u@h:~/bld/xrdp-0.9.17$ # ビルド
u@h:~/bld/xrdp-0.9.17$ debuild -uc -us -b
u@h:~/bld/xrdp-0.9.17$ # 一時ファイル削除
u@h:~/bld/xrdp-0.9.17$ fakeroot debian/rules clean
u@h:~/bld/xrdp-0.9.17$ cd ..
u@h:~/bld$ # 出来た deb ファイルを確認する。
u@h:~/bld$ ls -l xrdp_0.9.17-2ubuntu2_amd64.deb

■ 修正した xrdp でオリジナルを上書き

オリジナルを apt でインストールしておき、
修正した deb を、インストールするのではなく、修正したファイルで上書きコピーする。

$ sudo apt install xrdp
$ # バージョンを確認。 0.9.17-2ubuntu2 が不具合のバージョン。
$ dpkg -l xrdp

上書きはusr/配下だけで良い。

$ # オーナーをrootにするため修正debをsudoで解凍する。
$ sudo dpkg-deb -x xrdp_0.9.17-2ubuntu2_amd64.deb tmpdir
$ # xrdpを止める。
$ sudo systemctl stop xrdp.service
$ # usr/ のみ上書きコピーする。
$ sudo cp -a tmpdir/usr/ /
$ # xrdpを再開する。
$ sudo systemctl start xrdp.service
$ # 後始末
$ sudo rm -rf tmpdir

終わり。