1. 引言

之前每次听到有人说自己的TeamViewer账号被莫名奇妙的鉴定为商用,连接受限制的时候,我都会说一句:“我的账号用了这么长时间了,怎么一点问题都没有?” 。然而,在我假期了频繁使用并且用远程传递了一个接近1G的文件之后:
呵呵,垃圾!!!

虽然这个貌似可以通过修改MAC地址然后重装软件来解决,不过我也懒得去试了,实在是摸不准它的商用鉴定规则,谁知道今后会不会又莫名奇妙的被限制哪。并且使用的时间长了我也发现了很多让我不能忍受的bug,所以我就干净利落的删掉了我的所有电脑上的TeamViewer!
但是,作为一个非常懒的重度远程用户,不在实验室的时候没有点什么来控制实验室的电脑总感觉不舒服。并且,电脑上跑算例的时候不实时看着的话也很不踏实。既然这个渠道得收费了,那我就去寻一条免费的方式,然后我就开始了接近一周的“瞎折腾”。从目前的结果来看基本上已经满足我的需求了,所以我就把我折腾出来的方法记录一下,有需要的可以自取。另外,本人并非专业人士,下面的内容都是根据我的经验和所学到的总结出来的,如有错误的地方,欢迎指正!!

2.方法

说一下我的手头的电脑资源,一般我会随身携带一个Windows系统的小surface,然后在我的实验室有两台Ubuntu 16.04系统的台式机:一台普通PC机,只有我一个用户使用;一台工作站,这个是多用户的。我所希望的就是用我的surface去远程控制Ubuntu的台式机。具体的需求有如下两点:

  • 可以控制正在运行的程序,最好是有界面的,因为需要查看运行结果
  • 可以进行远程文件的传输

需求提完了,该怎么解决哪?然后我就“折腾”了如下的几个方式:

2.1 SSH

这个是我感觉无论是安装还是使用起来都是最省事的一种方式,具体的操作如下:
在Ubuntu端安装SSH服务(如果你没有安装过的话):

sudo apt-get install openssh-server

然后开启SSH服务:

sudo service ssh start

将其设置为开机启动,利用如下命令打开/etc/rc.local文件(不习惯使用vim的话可以将它换位你用的顺手的编辑器):

sudo vim /etc/rc.local

在打开文件的exit 0语句前加入:/etc/init.d/ssh start, 然后保存退出即可。
然后,在Windows可以选择安装的软件有很多,我所选择的是Putty(用于远程控制)和WinSCP(用于远程文件传输),点击软件名称即可跳转到下载界面。具体的安装过程我就不说了,安装完成后是这个样子的:


