Ubuntu VNC 服务器

2025年3月17日 | 阅读 12 分钟

VNC 服务器简介

VNC 是 Virtual Network Computing 的缩写,它是一种图形化桌面共享系统,利用远程帧缓冲协议(简称 RFB)远程控制其他计算机。它将鼠标和键盘输入从一台计算机传输到另一台计算机,并在网络上传输图形屏幕更新。

VNC 是一个平台无关的系统:有适用于多种 GUI 操作系统和 Java 的服务器和客户端。一个 VNC 服务器可以连接多个客户端。该技术常见的用途是从家里的电脑访问工作电脑上的文件,以及进行远程技术支持,反之亦然。

最初,VNC 是在英国剑桥的 Olivetti & Oracle 研究实验室集成的。真正的 VNC 源代码和几个最新的衍生版本是基于 GNU 通用公共许可证的开源软件。

有几种 VNC 可供选择,提供各自的特定功能。例如,有些 VNC 用于 Microsoft Windows,提供文件传输等功能。一些 VNC (没有附加功能)与 VNC 兼容,因此一种 VNC 客户端可以连接到另一种 VNC 服务器;其他 VNC 是基于 VNC 代码的,但不兼容经典 VNC。

RFB 和 VNC 是 RealVNC Ltd. 在美国及其他一些国家注册的商标

VNC 服务器的历史

英国剑桥的 Olivetti 和 Oracle 研究实验室(简称 ORL)在 Olivetti 和 Oracle 公司收购该实验室后,集成了 VNC。AT&T 于 1999 年继承了该实验室,并于 2002 年关闭了该实验室的研究工作。
在 AT&T 研究实验室工作的 VNC 开发人员包括:

  • Andy Hopper
  • James Weatherall
  • Quentin Stafford-Fraser
  • Andy Harter(项目负责人)
  • Tristan Richardson(项目发明人)

包括 Hopper、Weatherall、Harter 和 Richardson 在内的几位开发团队成员在 ORL 于 2002 年关闭后,组建了 RealVNC,继续从事商业 VNC 软件和基于该名称的开源开发。

GPL 许可的原始源代码已融入许多其他 VNC 版本。这种分支并未导致兼容性问题,因为 RFB 协议的设计是可扩展的。VNC 服务器和客户端通过握手协商它们的能力,以应用双方支持的最准确选项。RealVNC Ltd. 声称截至 2013 年,“VNC” 是在美国和其他国家注册的商标。

“Virtual Network Computing” 名称源于 ORL 在一个名为 VideoTile 的瘦客户端上的工作,该客户端使用了 RFB 协议。VideoTile 包括一个带有快速 ATM 连接的 LCD 显示屏和用于网络的笔输入。通常,网络计算机当时被用作瘦客户端的同义词;VNC 最初是一个纯软件的网络计算机。

VNC 服务器的操作

  • VNC 服务器是设备上的一个程序,它可以共享屏幕(可能未连接到物理显示器,服务器可以是“无头”的),并允许客户端共享对其的控制。
  • VNC 客户端(查看器)是一个程序,它显示来自服务器的屏幕数据,从服务器接收更新,并通过向服务器报告本地收集的输入来控制它。
  • RFB 协议(VNC 协议)非常简单,基于从服务器向客户端发送图形原始形式,以及从客户端向服务器发送事件消息。

在服务器上,查看器可以通过常规操作方法连接到任何端口(5900 是默认端口)。或者,根据实现方式,任何浏览器都可以连接到任何服务器(5800 是默认端口)。服务器可以通过监听模式在 5500 端口连接到任何查看器。监听模式的一个好处是,服务器站点不必设置防火墙来允许访问 5900 端口(或 5800);这些责任在于查看器,如果服务器站点没有系统专业知识,而查看器用户更有经验,这将很有帮助。

