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

介绍

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

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

准备

要完成本教程,您需要:

  • 包括一个可以使用sudo命令非root用户的Ubuntu 16.04初始服务器。
  • 安装了VNC客户端的本地计算机,支持通过SSH隧道的VNC连接。如果您使用的是Windows,则可以使用TightVNC,RealVNC或UltraVNC。Mac OS X用户可以使用内置的屏幕共享程序,也可以使用RealVNC等跨平台应用程序。Linux用户可以从多个选项中进行选择:vinagrekrdc,的RealVNC,TightVNC的,等等。

没有服务器的用户可以购买和使用腾讯云服务器或者直接在腾讯云实验室Ubuntu服务器上机安装和配置VNC。

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

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

在您的服务器上,安装Xfce和TightVNC软件包。

$ sudo apt-get update
$ sudo apt install xfce4 xfce4-goodies tightvncserver

要在安装后,对VNC服务器的进行配置,请先使用vncserver命令设置安全密码。

$ vncserver

系统将提示您输入并验证密码,以及只有查看权限的密码。使用只有查看密码登录的用户将无法使用鼠标或键盘控制VNC实例。如果您想要使用VNC服务器向其他人演示内容,这是一个有用的选项,但不是必需的。

运行vncserver通过为我们的服务器创建默认配置文件和连接信息来完成VNC的安装。安装了这些包之后,就可以配置VNC服务器了。

第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:

Killing 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

启动服务器时,应该以下类似的输出内容:

New '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

第3步 - 测试VNC桌面

在此步骤中,我们将测试您的VNC服务器的连接性。

首先,我们需要在本地计算机上创建一个SSH连接,以便安全地转发localhost到VNC 的连接。您可以通过Linux或OS X上的终端使用以下命令执行此操作。记得替换userserver_ip_address,那是您的服务器的须非root用户名和IP地址。

$ ssh -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address

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

接下来,您现在可以使用VNC客户端尝试连接到VNC服务器的5901端口。系统将提示您进行身份验证。要使用的密码是您在步骤1中设置的密码。

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

VNC连接到Ubuntu 16.04服务器

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

文件通过VNC连接到Ubuntu 16.04

第4步 - 创建VNC服务文件

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

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

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

复制并粘贴以下内容到其中。请确保将用户值和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

保存并关闭文件。

接下来,重新加载systemctl服务。

$ 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服务器。腾讯云开发者实验室除了提供基于Ubuntu搭建VNC远程桌面,还提供基于 CentOS 搭建 VNC 远程桌面VNC相关实验教程,欢迎使用。


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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

Window 提权基础

再加上个人的理解写出的关于 Windows 提权基础的文章,其中有些地方因为不太实用所以做了适当修改,感谢 @hl0rey 的帮助和建议。

30000
来自专栏calvin

jira webhook 事件触发并程序代码调用jenkins接口触发构建操作

开发管理工具触发站点构建事件,事件处理中需要调用Jenkins接口开始构建动作。 我的应用场景: 使用jira作为管理工具,在jira中创建自定义的工作流来...

92630
来自专栏pythonlove

Linux防火墙iptables(二)

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

45720
来自专栏互扯程序

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

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

28410
来自专栏Seebug漏洞平台

Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052(CVE-2017-9805)

漏 洞 概 述 1. 漏洞信息: 2017年9月5日,Apache Struts 发布最新安全公告。Apache Struts2 的 REST 插件存在远程...

31760
来自专栏容器云生态

Docker1.12尝试

前言:在docker1.12中默认增加了swarm mode 编排功能,并且官方支持更多的插件来进行docker的网路和外接存储插件,不过目前测试swarm m...

494100
来自专栏大魏分享(微信公众号:david-share)

Oracle11g RAC双NFS仲裁容错方案

说明: 整理文档时发现自己在2010年写的一个RAC容灾方案,觉得有一些用,分享出来。当时为了验证此方案,做了很多PoC。方案相对比较复杂,但是也提供了一种思路...

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

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

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

14.4K00
来自专栏白驹过隙

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

23530
来自专栏腾讯Bugly的专栏

H5 缓存机制浅析 移动端 Web 加载性能优化

1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性。离线存储(也可称为缓存机制)是其中一个非常重要的特性。H5 引入的离...

40320

扫码关注云+社区

领取腾讯云代金券