`
要想利用这两个软件进行远程控制及文件传输需要再Putty登陆界面Host Name栏和WinSCP的主机名一栏输入被控电脑的ip地址,至于这个ip地址如何获得,接下来会说明,现在只需知道这两个地方需要输入ip即可。界面里面的端口号暂时不需要改动,SSH服务默认的端口号即为22。在WinSPC界面中需要输入被控电脑的用户名和密码,点击连接即可。Putty的也需要输入用户名和密码,只不过是在连接之后的终端里面输入。连接成功之后如下图所示:


Putty打开的是一个终端,在这里面就可以输入linux的命令控制程序的运行了。WinSCP的界面就和TeamViewer的文件传输界面很像了,可以方便的进行远程文件传输。哦,对了,在登陆了WinSPC之后按Ctrl+p就可以直接打开Putty终端了。
这样一来,远程控制的基本功能算是满足了。但是,有些人可能不习惯单纯的命令行操作,没有界面的话总是感觉不舒服。并且在查看计算结果的时候也需要界面来打开paraView之类的软件。如果想和TeamViewer一样用界面操作可以参考接下来的方法。

2.2 VNC

VNC (Virtual Network Console)是虚拟网络控制台的缩写,它由客户端和服务端组成。简单而言,所谓客户端就是你安装在Windows里面用于远程控制的软件,而服务端就是在Ubuntu系统里面安装的VNC服务。
比较常用的VNC服务主要包括x11vnc和Tigervnc等,但是Tigervnc我配置了很时间也没配置好,有兴趣的同学可以参考:TigerVNC。而x11vnc的安装和配置就简单很多了,它可以返回真是的X信号,也就是说和TeamViewer一样,你通过客户端的访问操作在被控端的屏幕上都可以显示出来。
具体的安装配置过程如下:
安装x11vnc服务

sudo apt-get install x11vnc -y

设置访问密码,并存储于/etc/x11vnc.pass,中间过程会要求输入两次密码,并且询问是否存储。

sudo x11vnc -storepasswd /etc/x11vnc.pass

创建x11vnc服务

sudo vim /lib/systemd/system/x11vnc.service

将如下内容粘贴进打开的文件中,保存

Description=x11vnc service
After=multi-user.target[Service]
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -forever -loop -auth guess -rfbauth /etc/x11vnc.pass -rfbport 5901 -shared
ExecStop=/usr/bin/killall x11vnc[Install]
WantedBy=multi-user.target

注意-rfbport 5901为你进行连接的端口号,这个很重要!!! 然后配置防火墙并开启服务

sudo ufw allow 5901
sudo systemctl daemon-reload
sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service

重启电脑之后,打开终端输入如下命令查看x11vnc是否在运行

ps -ef | grep x11vnc

正常运行时显示结果如下

至此,linux端x11vnc服务配置完成。为了进行远程连接,需要在Windows端安装VNC客户端,这个同样有很多可以选,我所选用的客户端为TightVNC。安装完成之后打开客户端,在Remote Host一栏中输入被控端的IP地址::端口号连接,注意是两个冒号。

连接的过程中会要求你输入你在-storepasswd设置的连接密码,验证成功后即可看到被控端的屏幕啦!并且操作的过程中几乎很少卡顿,非常流程。


你可能会觉得这个屏幕看起来有些怪异,这是因为我的电脑有两块屏幕,一个横屏一个竖屏,它把两个屏幕都显示在了一个界面里面,不像TeamViewer一样可以分开显示两个屏幕。不过不要紧,想看哪一个屏幕的话可以点哪个放大镜+将这个屏幕放大就行。相比而言TeamViewer所显示的的屏幕好像就不能放大,我每次切换到竖屏上的时候就把竖屏压缩到了我的小surface屏幕上去,那真是瞅个字老费劲了。。。。
这个TightVNC配合上x11vnc貌似也可以进行文件传输,就在放大镜+按钮的左边就有一个文件传输按钮,但是我不知道为啥它老是灰色的,尝试过配置文件传输但是一直没成功,所以我就放弃了,还是老老实实的用SSH吧。
好了,如果你的电脑是只有你一个人在用的,也就是说只有和我的普通PC机一样里面只有一个账户,那么ok,这种方法的连接简直完美,可以说几乎不比TeamViewer差。但是,如果说你的电脑是和我的工作站一样,有很多人在用,每个人都有一个登陆账户的话,假设你开机之后通过x11vnc连接成功了,如果一旦工作站发生自动锁屏或者别人切换了用户之后,这样你就会来到如下的用户登陆界面
在这个界面的情况下,你再次使用x11vnc连接,那么你连接成功后的显示界面为
一片黑!!!点击鼠标键盘什么的被控端都不会有任何反应,除非你通过SSH连接上之后用命令行来重启电脑才行。不过,开什么玩笑,正在跑着程序的电脑怎么能随意重启哪。。。。。所以,对于存在多用户的电脑来说,这样的连接是由bug的,我尝试了多办法都没能解决,这个的具体原因我也没搞太清楚,不知道是不是我的参数配置不全面的原因还是这个x11vnc只支持对一个用户的访问。所以对于这种存在多个用户的电脑可以通过下面的方式实现对桌面的远程访问。

2.3RDP

RDP就是远程桌面协议,大部分Windows都默认支持此协议,可以远程接入操作桌面。在Linux端需要安装xrdp协议:

sudo apt-get install xrdp

在安装的过程中会默认安装vnc4service等vncservice,xrdp启动之后,系统会自动启动一个VNC会话进程监听服务。
不过这样完成后是不能进行远程访问的,这是因为xrdp在13.10之后版本就已经不支持的Gnome桌面了和原生Unity桌面,所以你还需要安装一个第三方桌面,我使用的是xfce4。还可以安装mate桌面来实现访问,并且mate桌面还支持同时对不同的用户访问,而使用xfce4只能一次登陆一个用户。我不用mate桌面的主要原因是,我感觉它太丑了,一点也不圆润。。。。具体的mate桌面安装详见教程。对于xfce4可采用如下方式安装:

sudo apt-get install xubuntu-desktop

然后配置xrdp:`

