###介绍
VNC 或“虚拟网络计算”是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进行交互。 对于尚不熟悉命令行的用户,它可以更轻松地管理远程服务器上的文件、软件和设置。
在本指南中,我们将在 Ubuntu 16.04 服务器上设置 VNC,并通过 SSH 隧道安全地连接到它。 我们将使用的 VNC 服务器是 TightVNC,一个快速轻量级的远程控制包。 此选择将确保我们的 VNC 连接即使在较慢的 Internet 连接上也能流畅稳定。
- 先决条件
要完成本教程,您需要:
- 通过 Ubuntu 16.04 初始服务器设置教程 设置的 Ubuntu 16.04 Droplet,其中包括拥有 sudo 非 root 用户。 请注意,本教程可以使用任何大小的 Droplet 完成,但是建立在较小 Droplet 上的 VNC 可能比较大的 Droplet 对功能有更多限制。
- 安装了 VNC 客户端的本地计算机,支持通过 SSH 隧道进行 VNC 连接。 如果您使用的是 Windows,则可以使用 TightVNC、RealVNC 或 UltraVNC。 Mac OS X 用户可以使用内置的屏幕共享程序,也可以使用 RealVNC 等跨平台应用程序。 Linux 用户可以从许多选项中进行选择:
vinagre
、krdc
、RealVNC、TightVNC 等等。
- Step 1 — 安装桌面环境和 VNC 服务器
默认情况下,Ubuntu 16.04 Droplet 没有安装图形桌面环境或 VNC 服务器,因此我们将从安装它们开始。 具体来说,我们将为最新的 Xfce 桌面环境和官方 Ubuntu 存储库中可用的 TightVNC 包安装包。
在您的服务器上,安装 Xfce 和 TightVNC 软件包。
sudo apt-get update sudo apt install xfce4 xfce4-goodies tightvncserver
要在安装后完成 VNC 服务器的初始配置,请使用 vncserver
命令设置安全密码。
vncserver
系统将提示您输入并验证密码以及仅供查看的密码。 使用仅查看密码登录的用户将无法使用鼠标或键盘控制 VNC 实例。 如果您想向使用您的 VNC 服务器的其他人演示某些内容,这是一个有用的选项,但不是必需的。
运行 vncserver
通过创建默认配置文件和连接信息供我们的服务器使用来完成 VNC 的安装。 安装这些软件包后,您现在可以配置您的 VNC 服务器了。
- Step 2 — 配置 VNC 服务器
首先,我们需要告诉我们的 VNC 服务器在启动时要执行哪些命令。 这些命令位于主目录下 .vnc
文件夹中名为 xstartup
的配置文件中。 启动脚本是在上一步运行vncserver
时创建的,但是我们需要修改Xfce桌面的一些命令。
首次设置 VNC 时,它会在端口 5901 上启动默认服务器实例。 此端口称为显示端口,VNC 将其称为 :1
。 VNC 可以在其他显示端口上启动多个实例,例如 :2
、:3
等。 使用 VNC 服务器时,请记住 :X
是指 5900+X
的显示端口。
因为我们将要更改 VNC 服务器的配置方式,所以我们需要首先停止在端口 5901 上运行的 VNC 服务器实例。
vncserver -kill :1
输出应如下所示,但 PID 不同:
OutputKilling Xtightvnc process ID 17648
在我们开始配置新的 xstartup
文件之前,让我们备份原始文件。
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
现在使用 nano
或您喜欢的文本编辑器创建一个新的 xstartup
文件。
nano ~/.vnc/xstartup
将这些命令粘贴到文件中,以便在您启动或重新启动 VNC 服务器时自动执行它们,然后保存并关闭文件。
~/.vnc/xstartup#!/bin/bash xrdb $HOME/.Xresources startxfce4 &
文件中的第一个命令 xrdb $HOME/.Xresources
告诉 VNC 的 GUI 框架读取服务器用户的 .Xresources
文件。 .Xresources
是用户可以更改图形桌面的某些设置的地方,例如终端颜色、光标主题和字体渲染。 第二个命令只是告诉服务器启动 Xfce,在这里您可以找到轻松管理服务器所需的所有图形软件。
为了确保 VNC 服务器能够正确使用这个新的启动文件,我们需要授予它可执行权限。
sudo chmod +x ~/.vnc/xstartup
现在,重新启动 VNC 服务器。
vncserver
服务器应该以类似于以下的输出启动:
OutputNew 'X' desktop is your_server_name.com:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/liniverse.com:1.log
- Step 3 — 测试 VNC 桌面
在这一步中,我们将测试您的 VNC 服务器的连接性。
首先,我们需要在您的本地计算机上创建一个 SSH 连接,以安全地转发到 VNC 的 localhost
连接。 您可以使用以下命令通过 Linux 或 OS X 上的终端执行此操作。 请记住将 user
和 server_ip_address
替换为您的服务器的 sudo 非 root 用户名和 IP 地址。
ssh -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address
如果您使用的是图形 SSH 客户端,例如 PuTTY,请使用 server_ip_address
作为连接 IP,并在程序的 SSH 隧道设置中将 localhost:5901
设置为新的转发端口。
接下来,您现在可以使用 VNC 客户端尝试连接到位于 localhost:5901
的 VNC 服务器。 系统将提示您进行身份验证。 要使用的正确密码是您在步骤 1 中设置的密码。
连接后,您应该会看到默认的 Xfce 桌面。 它应该看起来像这样:
您可以使用文件管理器或从命令行访问主目录中的文件,如下所示:
- Step 4 — 创建 VNC 服务文件
接下来,我们将 VNC 服务器设置为 systemd 服务。 这将可以根据需要启动、停止和重新启动它,就像任何其他 systemd 服务一样。
首先,使用您喜欢的文本编辑器创建一个名为 /etc/systemd/system/vncserver@.service
的新单元文件:
sudo nano /etc/systemd/system/vncserver@.service
将以下内容复制并粘贴到其中。 请务必更改 User 的值和 PIDFILE 值中的用户名以匹配您的用户名。
/etc/systemd/system/vncserver@.service[Unit] Description=Start TightVNC server at startup After=syslog.target network.target [Service] Type=forking User=sammy PAMName=login PIDFile=/home/sammy/.vnc/%H:%i.pid ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target
保存并关闭文件。
接下来,让系统知道新的单元文件。
sudo systemctl daemon-reload
启用单元文件。
sudo systemctl enable vncserver@1.service
@
后面的 1
表示服务应该出现在哪个显示编号上,在这种情况下,如上所述的默认 :1
。 如果 VNC 服务器的当前实例仍在运行,请停止它。
vncserver -kill :1
然后像启动任何其他 systemd 服务一样启动它。
sudo systemctl start vncserver@1
您可以使用以下命令验证它是否启动:
sudo systemctl status vncserver@1
如果它正确启动,输出应如下所示:
输出
vncserver@1.service - TightVNC server on Ubuntu 16.04 Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2016-04-25 03:21:34 EDT; 6s ago Process: 2924 ExecStop=/usr/bin/vncserver -kill :%i (code=exited, status=0/SUCCESS) ... systemd[1]: Starting TightVNC server on Ubuntu 16.04... systemd[2938]: pam_unix(login:session): session opened for user finid by (uid=0) systemd[2949]: pam_unix(login:session): session opened for user finid by (uid=0) systemd[1]: Started TightVNC server on Ubuntu 16.04.
##结论
您现在应该在您的 Ubuntu 16.04 服务器上启动并运行一个安全的 VNC 服务器。 现在,您将能够通过易于使用且熟悉的图形界面来管理您的文件、软件和设置。