在Ubuntu 16.04上安装和配置VNC的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

###介绍

VNC,即“Virtual Network Computing”,是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进行交互。对于尚未熟悉命令行的用户来说,它使得在远程服务器上管理文件、软件和设置变得更加容易。

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

##先决条件

要完成本教程,您需要:

  • 通过 Ubuntu 16.04 初始服务器设置教程设置了 sudo 非根用户的 Ubuntu 16.04 Droplet。请注意,本教程可以在任何大小的 Droplet 上完成,但是在较小的 Droplet 上构建 VNC 可能会比较受功能限制。

  • 安装了支持通过 SSH 隧道进行 VNC 连接的 VNC 客户端的本地计算机。如果您使用 Windows,可以使用 TightVNC、RealVNC 或 UltraVNC。Mac OS X 用户可以使用内置的屏幕共享程序,或者使用跨平台应用程序如 RealVNC。Linux 用户可以选择多种选项:vinagrekrdc、RealVNC、TightVNC 等。

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

默认情况下,Ubuntu 16.04 Droplet 不会安装图形桌面环境或 VNC 服务器,因此我们将从安装这些开始。具体来说,我们将安装最新的 Xfce 桌面环境和官方 Ubuntu 仓库中提供的 TightVNC 软件包。

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

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

安装完成后,使用 vncserver 命令设置安全密码来完成 VNC 服务器的初始配置。

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 服务器时自动执行这些命令,然后保存并关闭文件。

