如何在Ubuntu 18.04上安装和配置VNC

介绍

虚拟网络计算(VNC)是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进行交互。它使得对于不熟悉命令行的用户更容易管理远程服务器上的文件,软件和设置。

在本指南中,您将在Ubuntu 18.04服务器上设置VNC服务器,并通过SSH隧道安全地连接到该服务器。您将使用TightVNC,一种快速轻巧的远程控制软件包。这种选择将确保我们的VNC连接即使在较慢的互联网连接上也能够平稳和稳定。

准备

要完成本教程,您需要:

  • 一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 安装了VNC客户端的本地计算机,支持通过SSH隧道的VNC连接。

步骤1 - 安装桌面环境和VNC服务器

默认情况下,Ubuntu 18.04服务器没有安装图形桌面环境或VNC服务器,所以我们首先安装它们。具体来说,我们将为最新的Xfce桌面环境和官方Ubuntu存储库中提供的TightVNC软件包安装软件包。

在您的服务器上,更新您的包列表:

sudo apt update

现在在您的服务器上安装Xfce桌面环境:

sudo apt install xfce4 xfce4-goodies

安装完成后,安装TightVNC服务器:

sudo apt install tightvncserver

要在安装后完成VNC服务器的初始配置,请使用该vncserver命令设置安全密码并创建初始配置文件:

vncserver

系统将提示您输入并验证密码以远程访问您的计算机:

You will require a password to access your desktops.
​
Password:
Verify:

密码长度必须介于六到八个字符之间。超过8个字符的密码将自动截断。

验证密码后,您可以选择创建仅查看密码。使用仅查看密码登录的用户将无法使用鼠标或键盘控制VNC实例。如果您想使用VNC服务器向其他人演示内容,这是一个有用的选项,但这不是必需的。

然后,该过程为服务器创建必要的默认配置文件和连接信息:

Would you like to enter a view-only password (y/n)? n
xauth:  file /home/sammy/.Xauthority does not exist
​
New 'X' desktop is your_hostname:1
​
Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

现在让我们配置VNC服务器。

第2步 - 配置VNC服务器

VNC服务器需要知道启动时要执行的命令。具体来说,VNC需要知道它应该连接到哪个图形桌面。

这些命令位于主目录下xstartup.vnc文件夹中调用的配置文件中。启动脚本是vncserver在上一步中运行时创建的,但我们将创建自己的脚本以启动Xfce桌面。

首次设置VNC时,它会在端口5901上启动默认服务器实例。该端口称为显示端口,由VNC称为:1。VNC可以在其他显示端口上启动多个实例,例如:2:3等等。

因为我们将要更改VNC服务器的配置方式,所以首先5901使用以下命令停止在端口上运行的VNC服务器实例:

vncserver -kill :1

输出应该如下所示,尽管您会看到不同的PID:

Killing Xtightvnc process ID 17648

在修改xstartup文件之前,请备份原始文件:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

现在创建一个新xstartup文件并在文本编辑器中打开它:

nano ~/.vnc/xstartup

无论何时启动或重新启动VNC服务器,都会自动执行此文件中的命令。如果尚未启动,我们需要VNC启动我们的桌面环境。将这些命令添加到文件中:

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

文件中的第一个命令xrdb $HOME/.Xresources告诉VNC的GUI框架读取服务器用户的.Xresources文件。用户可以在.Xresources其中更改图形桌面的某些设置,如终端颜色,光标主题和字体渲染。第二个命令告诉服务器启动Xfce,在这里您可以找到舒适地管理服务器所需的所有图形软件。

为确保VNC服务器能够正确使用此新启动文件,我们需要使其可执行。

sudo chmod +x ~/.vnc/xstartup

现在,重新启动VNC服务器。

vncserver

您将看到类似于此的输出:

New 'X' desktop is your_hostname:1
​
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

配置到位后,让我们从本地计算机连接到服务器。

第3步 - 安全地连接VNC桌面

连接时VNC本身不使用安全协议。我们将使用SSH隧道安全地连接到我们的服务器,然后告诉我们的VNC客户端使用该隧道而不是直接连接。

在本地计算机上创建SSH连接,以便安全地转发到localhostVNC连接。您可以使用以下命令通过Linux或macOS上的终端执行此操作:

ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip

-L开关指定的端口绑定。在这种情况下,我们将5901远程连接的端口5901绑定到本地计算机上的端口。该-C开关启用压缩,而-N开关告诉ssh我们不希望执行远程命令。该-l开关指定远程登录名。

记得替换sammy,并your_server_ip与您的服务器的须藤非root用户名和IP地址。

如果您使用的是图形化SSH客户端(如PuTTY),请将your_server_ip用作连接IP,并在程序的SSH隧道设置中设置localhost:5901为新的转发端口。