echo xfce4-session >~/.xsession

并且设置配置文件:

sudo gedit /etc/xrdp/startwm.sh

在打开文件中的在. /etc/X11/Xsession 前一行插入:xfce4-session,保存退出。重启xrdp协议即可:

sudo service xrdp restart

在Windows端采用mstsc来开启远程连接,啥是mstsc,其实就是远程桌面连接,在应用程序搜索里面输入这几个字就能找到,它大概张这样:

在计算机这一栏输入ip地址点击连接就可以了。然后会打开如下窗口

第一栏选用默认模式即可,第二栏输入你所想要登陆用户的用户名,最后一栏为你的用户名所对应的密码。点击ok,连接成功之后的界面如下所示:

看到这个如你可能会有疑问,不对呀,这不是我电脑上的ubuntu桌面呀!是的,这个是xfce4的桌面,有点苹果电脑桌面的感觉。不但桌面显示不一样,而且你再远程桌面上的任何操作都不会在你的被控端电脑上显示出来。所以这就是一个独立的桌面,和x11vnc不一样,并不是真实的实时显示。但是至少可以在这个界面上操作那些需要图形操作的软件。
鱼和熊掌不可兼得,如果你想问有没有既可以兼容多用户又可以显示实时桌面的方式,抱歉,我没找到,如果有请告诉我。

3.IP

ok,前面介绍完了远程连接的方式,但是如果要真的想实现远程连接那么有一个东西是必不可少的,那就是你所要连接电脑的ip地址是什么。这个应该怎么获得那,对于Linux系统来说,可在终端输入如下命令:

ifconfig

得到如下的结果,找到除了lo之外的哪个网卡的inlet后面有数值,这个值就是你电脑的ip地址(图中红框)

如果采用的是静态ip联网,并且只需要控制一台电脑的话,那么ok,只需要记住这个ip就可以了,以后到哪里连接都输入这个ip就行,下面的内容也都不需要再看了。但是对于我们的校园网而言就有另外一个问题了。去年,我们实验室的网络终于从整个实验室共用一个路由器的情况改成了现在的每个人用自己的账号进行拨号上网,这样的好处就是网速得到了巨大的提升,然而不好的地方就是,拨号上网的ip并不是固定的,校园网隔一段时间就会重新拨号一次,这样一来ip就变了,可能你这一次用这个ip连接的好好的,隔了一段时间在想用这个ip连接的话就练接不上了。这样一来就很尴尬了,为了远程连接你需要知道ip,但是你的ip只能在你连接上了之后才能查到,死循环…
怎么才能让你的ip不变那,然后我就测试了另外一个办法:连接路由器。先用路由器连接网络,然后把电脑连接到路由器上,然后通过路由器的静态ip分配将两台电脑的MAC地址于ip绑定,这样电脑的ip就再也不会变了(我连接的是小米路由器,不同的路由器应该都有这个功能的)

搞定之后,我就去拿这ip尝试了远程连接,结果发现根本连不上!!!!!
这个时候我意识到了我犯了一个多么213的错误,远程连接所需要的ip是你接入互联网的公网ip,而这个ip是这个局域网的ip,远程连接根本找不到这个ip,所以咋连…
那么这个时候的公网ip到底是什么呀,其实公网ip就是你路由器联网的ip,这个可以在路由器设置界面查到

