noVNC 導入

Ubuntu 20.04.1 LTSに、VNCServerとnoVNCを導入してNGINX経由でデスクトップ環境へアクセス可能な状態にする。

XFCEインストール

$ sudo apt update
$ sudo apt install xface4 xfce4-goodies

VNC Server インストール

tigervncserverを使用

$ sudo apt install tigervnc-standalone-server

セッションを開始するユーザーでログインし、パスワードを設定

<user01>$ vncpasswd
Passwrd: xxxx
Verify: xxxx
Would you like to enter a view-only password (y/n)? n

設定ファイル作成とテストのため、VNCServerを一度起動

<user01>$ vncserver :1
<user01>$ vncserver -kill :1

設定ファイルを編集、xfce4 で起動するよう指定

<user01>$ vi ~/.vnc/xstartup
---
!/bin/bash
 PATH=/usr/bin:/usr/sbin
 unset SESSION_MANAGER
 unset DBUS_SESSION_BUS_ADDRESS
 exec startxfce4 &
---

VNCServerの自動起動設定

$ sudo vi /etc/systemd/system/vncserver@.service
---
[Unit]
 Description=Remote Desktop Service (VNC)
 After=syslog.target network.target
 [Service]
 Type=forking
 User=<user01>
 Group=<user01's group>
 WorkingDirectory=/home/<user01>
 PIDFile=/home/<user01>/.vnc/%H:%i.pid
 ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
 ExecStop=/usr/bin/vncserver -kill :%i
 [Install]
 WantedBy=multi-user.target
---

サービスの登録と起動

$ sudo systemctl daemon-reload
$ sudo systemctl enable vncserver@1.service
$ sudo systemctl start vncserver@1.service

ステータス確認

$ sudo systemctl status vncserver@1.service

VNC Client インストール

noVNCを以下からダウンロード
https://github.com/novnc/noVNC
ダウンロードしたファイルを、「/user/local/noVNC」配下に展開

nginxにnoVNCを参照するよう設定追加

$ sudo vi /etc/nginx/conf.d/novnc.conf
---
upstream vnc_proxy {
    server 127.0.0.1:6080;
}
server {
     listen       443 ssl;
     server_name  <hostname>;

     ssl_protocols TLSv1.2 TLSv1.3;
     ssl_prefer_server_ciphers on;
     ssl_certificate <fullchain.pem>;
     ssl_certificate_key <privkey.pem>;

     auth_basic "Restricted";
     auth_basic_user_file /var/www/.htpasswd;

     location /websockify {
     proxy_http_version 1.1;
          proxy_pass http://vnc_proxy/; 
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_read_timeout 61s;
          proxy_buffering off;
     }
     location / {
          index vnc.html;
          alias /usr/local/noVNC/;
          try_files $uri $uri/ /vnc.html;
     }
}
---

サービスのリロード

$ sudo systemctl reload nginx

接続確認

対象サーバーへ接続 https://<HOSTNAME>/vncwc