隧道运行后,使用VNC客户端进行连接localhost:5901。系统将提示您使用在步骤1中设置的密码进行身份验证。

连接后,您将看到默认的Xfce桌面。它应该看起来像这样:

您可以使用文件管理器或命令行访问主目录中的文件,如下所示:

按下CTRL+C终端以停止SSH隧道并返回到您的提示。这也将断开您的VNC会话。

接下来让我们将VNC服务器设置为服务。

步骤4 - 将VNC作为系统服务运行

接下来,我们将VNC服务器设置为systemd服务,以便我们可以根据需要启动,停止和重新启动它,就像任何其他服务一样。这还将确保在服务器重新启动时VNC启动。

首先,使用您喜欢的文本编辑器创建一个新的/etc/systemd/system/vncserver@.service单元文件:

sudo nano /etc/systemd/system/vncserver@.service

@名称末尾的符号将让我们传入一个我们可以在服务配置中使用的参数。我们将使用它来指定我们在管理服务时要使用的VNC显示端口。

将以下行添加到该文件中。请务必更改用户WorkingDirectory的值以及PIDFILE值中的用户名以匹配您的用户名:

[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
​
[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy
​
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

如果VNC已经运行,该ExecStartPre命令将停止。该ExecStart命令启动VNC并将颜色深度设置为24位颜色,分辨率为1280x800。您也可以修改这些启动选项以满足您的需求。

保存并关闭文件。

接下来,让系统知道新的单元文件。

sudo systemctl daemon-reload

启用单元文件。

sudo systemctl enable vncserver@1.service

1以下的@符号表示,其显示编号的服务应该出现过,在这种情况下,默认:1为在步骤2中进行了讨论..

如果VNC服务器仍然在运行,请停止它的当前实例。

vncserver -kill :1

然后启动它,就像启动任何其他systemd服务一样。

sudo systemctl start vncserver@1

您可以使用此命令验证它是否已启动:

sudo systemctl status vncserver@1

如果它正确启动,输出应如下所示:

● vncserver@1.service - Start TightVNC server at startup
   Loaded: loaded (/etc/systemd/system/vncserver@.service; indirect; vendor preset: enabled)
   Active: active (running) since Mon 2018-07-09 18:13:53 UTC; 2min 14s ago
  Process: 22322 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
  Process: 22316 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=0/SUCCESS)
 Main PID: 22330 (Xtightvnc)
​
...

重新启动计算机后,您的VNC服务器现在可用。

再次启动SSH隧道:

ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip

然后使用VNC客户端软件建立新连接localhost:5901以连接到您的计算机。

结论

您现在已在Ubuntu 18.04服务器上启动并运行安全的VNC服务器。现在,您将能够使用易于使用且熟悉的图形界面管理文件,软件和设置,并且您将能够远程运行Web浏览器等图形软件。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How to Install and Configure VNC on Ubuntu 18.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pythonlove

Linux防火墙iptables(二)

上一篇文章我们说了一些iptables/netfilter的基础知识,本文我们来介绍一下iptables的规则编写。Iptables的规则可以概括的分为两个方面...

41420
来自专栏FreeBuf

三星KNOX远程静默安装漏洞深入分析报告

漏洞来源 11月中旬,三星手机被国外安全研究人员曝光了一个严重的安全漏洞,该漏洞影响Galaxy S5,S4,S4 mini,Note 4,Note3以及Ace...

25790
来自专栏Java编程技术

UML建模(组件图)

组件图是为了展示组元(components),组元提供的接口(provided inerfaces)和需要调用的接口(required interfaces),...

80420
来自专栏圣杰的专栏

IdentityServer4 知多少

现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号、小程序,基于IOS、Android的App,基于Windows系统的桌面应用和UWP应用等等,这...

30020
来自专栏云计算教程系列

如何在Debian 8上设置VNC服务器

VNC(虚拟网络计算)是一种使用户能够连接远程计算机的图形桌面并与之交互的系统。它可以通过网络传输屏幕更新,键盘和鼠标事件。

78000
来自专栏黑泽君的专栏

day07_Tomcat服务器与http学习笔记

    WEB,在英语中web即表示网页的意思,它用于表示Internet主机上(服务器)供外界访问的资源。

12710
来自专栏白驹过隙

Socket编程回顾,一个最简单服务器程序

23230
来自专栏云计算教程系列

如何在Debian 9上安装和配置VNC

虚拟网络计算(VNC)是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进行交互。它使得对于不熟悉命令行的用户更容易管理远程服务器上的文件,软件和...

1.2K30
来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

25510
来自专栏Jerry的SAP技术分享

SAP CRM和C4C的内容管理(Content Management)

SAP CRM使用Attachments这个UI给用户提供内容管理的功能。通过新建按钮可以上传本地文档到CRM系统:

58630

扫码关注云+社区

领取腾讯云代金券