[secondary_label ~/.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:1Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/liniverse.com:1.log

##第三步 —— 测试 VNC 桌面

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

首先,我们需要在本地计算机上创建一个安全地转发到 VNC 的 localhost 连接的 SSH 连接。您可以通过 Linux 或 OS X 终端使用以下命令来完成。记得将 userserver_ip_address 替换为您服务器的 sudo 非根用户名和 IP 地址。

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

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

接下来,您可以使用 VNC 客户端尝试连接到 localhost:5901 的 VNC 服务器。您将被提示进行身份验证。要使用的正确密码是您在第一步中设置的密码。

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

!VNC connection to Ubuntu 16.04 server

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

!Files via VNC connection to Ubuntu 16.04

##第四步 —— 创建 VNC 服务文件

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

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

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

将以下内容复制并粘贴到其中。确保更改 User 的值和 PIDFILE 中的用户名的值以匹配您的用户名。

[secondary_label /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.04Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)Active: active (running) since Mon 2016-04-25 03:21:34 EDT; 6s agoProcess: 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 服务器,并且它正在运行。现在,您将能够使用易于使用和熟悉的图形界面管理您的文件、软件和设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写一个字符设备的驱动步骤

一、前期准备 了解设备和需求: 深入研究字符设备的硬件手册和数据表,理解其工作原理、接口、寄存器、中断等。确定设备驱动需要支持的功能和操作。 准备开发环境: 确保有运行Linux系统的开发板,且其zImage是自己编译的&#x…

suricata7 rule加载(三)加载options

suricata7.0.5 加载options (msg:“HTTP Request Example”; flow:established,to_server; http.method; content:“POST”; http.uri; content:“query.php”; bsize:>9; http.protocol; content:“HTTP/1.1”; bsize:8; http.host; content:“360”; bsize:>3; class…

代理详解之静态代理、动态代理、SpringAOP实现

1、代理介绍 代理是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式。为了对外开放协议,B往往实现了一个接口,A也会去实现接口。但是B是“真正”实现类,A则比较“虚”,他借用了B的方法去实现接口的方法。A…

音视频封装demo:将h264数据和aac数据封装(mux)成FLV文件(纯手工,不依赖第三方开源库)

1、README 前言 注意:flv是不支持h.265封装的。 a. demo使用 $ make clean && make DEBUG1 $ $ ./flv_mux_h264_aac Usage:./flv_mux_h264_aac avfile/test1_856x480_24fps.h264 24 avfile/test1_44100_stereo.aac out1.flv./flv_mux_h264_aac avfile/tes…

vue3 + element-plus 表格行内编辑,如何实现表单校验?

问题描述: 当使用table实现行内编辑时,往往需要对必填项增加校验以及错误高度, 预期实现效果如下: 实现思路: 使用el-form表单自身的校验功能:通过el-from绑定对应表格行的prop, 实现校验 页面…

@SpringBootApplication 注解

什么是 SpringBootApplication SpringBootApplication 是 Spring Boot 提供的一个核心注解,它是一个组合注解,用于简化 Spring Boot 应用程序的配置。这个注解通常标注在主类上,用于标识一个 Spring Boot 应用的入口。通过这个注解&#xff…

【力扣】每日一题—第70题,爬楼梯

题目: 假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬1或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路: 我开始是写了一个函数计算爬一层和爬二层的个数,之后排列求和,但是超范围了&#xff0c…

数据结构基础--------【二叉树题型】

1、前提(待补充) 1.**DFS(Depth First Search)😗*递归法得到最终的数组(深度优先算法) 其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,如果遇到死路就往回退,回退过程中如果遇…

OAuth2.0登录的四种方式

OAuth登录的四种方式 1. 授权码 授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。 这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权…

怎么通过住宅代理IP实现电商采集?

在电商行业,数据采集是一种常见的策略,用于分析市场趋势、监测竞争对手价格和库存、优化产品策略等。由于许多电商平台有严格的数据采集政策和反爬虫措施,使用住宅代理IP可以有效绕过这些限制,实现高效和安全的数据采集。本文将探…

点亿点计划Web3.0广告平台即将发射Clicks科力币

点亿点计划Web3.0广告平台即将发射Clicks科力币 我们很高兴地宣布,点亿点计划Web3.0广告平台即将发射Clicks科力币!科力币(Clicks)是Clicks X Web3.0多功能应用的治理代币,未来将为代币持有人带来巨大的广告收入。 …

计算机的错误计算(二十六)

摘要 结合计算机的错误计算(二十四)中的 Maple 环境下的计算过程,(二十五)讨论了(不)停机问题。事实上,其它数学软件比如 Mathematica 也存在该问题。 (不)停…

《植物大战僵尸杂交版》2.2版本:全新内容与下载指南

《植物大战僵尸杂交版》2.2版本已经火热更新,带来了一系列令人兴奋的新玩法和调整,为这款经典的塔防游戏注入了新的活力。如果你是《植物大战僵尸》系列的忠实粉丝,那么这个版本绝对值得你一探究竟。 2.2版本更新亮点 新增看星星玩法 这个新…

Linux学习——Linux中无法使用ifconfg命令

Linux学习——Linux中无法使用ifconfg命令? 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅…

【Python基础篇】条件判断和循环判断

文章目录 1. 条件判断1.1 单分支1.2 双分支1.3 多分支 2. 循环判断2.1 while2.2 for2.3 break2.4 continue 1. 条件判断 1.1 单分支 前面学习了打印,但是有时候我们在打印时会面临选择,例如:一个网吧,未满18,禁止进入…

力扣喜刷刷--day1

1.无重复字符的最长子串 知识点:滑动窗口 基本概念 窗口:窗口是一个连续的子序列,可以是固定长度或可变长度。滑动:窗口在数据序列上移动,可以是向左或向右。边界:窗口的起始和结束位置。 应用场景 字符…

OpenAI与Thrive Global推出Thrive AI Health:AI驱动的健康教练应用

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

JAVA之开发神器——IntelliJ IDEA的下载与安装

一、IDEA是什么? IEAD是JetBrains公司开发的专用于java开发的一款集成开发环境。由于其功能强大且符合人体工程学(就是更懂你)的优点,深受java开发人员的喜爱。目前在java开发工具中占比3/4。如果你要走java开发方向,那…

深入解析C#中的Stopwatch类:精准计时的艺术

目录 引言 了解Stopwatch类 创建与使用Stopwatch 使用多个Stopwatch实例 性能分析与优化 结论 后记 引言 在软件开发中,性能分析是不可或缺的一环,它帮助我们识别瓶颈、优化代码,确保应用程序的高效运行。C#中的Stopwatch类便是开发者…

python+pygame实现五子棋人机对战之一

五子棋起源于中国,是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。 本内容仅仅涉及到人机对战版,人人对战版后续…