服务器将小的帧缓冲矩形传输到客户端。VNC 协议最简单的形式会占用大量带宽,因此已经创建了许多方法来减少通信开销。例如,有多种编码方式(决定发送这些矩形的最有效方法的编码方式)。VNC 协议允许服务器和客户端通信它们将使用哪种编码方法。所有服务器和客户端都支持的最简单的编码是原始编码,它以从左到右的扫描线顺序传输像素数据,并且仅传输在发送完整屏幕后发生更改的矩形。如果一个屏幕部分与前一帧相比只发生微小变化,则此编码效果很好。

  • 默认情况下,VNC 使用 5900+N 端口,其中 N 是显示编号。
  • 许多实现还在 5800+N 上启动一个基本的 HTTP 服务器,以提供 VNC 查看器作为 Java 小程序,允许从任何支持 Java 的 Web 浏览器轻松连接。
  • 只要服务器和客户端配置得当,就可以应用不同的代码分配。
  • 还有一个适用于最新浏览器的 HTML5 VNC 客户端实现,无需插件。
  • 通过 Internet 使用 VNC 是可行的,前提是用户在两端都有宽带连接,尽管在低带宽下也是可能的。
  • 但是,它可能需要高级的 NAT(网络地址转换)、路由器和防火墙配置,例如端口转发才能进行连接。
  • 用户可以通过 VPN(虚拟专用网络)技术进行通信,以便在 Internet 上更方便地使用,或者如果 VPN 用作代理,则可以通过 LAN 使用,或者通过 VNC 中继器(有助于 NAT 存在)。

Xvnc 是一个基于经典 X 服务器的 Unix VNC 服务器。对于应用程序,Xvnc 会出现(显示客户端窗口),它是一个 VNC 服务器,供远程 VNC 用户使用。应用程序可以像普通的 X 显示一样在 Xvnc 上显示自己。但是,它们会出现在连接的 VNC 查看器上,而不是物理屏幕上。一台机器(可以是网络服务器或工作站),带有鼠标、键盘和屏幕,也可以设置为作为守护进程或服务重新启动和运行 VNC 服务器,然后可以移除鼠标、键盘和屏幕,并将机器存放在隔离的位置。

显示器不一定与用户在服务器上看到的由 VNC 服务的显示器相同。在支持多个同时 X11 会话的 Linux/Unix 计算机上,VNC 可以设置为服务于一个特定的现有 X11 会话,或启动自己的会话。此外,也可以从同一台计算机运行多个 VNC 会话。在 Microsoft Windows 上,VNC 会话始终是正在服务的最新用户会话。

通常,用户将 VNC 设置为跨平台远程桌面系统。例如,对于 macOS X,Apple Remote Desktop 与 VNC 交互,如果使用 x11vnc 服务,它将连接到 Unix 用户的当前桌面,或者如果使用 TightVNC 服务,它将隔离 X11 会话。TightVNC 将连接到由 Apple Remote Desktop 服务(如果启用了 VNC 选项)或在 Unix 上运行的 Microsoft Windows 上的 VNC 服务器提供的 macOS X 会话。RealVNC 在 2014 年 7 月发布了 Wayland 开发者预览版。

VNC 服务器的安全性

RFB 默认不是一个安全的协议。当加密密码和加密密钥通过网络被嗅探时,破解可能会成功,而密码不会以明文传输。因此,建议使用至少 8 个字符的密码。此外,一些 VNC 版本有 8 个字符的限制;如果传输的密码超过 8 个字符,则其余字符将被删除,然后将额外字符串与密码进行比较。

UltraVNC 支持使用开源加密插件,该插件可以加密整个 VNC 会话,包括数据传输和密码身份验证。此外,它还允许基于 Active DirectoryNTLM 用户帐户实现身份验证。尽管如此,使用这些加密插件会使其与其他 VNC 程序不兼容。RealVNC 提供高质量的 AES 加密作为其商业套餐的一部分,并提供 Active Directory 集成。

  • Workspot 发布了 VNC 的 AES 加密补丁。
  • 根据 TightVNC 的说法,TightVNC 不安全,因为图像数据未经加密发送。
  • 为了规避此问题,应通过 SSH 连接进行隧道传输。
  • VNC 可以通过 VPN 或 SSH 连接进行隧道传输,这将增加一个具有改进加密的安全层。
  • 几乎所有平台都有 SSH 客户端;可以从 Unix 客户端、Macintosh 客户端(包括 System 7、Mac OS X 及更高版本)、Microsoft Windows 客户端以及其他各种客户端创建 SSH 隧道。此外,还有免费软件可以在计算机之间创建即时 VPN 隧道。