打开这个界面你就会找到公网ip是多少,但是这个界面上显示的不还是通过PPPoE的拨号上网嘛,所以这个ip也是会变得呀,那么这样折腾连个路由器有什么意义那?别急,虽然它会变但是并不代表我们无法得知这个ip到底是多少。有人说可以通过路由器得DDNS的功能,然后通过花生壳来绑定域名,就可以通过域名来直接访问了。这方面的教程如有兴趣请自行搜索,反正我是尝试了一下没有成功,貌似还要花点钱啥的。那么除了这种方法还能怎么搞那?其实现在的路由器也都很智能了,各大厂商的路由器也都有响应配套的手机app,只要app绑定了你的路由器之后,这个路由器的所有联网信息都可以通过app查得到,比如小米wifi里面就可以看的到我的路由器信息

这样ip的问题就搞定了!!!!然后就可以尝试先用手机app查询到ip之后,再用上述的方法进行连接了,这样当你采用vnc的方式在客户端输入ip::5901或者采用xrdp方式在远程桌面里面输入ip地址进行远程连接的时候,你就会发现还是连不上!!!!!感觉要崩溃…
这是因为这个时候你所输入的ip是路由器的ip呀,那么远程连接的时候访问它的5901端口口啥的没什么意义呀,当然连不上了,我们所需要访问的是所连接电脑的端口,这个时候就要用到路由器的另外一个功能了:端口转发。端口转发的意思就是将路由器的端口映射到你电脑上的某个端口,当你访问路由的这个端口是将自动转接到电脑上面对应的端口。
就像上面的这个图一样,我把路由器外部端口中5901和5902分别映射到了我的两台电脑上的5901端口上面,对于ssh协议的22端口同样做如此映射,最后的3389端口所对应的为xrdp的默认连接端口。经过这样的设置之后我如果通过ssh的方式访问将Putty或者WinSCP的端口号改为23将会访问我的普通PC机,端口号改为34将会访问工作站;同理若采用vnc的方式连接输入ip::端口号,5901访问PC机器,5902访问工作站。对于xrdp来说,需要在mstsc的计算机窗口中输入ip:3389(注意,只有一个冒号)即可通过xrdp来访问工作站。
至此,所有设置完成,这次是真的完成了!!!

4.总结

终于要结束了,可累死我了。以上设置我都在Ubuntu里面测试成功了,但是对于其他Linux系统是否有效还有待验证。对于Windows系统之间的远程操作我也没尝试,因为我手中没有两台Windows的电脑,不过在安装TightVNC的时候我发现除了安装了客户端,同样也安装了TightVNC Service,至于能否可行有兴趣的话可以去尝试一下。另外,在声明一遍本人并非专业,这么瞎折腾完全因为兴趣爱好,若有错误,敬请指出,本人将不慎感激!!!

参考

https://www.cnblogs.com/platero/p/4123720.html
https://blog.csdn.net/longhr/article/details/51657610
https://www.linuxidc.com/Linux/2017-09/147112.htm
https://blog.csdn.net/u011054333/article/details/79905102
http://c-nergy.be/blog/?p=8952

(100%纯手打,未经允许 请勿转载)

