Ubuntu使用vnc远程桌面【远程内网穿透】
文章目录
- 1.前言
- 2.两台互联电脑的设置
- 2.1 Windows安装VNC
- 2.2 Ubuntu安装VNC
- 2.3.Ubuntu安装cpolar
- 3.Cpolar设置
- 3.1 Cpolar云端设置
- 3.2.Cpolar本地设置
- 4.公网访问测试
- 5.结语
1.前言
记得笔者刚刚开始接触电脑时,还是win95/98的时代,那时的电脑桌面刚迈入图形化不久,还存在很多问题,比如被无数次调侃的蓝屏白字和惊心动魄的音效,但也确实深深吸引了笔者(尽管那时候都在玩游戏),算是打开了笔者的兴趣之门。接下来的时间里,各种不同的操作系统都迈进了图形化时代,以黑屏白字显示的操作系统越来越少。恰逢乔帮主的苹果电脑风靡全球,为了体验不同的图形界面风格,笔者还下载安装过苹果风格的桌面模拟包(彼时的苹果不兼容intelCPU,更重要的原因是买不起那时的苹果电脑…),但带来的后果就是Windows系统的各种不稳定和崩溃。
现在各种操作系统的图形化界面日臻成熟,风格也逐渐趋于类似。笔者将淘汰的电脑装上了不同的操作系统,时不时的开机感受下不同风格的操作界面,也会在不同操作系统上安装一些特色软件玩一玩。直到桌面连接软件的出现,笔者就开始使用桌面连接软件,在Windows系统上打开其他操作系统的桌面进行操作。可以说桌面连接软件的出现,给笔者省了不少麻烦。而随着软件技术的发展,已经出现了能远程连接局域网内不同操作系统桌面的软件组合,更是大大拓展了可玩性。今天,笔者就为大家介绍很有特色的一种:使用Cpolar+VNC的组合,实现远程连接其他系统的桌面。
2.两台互联电脑的设置
为便于说明两台不同操作系统之间使用VNC互联的操作步骤,笔者使用了安装Ubuntu系统的电脑,以及安装了Windows系统的电脑。如果打算在其他操作系统的电脑进行互联,也可以参照这些步骤进行。
2.1 Windows安装VNC
由于笔者平时使用的电脑都是Windows操作系统,因此需要以Windows连接其他操作系统桌面。首先要在Windows上安装VNC,只要访问VNC官网(https://www.realvnc.com/en/connect/download/viewer/),下载适用Windows系统的VNC版本。

Windows版的VNC下载完成后,双击.exe文件,并一路next即可完成安装。安装期间可能出现选择软件安装位置的提示框,只要选择local hard drive位置即可。



2.2 Ubuntu安装VNC
接着在打算连入的操作系统上安装VNC,这里打算连入的是Ubuntu系统,因此是在Ubuntu系统上安装VNC(其他操作系统以此类推)。
需要注意的是,想要远程连接Ubuntu的图形化桌面,可能需要先执行图形化桌面的安装命令
sudo apt install ubuntu-desktop
sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal
再输入命令重启Ubuntu,就能启用图形化桌面
sudo reboot
为了能更好的获得Ubuntu的图形化界面,还可以选择安装lightDM,输入命令
sudo apt-get install lightdm
就能安装lightDM,安装期间出现的询问,我们按键盘上的Tab选择light即可。


接着在Ubuntu的命令行界面输入命令
sudo apt-get install x11vnc
就能自动安装VNC

完成VNC的安装后,最好再将VNC设置为开机启动(毕竟谁也不想每次重启Ubuntu后都要重新启动VNC软件)。输入命令
sudo vim /lib/systemd/system/x11vnc.service
新建一个x11vnc.service文件,其中vim可以输入命令sudo apt install vim进行安装,如果没有安装vim就无法建立x11vnc.service文件,接着按i键进入该文件的编辑模式,并输入如下命令:
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/<USERNAME>/.vnc/passwd -rfbport 5900 -shared[Install]
WantedBy=multi-user.target
需要注意的是,蓝色显示的<USERNAME>需要替换为Ubuntu的实际用户名。

在指令添加完毕后,就可以输入:wq保存并退出。
最后,将其设置为开机启动
sudo systemctl enable x11vnc.service
启动服务
sudo systemctl start x11vnc.service
完成Ubuntu的VNC设置后,就可以接着安装Cpolar为我们远程通过VNC连接Ubuntu桌面进行准备
2.3.Ubuntu安装cpolar
相较来说,在Ubuntu上安装cpolar就要简单得多,只要输入命令:
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
就可以自动安装cpolar。如果是国外用户,还可以使用短链接进行安装:
curl -sL https://git.io/cpolar | sudo bash

安装程序完成后,可以输入命令cpolar version查看版本号,只要能显示出版本号,就说明cpolar已经成功安装。

接着,就可以通过浏览器访问cpolar的官网(www.cpolar.com)注册属于自己的账号并在cpolar官网登录,获取cpolar客户端的token码激活cpolar的客户端。当然,首先就是注册成为cpolar的用户(cpolar以注册名为划分,为每个客户生成单独的数据通道,并且生成用户唯一的token码,以此保证数据安全),并且新用户注册也非常简单。

在完成用户注册,并以注册用户登录cpolar官网后,就可以在cpolar网站主页面看到一串十分复杂的token码。

我们将这串token码复制下来,粘贴到Ubuntu的命令行界面并输入,具体的命令为:
cpolar authtoken (此处粘贴那串复杂的token码)

Token码输入后,就会被自动写入cpolar的配置文件中。此时我们就可以在Ubuntu的浏览器中,输入localhost:9200,打开cpolar的Web-UI界面。

在登陆界面输入已注册的用户名和密码后,就能进入cpolar客户端主界面。在这里我们能对已建立的隧道进行操作,也可以从这里建立一条临时隧道短暂使用。

不过正如前文所述,笔者并不想每天都重设一次VNC的连接地址,并且远程桌面连接所需的带宽也不小,因此直接升级Cpolar到专业套餐,而多出来的几个固定TCP、HTTP隧道,正好可以拿来发布网页或其他用途。
3.Cpolar设置
想要使用cpolar生成一天能够长期持续稳定存在的数据隧道,需要从cpolar云端和cpolar客户端两方面进行设置。其中,cpolar云端主要负责生成内网穿透数据隧道的入口,也就是公共互联网的地址(也可以看做一条空白的数据隧道);而cpolar客户端则是将数据隧道的入口与本地软件输出端口连接起来。因此,我们需要先登录cpolar云端,设置一条空白数据隧道。
3.1 Cpolar云端设置
在cpolar官网主界面左侧,找到并点击“预留”按钮,进入预留数据隧道设置页面,这里就是创建个人专属的空白数据隧道(TCP\HTTP\FTP等)的设置页面,这条数据隧道能生成一个公共互联网地址(即隧道的公共互联网地址)。

为了方便数据隧道的创建,自然需要输入一些简单信息,这些信息主要为:
- 地区 – 只要在下拉菜单中,就近选择即可(离得近能降低延迟);
- 描述 – 该栏可以看做数据隧道的备注,方便分辨即可;

信息设置完成后,点击右侧的保留按钮,将这条数据隧道保留下来,并生成一个公共互联网地址。

在这里,我们需要复制地址栏位的内容,以便在cpolar客户端设置时填入。
3.2.Cpolar本地设置
完成了cpolar云端的设置后,我们回到cpolar客户端,在cpolar客户端点击软件界面左侧隧道管理项下的创建隧道按钮,进入cpolar本地的数据隧道创建页面。在这里同样需要对几项信息进行设置,才能让云端生成的空白数据隧道与本地输出端口连结起来(免费版cpolar想要创建数据隧道,也是这样操作),这些内容主要为:
- 隧道名称 —— 可看做数据隧道的备注,用来区分不同隧道的应用场景;
- 协议 —— 即数据隧道的传输协议,如网页、数据传输、设备互联等,这里选择TCP协议;
- 本地地址 —— 这里需要填入软件(或内网设备)的端口号,而VNC的端口号为5900,因此在至此填入5900;
- 端口类型 —— 也就是内网穿透数据隧道类型,在cpolar云端设置了保留隧道的,就可以选择“固定TCP端口”;若只是> - 临时测试,就可以选择“随机临时TCP端口”(需要注意,固定TCP端口要将cpolar升级至专业版及以上);
- 预留的TCP地址 —— 在选择了“固定TCP端口”后就会出现该栏位,这里就要将cpolar云端生成的地址粘贴进来(若勾选 “随机临时TCP端口”,则不会出现该栏位);
各项设置都填入后,点击下方的创建按钮,就能将云端空白数据隧道与本地Ubuntu的VNC软件连接起来,从而让其他系统内的VNC软件能够连接到Ubuntu系统桌面。

隧道创建成功后,就能够生成拥有公共互联网地址,连接本地Ubuntu系统的VNC软件隧道。这条隧道可以在隧道管理项下的隧道列表页面看到,并可以在这个页面对隧道进行操作,如开启、关闭、删除等,如果要修改这条数据隧道的信息,也可以在这个页面中找到修改入口。

而这条隧道的公共互联网地址,则可以在状态项下的在线隧道列表中看到。

4.公网访问测试
现在,我们在Windows和Ubuntu都安装了VNC,并且cpolar的数据隧道也已经成功建立,接下来,我们就可以尝试使用VNC,在Windows上操作Ubuntu的桌面。
只要在Windows上打开VNC软件,在左上角的“File”菜单点击“New connection”选项,就能打开连接页面。

在New connection页面,需要将Ubuntu上cpolar生成的公共互联网地址,填入VNC Server栏位中,指导VNC找到Ubuntu系统。

最后点击页面下方的“OK”并输入密码,就能成功从Windows系统,连入Ubuntu系统的桌面,并进行所需的操作。


5.结语
至此,我们使用VNC+cpolar的软件组合,从Windows桌面连接Ubuntu系统桌面的尝试就算成功了。在这次操作中,VNC软件可以替换为其他的桌面互连软件,以适应不同用户的操作习惯。需要注意的是,远程桌面操作消耗带宽较大,为获得更好的操作体验,最好使用付费版的cpolar数据隧道。
相关文章:
Ubuntu使用vnc远程桌面【远程内网穿透】
文章目录1.前言2.两台互联电脑的设置2.1 Windows安装VNC2.2 Ubuntu安装VNC2.3.Ubuntu安装cpolar3.Cpolar设置3.1 Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 记得笔者刚刚开始接触电脑时,还是win95/98的时代,那时的电脑桌面刚迈入图形…...
【C++】map、set、multimap、multiset的介绍和使用
我讨厌世俗,也耐得住孤独。 文章目录一、键值对二、树形结构的关联式容器1.set1.1 set的介绍1.2 set的使用1.3 multiset的使用2.map2.1 map的介绍2.2 map的使用2.3 multimap的使用三、两道OJ题1.前K个高频单词(less<T>小于号是小的在左面升序&…...
css学习14(多媒体查询)
目录 多媒体查询 语法 示例代码 通用媒体查询 媒体功能参考列表 多媒体查询 CSS的媒体查询是一种CSS的技术,它可以根据不同的设备类型、屏幕尺寸、方向、分辨率等条件来应用不同的CSS样式,从而为不同的设备和屏幕提供最佳的浏览体验。这样ÿ…...
【C++进阶】C++11(中)左值引用和右值引用
文章目录左值引用左值引用的概念左值引用的使用右值引用右值引用的概念右值引用的使用左右值相互引用左值引用对右值进行引用右值引用对左值进行引用右值引用使用场景和意义左值引用的优势左值引用的短板右值引用的优势完美转发模板万能引用完美转发实际运用场景左值引用 左值…...
Python中的生成器【generator】总结,看看你掌握了没?
人生苦短,我用python python 安装包资料:点击此处跳转文末名片获取 1.实现generator的两种方式 python中的generator保存的是算法, 真正需要计算出值的时候才会去往下计算出值。 它是一种惰性计算(lazy evaluation)。 要创建一个…...
MD5加密竟然不安全,应届生表示无法理解?
前言 近日公司的一个应届生问我,他做的一个毕业设计密码是MD5加密存储的,为什么密码我帮他调试的时候,我能猜出来明文是什么? 第六感,是后端研发的第六感! 正文 示例,有个系统,前…...
【Linux】虚拟地址空间
进程地址空间一、引入二、虚拟地址与物理内存的联系三、为什么要有虚拟地址空间一、引入 对于C/C程序,我们眼中的内存是这样的: 我们利用这种对于与内存的理解看一下下面这段代码: 运行结果: 观察父子进程中 val 变量的值&…...
四平方和题解(二分习题)
四平方和 暴力做法 Y总暴力做法,蓝桥云里能通过所有数据 总结:暴力也分好坏,下面这份代码就是写的好的暴力 如何写好暴力:1. 按组合枚举 2. 写好循环结束条件,没必要循环那么多次 #include<iostream> #include<cmath>…...
一篇文章搞定js正则表达式
我们测试正则表达式是否正确的方法有很多,例如通过正则表达式找到拼配的字符串: 在vscode编辑器中点击搜索框中的第三个按钮就可以实现: 或者 在浏览器中的控制台也可以实现: 我们可以通过下面的在线网站来测试你写的正则是否正确…...
[数据结构] 用两个队列实现栈详解
文章目录 一、队列实现栈的特点分析 1、1 具体分析 1、2 整体概括 二、队列模拟实现栈代码的实现 2、1 手撕 队列 代码 queue.h queue.c 2、2 用队列模拟实现栈代码 三、总结 🙋♂️ 作者:Ggggggtm 🙋♂️ 👀 专栏࿱…...
官宣|Apache Flink 1.17 发布公告
Apache Flink PMC(项目管理委员)很高兴地宣布发布 Apache Flink 1.17.0。Apache Flink 是领先的流处理标准,流批统一的数据处理概念在越来越多的公司中得到认可。得益于我们出色的社区和优秀的贡献者,Apache Flink 在 Apache 社区…...
动态内存管理+动态通讯录【C进阶】
文章目录为什么存在动态内存分配❓👉动态内存函数👈malloc&freecallocrealloc❌常见的动态内存错误❌练习题🫠C/C程序的内存开辟🤔柔性数组柔性数组的特点柔性数组的优势:star:动态通讯录:star:初始化添加销毁为什么存在动态内…...
基于pytorch+Resnet101加GPT搭建AI玩王者荣耀
本源码模型主要用了SamLynnEvans Transformer 的源码的解码部分。以及pytorch自带的预训练模型"resnet101-5d3b4d8f.pth"本资源整理自网络,源地址:https://github.com/FengQuanLi/ResnetGPT注意运行本代码需要注意以下几点 注意!&a…...
多线程控制讲解与代码实现
多线程控制 回顾一下线程的概念 线程是CPU调度的基本单位,进程是承担分配系统资源的基本单位。linux在设计上并没有给线程专门设计数据结构,而是直接复用PCB的数据结构。每个新线程(task_struct{}中有个指针都指向虚拟内存mm_struct结构&am…...
清晰概括:进程与线程间的区别的联系
相关阅读: 🔗通俗简介:操作系统之进程的管理与调度🔗如何使用 jconsole 查看Java进程中线程的详细信息? 目录 一、进程与线程 1、进程 2、线程 二、进程与线程之间的区别和联系 1、区别 2、联系 一、进程与线程 …...
自定义类型 (结构体)
文章目录📬结构体的声明🔎1.结构的基础知识🔎2.结构的声明🔎3.特殊的声明🔎4.结构的自引用🔎5.结构体变量的定义和初始化🔎6.结构体内存对齐🔎7.修改默认对齐数🔎8.结构体…...
第14届蓝桥杯STEMA测评真题剖析-2023年3月12日Scratch编程初中级组
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第113讲。 蓝桥杯选拔赛现已更名为STEMA,即STEM 能力测试,是蓝桥杯大赛组委会与美国普林斯顿多…...
程序员接私活一定要知道的事情,我走的弯路你们都别走了
文章目录前言一、程序员私活的种类1.兼职职位众包2.自由职业者驻场3.项目整包二、这3种私活可以接1.有熟人2.七分熟的项目3.需求明确的项目三、这3种私活不要接1.主动找上门的中介单2.一味强调项目简单好做3.外行人给你拉的项目四、接单的渠道1.线下渠道2.线上渠道3.比较靠谱的…...
十二届蓝桥杯省赛c++(下)
1、 拿到题目一定要读懂题意,不要看到这题目就上来模拟什么闰年,一月的天数啥的。这个题目问你当天的时间,就说明年月日跟你都没关系,直接无视就好了。 #include <iostream> #include <cstring> #include <algori…...
数据结构与算法——堆的基本存储
目录 一、概念及其介绍 二、适用说明 三、结构图示 四、Java 实例代码 五.堆和栈的区别 一、概念及其介绍 堆(Heap)是计算机科学中一类特殊的数据结构的统称。 堆通常是一个可以被看做一棵完全二叉树的数组对象。 堆满足下列性质: 堆中某个节点的值总是不大…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