另一个安全问题是检查 VNC 使用是否需要远程计算机所有者的授权,然后才能控制他们的机器。这可以避免计算机访问所有者在不知情的情况下发现有人正在控制他们的机器的情况。

VNC 服务器的基本安全选项

设置过程中最重要的事情是只允许正确的人访问我们的桌面。要做到这一点,最安全的方法通常是让坐在桌面旁的人决定谁可以使用它,但这并不总是可行的。例如,如果我们希望从其他地方登录到我们的计算机。

如果您想手动确认所有连接,请查看以下选项:

  • 仅查看访问:允许 VNC 客户端查看桌面,但不能修改任何内容。增加额外的安全性可以避免我们双方争夺鼠标控制权的问题。
  • 始终请求访问:弹出窗口询问是否允许正在传入的所有连接。

以上两个选项将提供最大的安全性。始终请求访问可确保没有人可以在我们不知情的情况下连接,而仅查看访问可确保他们无法在未经我们请求的情况下修改任何内容。

如果您希望在没有人坐在计算机旁时访问您的桌面,以下选项将更有帮助:

  • 仅允许本地连接:只允许已访问我们设备的人连接。
  • 以“一次性”模式启动 VNC 服务器:指示我们的 VNC 服务器只允许一次连接;之后我们可以阻止任何连接。
  • 创建密码:要求用户在连接之前传输密码。

只要他们使用了端口转发,以上三个选项应该就能提供一个安全的设置。只允许本地连接意味着只有拥有我们计算机上用户帐户的人才能访问我们的桌面。以“一次性”模式启动服务器意味着我们计算机上的用户帐户在启动 VNC 服务器和从 VNC 客户端连接之间需要登录到我们的桌面。创建密码意味着,如果有人尝试在此短暂期间进行连接,在您注意到并禁用服务器之前,他们将无法进入。

重要提示:如果您希望使用 Mac OS X 内置的客户端,则必须创建一个密码。

什么是 Vino?

它是 Ubuntu 中默认的 VNC 服务器,用于与他人共享我们的桌面。要在 GNOME 中设置 vino,我们需要访问 System > Preferences > Remote Desktop

  • 要将 vino 设置为始终请求访问,我们需要在远程桌面配置窗口中选择“允许其他用户查看我的桌面”选项。
  • vino 没有办法只监听传入的连接。
  • 要创建密码,我们需要选择“要求用户输入此密码”选项,并输入一个难以猜测的密码。
  • 我们需要取消选中“允许其他用户控制我的桌面”选项,以便将 vino 设置为仅查看模式。
  • 我们需要打开终端窗口并执行以下命令来仅允许本地连接:
  • 我们需要打开终端窗口并执行以下命令来允许来自任何地方的连接:

什么是 x11vnc?

它是一个 VNC 服务器,不依赖于任何特定的图形环境。它还可以在最小化环境中使用,因为它有一个基于 tk/tcl 的 GUI。它可以在系统仍显示登录屏幕时启动。

确保我们首先删除了任何其他 VNC 程序,以免它们干扰此服务器,这一点很有用。以下是一些将根据我们的环境进行基本调整的设置:

  • 要配置 x11vnc 在不设置密码的情况下始终请求访问,请选择-nopw -accept popup:0
  • 要配置 x11vnc 只监听传入的连接,请选择-once
  • 要配置 x11vnc 持续监听任何连接,请选择-forever
  • 要将 x11vnc 设置为仅查看模式,请选择-viewonly
  • 要将 x11vnc 配置为仅允许本地连接,请选择-localhost

什么是 Krfb?

在 Kubuntu 中,它是默认的 VNC 服务器。由于它与 KDE 高度集成,因此在其他环境中运行它会很困难。要设置 krfb,我们需要访问 System Settings > Sharing > Desktop Sharing > Configure

  • 要将 krfb 配置为始终请求访问,请选择“在接受未经邀请的连接之前进行确认”选项。
  • 要设置密码,我们需要在“密码”字段中输入一个难以猜测的密码。
  • 我们需要取消选中“允许未经邀请的连接控制桌面”选项,以将 krfb 设置为仅查看模式。
  • 没有内置的方法可以只允许本地连接。

