Debian 8のGNOME3デスクトップにVNC/XRDPでリモート接続する

tigervncserverをインストールして、GNOME3デスクトップにVNC/XRDPでリモート接続します。

 

1 GNOME3とtightvncserverのエラー

GNOME3とtightvncserverでは以下の様なエラーが発生してリモート接続に失敗します。

0001_Error.png

2 前準備

vnc4serverとtightvncserverを削除します(削除せずにupdate-alternativesコマンドでtigervncserverに切り替えても良いです)。

$ sudo apt remove -y vnc4server tightvncserver

gitとdevscriptsをインストールします。

$ sudo apt install -y git devscripts

3 libfltkのインストール

Debian 8のlibfltkは若干コードが古く、tigervncviewerがコンパイルエラーとなってしまいます。

そこでUbuntu 16.04のlibfltkを移植します。

 

libfltkのビルドに必要なパッケージをインストールします。

$ sudo apt-get build-dep -y libfltk1.3
$ sudo apt install -y cmake

Ubuntu 16.04のlibfltkのソースコードをダウンロードします。

$ mkdir fltk
$ cd fltk
$ URL=http://archive.ubuntu.com/ubuntu/pool/universe/f/
$ wget ${URL}/fltk1.3/fltk1.3_1.3.3.orig.tar.gz
$ wget ${URL}/fltk1.3/fltk1.3_1.3.3-8.dsc
$ wget ${URL}/fltk1.3/fltk1.3_1.3.3-8.debian.tar.xz
$ tar zxvf fltk1.3_1.3.3.orig.tar.gz
$ cd fltk-1.3.3/
$ tar xvf ../fltk1.3_1.3.3-8.debian.tar.xz

ビルドします。

$ dpkg-buildpackage -us -uc

apt -f installで依存パッケージを解消しつつインストールします。

$ cd ..
$ sudo dpkg -i *.deb || (sudo apt -f install -y ; sudo dpkg -i *.deb)
$ cd ..

4 tigervncserverのインストール

tigervncのリポジトリにubuntu-xenial向けのdevscriptsファイルがあるので、それを流用します。

 

tigervncのリポジトリからソースコードをダウンロードします。

一応動作確認したコミットのハッシュ値でcheckoutしています。

$ mkdir tigervnc
$ cd tigervnc
$ git clone https://github.com/TigerVNC/tigervnc
$ cd tigervnc/
$ git checkout 044e2b87da7121ef6cbd59e88b101d7d8e282896 \
-b 044e2b87da7121ef6cbd59e88b101d7d8e282896

devscriptsファイルをシンボリックリンクでソースツリー直下に移動します。

$ ln -s contrib/packages/deb/ubuntu-xenial/debian

Debian 8とUbuntu 16.04でパッケージ名が異なるものを変換しています。

$ sed -i -e 's/libjpeg-turbo8/libjpeg62-turbo/g' \
    -e 's/libgnutls30/libgnutls-deb0-28/g' \
    -e 's/libgnutls-dev/libgnutls28-dev/g' debian/control

ビルドに必要なパッケージをインストールします。

$ sudo apt install -y $(grep Build-Depends: debian/control | \
    sed -e 's/Build-Depends://g' -e 's/([^\)]*)//g' -e 's/,//g')

Debian 8では不要なUbuntu 16.04用のパッチファイルを空にします。

$ rm debian/xorg-source-patches/xserver118-patch.patch
$ touch debian/xorg-source-patches/xserver118-patch.patch

ビルドします。

$ chmod a+x debian/rules
$ fakeroot debian/rules binary

apt -f installで依存パッケージを解消しつつインストールします。

$ cd ..
$ sudo dpkg -i *.deb || (sudo apt -f install -y ; sudo dpkg -i *.deb)
$ cd ..

5 VNCサーバを動かす

vncpasswdでVNC接続用のパスワードを作成します。

$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

vncserverを起動します。VNCで接続するポートは5900 + ディスプレイ番号です。

以下の例では5901となります。

$ vncserver

New 'ubuntu-16:1 (hiroom2)' desktop is ubuntu-16:1

Starting applications specified in /home/hiroom2/.vnc/xstartup
Log file is /home/hiroom2/.vnc/ubuntu-16:1.log

VNCクライアントでvnc://<server>:5901へアクセスします。

先ほど作成したVNC用のパスワードを入力すると以下の画面が得られます。

0002_VNC.png

6 XRDPサーバを動かす

XRDPをインストールして起動します。

$ sudo apt install -y xrdp # please check if vnc4server is not installed
$ sudo systemctl enable xrdp
$ sudo systemctl restart xrdp

rdesktopやWindowsリモートデスクトップで接続して、ユーザ名とパスワードを入力すると以下の画面が得られます。

0003_XRDP.png