TeamViewer挂了?用这几种方式依然可以实现Windows远程连接Linux相关推荐

  1. VisualVM远程连接Linux服务器通过jstatd方式监控JVM内存状态

    2019独角兽企业重金招聘Python工程师标准>>> VisualVM远程连接Linux监控JVM的方式有两种,一种是jstatd,另外一种是JMX,这里描述jstatd的方式: ...

  2. Windows远程连接电脑宿主机,管理服务器的几种快捷方式。

    Windows远程连接虚拟机(服务器)可远程通过Xshell 或者SecureFX 远程重启服务器,方便快捷. 一般的公司小公司 都会存在这样的问题,将开发或者测试的线下环境布置在小型机箱上面,这样服 ...

  3. windows远程连接Ubuntu16.04桌面版,有界面链接和无界面链接两种方式

    0.开放端口 Ubuntu自带一个ufw防火墙, 使用sudo ufw enable 启用防火墙, 然后开放5900和22端口 sudo ufw allow 22 sudo ufw allow 590 ...

  4. mybatis实现一对多有几种方式_两件塑胶件连接,有哪几种方式实现?

    出于工艺或结构考虑,很多的塑料产品或塑胶部件可能是由不同材料.不同功能的零部件组装而成,两个零件要组装在一起就需要在它们之间设计连接,连接设计的目的就是要根据各种因素设计一种最适宜的连接方法,将零部件 ...

  5. oracle--day2(单值函数(字符函数,日期函数,转换函数,数字函数),日期格式(yyyy,mm等含义),表示一个日期数据的4种方式,多表查询(连接查询(等值连接,不等值连接,外连接,自连接))

    第三章:单值函数     函数分为:       1.单值函数           1.字符函数           2.日期函数           3.转换函数           4.数字函数 ...

  6. Android10下wifi连接的两种方式:点对点连接和外网连接

    因为Android下的API总是在变,权限越来越少.导致出现的问题层出不穷,所以我们只好按照官方手册去开发了. 在看了手册后,我们知道连接网络有两种: 1.点对点连接,意思就是我们直接去连接自己指定的 ...

  7. android手机连接windows,四种方式将数据从Windows手机免费传输到Android设备

    解决方案3.使用OneDrive将内容从Windows Phone传输到Android 微软的智能手机操作系统可能不如Android或iOS那么受欢迎.但是,微软的一些应用确实令人印象深刻!微软的On ...

  8. windows 远程连接debian_UOS统一操作系统远程协助软件TeamViewer

    想要在UOS统一操作系统上给人远程,或者让别人远程控制你的电脑,QQ不支持,那么我们可以使用TeamViewer这款软件. UOS国产操作系统(Deepin V20)应用商店也上线了 TeamView ...

  9. java远程连接linux并发送命令,两种方案比较Jsch与ganymed-ssh2

    通过Jsch连接 step 1引入jar包 exclude掉 servlet-api ,不然会和boot自带的 servlet版本冲突 <!-- jcraft包 --> <depen ...

最新文章

  1. electron 改变窗体 大小_8个瑜伽常见体式变体,小改变,大不同!
  2. 【Java】基数排序
  3. JDBC学习(九、连接池技术)
  4. intersection-over-union(IoU: 交并比)
  5. Delphi利用字符串序列号对象
  6. Raid5 Raid10 磁盘IOPS 计算方法
  7. Java全栈(前端+后端)工程师学习路线
  8. 如何把用Word文档转换成PNG图片
  9. 全国24省50万亿元投资在路上:后疫情时代碰撞新基建,AI难再“一招鲜”
  10. 无为而无不为——论老子哲学的深度悖论(转载)
  11. Ubuntu 18安装搜狗拼音
  12. Python案例1—人民币与美元的汇率兑换V_8.0
  13. 机器学习中的L1和L2正则化项
  14. iOS/Android 纪念模式(黑白灰模式) 记录
  15. bat实现 自动循环打开谷歌浏览器自动访问网站关闭浏览器功能
  16. 时间复杂度O(1),O(n),O(logn),O(nlogn)的意思
  17. linux图形图像驱动,Linux_Linux操作系统下USB图像采集驱动的安装,ARMlinux下USB摄像头图像的采集 - phpStudy...
  18. Android冷启动白屏解析,带你一步步分析和解决问题
  19. tkinter动态表格 - 实时更新数据(TkinterTable)
  20. 笔记连载 | Day7 【半加器、全加器、16位加法器、16位减法器设计】 【原理及verilog实现、仿真】篇

热门文章

  1. python爬虫爬取图片的简单步骤和实现代码
  2. 模态振型的一些概念解释
  3. 乔布斯经典演讲:《Stay Hungry Stay Foolish》主要讲了什么?对我们有什么启示?
  4. 线性代数-01矩阵与行列式
  5. 第二章:IEEE2030.5官网相关资料介绍
  6. 华为云计算机总裁,华为云与计算BG人事调整 余承东兼任总裁
  7. C语言基本变量语法输出和输入方法
  8. 关于斐波那契数列那些事儿~
  9. 图解MySQL数据库的安插和独霸-2
  10. SecureCRT和SecureFX用法