邀请

Krfb 允许我们创建“邀请”或一次性密码,该密码在一次使用或一小时后失效。它还提供了一种方便的方式来提供对设备的单次访问,但这只提供有限的安全性。例如,如果我们通过即时消息或电子邮件向某人发送邀请,攻击者就可以读取我们的邀请消息,因为它是在 Internet 上传输的。

当我们希望允许其他人查看我们的桌面时,邀请会很有帮助,但我们在允许其他人查看桌面时仍需采取基本预防措施。

Tightvncserve

Tightvnc 创建一个全新的桌面,不与任何实际屏幕关联,而几乎所有 VNC 服务器都共享我们的桌面。这使得它在某些方面(例如远程帮助)的用处大大减小,但在其他方面(例如创建公共协作区域)的用处大大增加。如果 tightvncserver 无法启动,我们可能需要取消注释 /etc/vnc.conf 目录中的 $fontpath 行。

Tightvnc 被设计成可以像 x11vnc 一样从命令行执行。要启动它,请输入:

这将指示 tightvnc 在互联网上的 5901 端口上监听来自任何地方的 VNC 连接。如果没有 -nolisten tcp,tightvnc 将监听一种不同的连接类型(X11 而不是 VNC),这不太有用。tightvnc 的特殊设计意味着,如果我们的计算机上正在运行一个正常的桌面,它无法通过标准 VNC 端口创建远程桌面。

  • tightvncserver 没有办法配置为每次都请求访问。
  • tightvncserver 没有办法配置为只接受传入的连接。
  • Tightvncserver 始终需要密码,并在首次运行时提示我们设置一个。
  • 要将 tightvncserver 配置为仅允许本地连接,请添加 -localhost 选项。

TightVNC

最初,TightVNC 基于 VLC 4 TightVNC 分支。它自 2009 年以来一直积极维护且稳定,并已集成到最流行的发行版中。它支持复合窗口管理器,无需像 GNOME shell 那样进行回退模式。此外,在使用 TightVNC 查看器时,它默认应用 TLS 加密。

相似的应用程序

  • directvnc 是一种 VNC 服务器,用于共享 Linux 帧缓冲而不是桌面。
  • tmuxGNU Screen 允许我们启动、共享、分离然后返回文本模式终端。
  • linuxvnc 是另一个 VNC 服务器,用于共享文本模式控制台而不是桌面。
  • xserver-xephyr 允许我们在单个计算机上创建桌面中的桌面。
  • xrdp 是 Microsoft 远程桌面协议的通用服务器,它提供与所有现代 Windows 版本兼容的客户端。
  • 桌面共享软件,即 Apple Remote Desktop,为 Mac OS 添加了 VNC 服务器。
  • 默认软件,即 Apple Screen Sharing,允许 Mac OS X 接收 VNC 连接。
  • Linux 远程桌面,即 ThinLinc,将 SSH、noVNC 和 TightVNC 打包在一起,允许从任何操作系统或设备访问。

在 Ubuntu 中安装 VNC 服务器

在本节中,我们将解释如何在 Ubuntu 系统上安装和配置 VNC。

更新系统

我们需要通过在终端窗口中运行以下命令来更新我们的系统存储库:


Ubuntu VNC Server

我们将在下一步中获取图形界面。

安装 Xfce 桌面环境

我们可能知道 Ubuntu 服务器是通过命令行管理的,它们没有内置的桌面环境。如果您使用的是 Ubuntu 桌面版本,可以跳过此步骤。

我们将在本文中安装 Xfce,它是一个强大且轻量级的桌面环境,适用于任何远程服务器。


Ubuntu VNC Server

我们需要输入“Y”以允许 Xfce 的安装过程继续。之后,命令行屏幕上会弹出一个提示,要求我们设置 lightdm。

Ubuntu VNC Server

我们可以选择 lightdmgdm3 作为默认显示管理器。