Mac、Linux、Windows远程桌面工具推荐

前言

在工作和生活中,我们经常要通过远程桌面来操作计算机,由于网络环境、计算机类型等各种原因,很难有一种工具包打天下,所以就有了这篇梳理不同操作系统远程桌面工具的文章。

基本场景

首先在这里,我们只考虑远程桌面连接,也就是服务端是桌面,所以SSH、telnet等不在本文讨论范围内。对于一个典型的远程桌面连接而言——本地(客户端)->网络->远程(服务端)——影响建立远程连接或者更准确地说,影响我们选择远程桌面工具的因素,大致包括以下几条:

  • 客户端操作系统
  • 服务器端操作系统
  • 客户端与服务器端的网络:
    • 是否位于同一子网内
    • 服务器端是否具有公网IP

所以在最复杂的情况下可能存在3×3×3=273 \times 3 \times 3 = 27种情况,当然实际并没有这么多种情景。

一劳永逸——RMB玩家的玩法

对于时间宝贵、追求生产效率的朋友来说,我觉得也不需要看后续的内容,只要选择TeamViewer或者向日葵远程。两个软件都提供功能受限的免费版,支持多种平台(Win/Mac/Linux/iOS/Android)可以升级为付费用户,这样就省却了其他的烦扰。类似的还有Paralles、Nomachine,其实商用软件还是很多的:

FreeRemoteConnection-CompareTable-Devolutions-Updated

然而,对于大多数人来说,可能没有迫切的需要或者花大钱的习惯,那就还是得自己动手折腾,这也就是接下来要分享的。

协议篇

”协议“在前面的内容里似乎压根儿没有提到,这里凭空冒出来让人有些摸不着头脑。实际上,协议说白了,就是双方通信约定的一套格式。在远程桌面方面,除了商用软件的特殊协议外,常用的协议有两种:一种是VNC(Virtual Network Computing),另一种是RDP(Remote Desktop Protocol)。

VNC协议是开源的,在VNC的基础上派生出了RealVNC、TightVNC、UltraVNC等,Mac OS的屏幕共享,也是基于VNC实现的,不妨称之为Apple VNC。

与VNC协议不同,RDP协议是封闭的,属于Windows系统专有的远程桌面协议。从性能上相比,VNC协议的功能相对简单、性能相对较差,而RDP协议的流畅度、稳定性和功能丰富程度明显要更有优势。

RDP协议这么好,因此也就有了其开源实现,其中最出名的是FreeRDP协议,Linux系统常见的Remmina客户端就是基于FreeRDP开发的。

除了一些私有的传输协议以外,NoMachine公司研发的NX协议也进行了开源(4.0版本之前),并由此发展出相应的衍生版本。

简单总结一下:

  • Windows下的远程桌面原生采用RDP协议
  • MacOS下的远程桌面原生采用VNC协议
  • Linux下没有原生的远程桌面协议
  • 协议的实现可以是跨平台的

服务器端

所谓的服务器端,也就是建立远程连接时的“远端”,也就是被连接的对象。Windows和macOS内都有自带的服务器端实现,但是默认是关闭远程功能的,而Linux桌面一般需要单独进行安装。

Windows

Windows自带的远程桌面的开启非常简单:以Windows 10为例,只需要在"设置>远程桌面"下选择“使用远程桌面”即可。需要注意的是,Windows的家庭版或者基础版可能没有这个功能。

image-20210210174020594

MacOS

与Windows类似,MacOS也有自带的远程桌面服务,当然默认也是关闭的。如果希望开启的话,只需要在“系统偏好设置>共享”下面打开“远程登录”即可。

需要注意,MacOS的远程桌面用一般的VNC客户端是无法连接的。

image-20210211020040599

Linux

Linux的发行版有很多种,桌面环境也有很多种,因为我自己用Ubuntu多一些,这里就以Ubuntu为例介绍,仅供参考。

需要注意的是,既然是远程桌面,首先就得有“桌面环境”,如果是服务器版的Linux,往往是没有桌面环境的,需要手动安装,而且桌面环境也有不同类型,出于流畅性的考虑,推荐轻量级的桌面环境,例如在Ubuntu可以用 Xfce。

考虑到我们在“协议篇”里提到的协议,我们在这里介绍VNC和RDP两种服务端。

VNC服务端

开源软件就是好,VNC客户端也有很多种,例如TightVNC、TigerVNC等,VNC服务端我用的不多,就推荐TigerVNC ( https://tigervnc.org/ ) 吧。

TigerVNC的安装方法在网上可以找到很多,提供两篇文章链接仅供参考:

  1. https://xie.infoq.cn/article/cf473dc0dea917b0b2a546ecd
  2. https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-20-04

RDP服务端

相比VNC,Linux下的RDP服务端,就没有太多可选的了——就xrdp吧( http://xrdp.org/ )。但是,xrdp的安装配置有些麻烦,我照着教程做,有时候成功,有时候不成功,也没弄明白原因,这里推荐xrdp一键安装脚本(适用于Ubuntu):

客户端

Windows

RDP客户端

Windows有自带的远程桌面客户端,支持RDP协议,用过的应该知道,就长下面这幅样子:

image-20210216232345660

没有用过的也不用担心,只要在搜索里输入“远程桌面”或者使用命令“mstsc”就可以找到(如下图所示):

image-20210216232302857

VNC客户端

正常情况下,我们使用Windows是不太需要VNC客户端的,但是难免会有这种需求(比如连接Mac计算机时),这个时候就需要用的VNC的客户端,我用了一下感觉Real VNC的VNC Viewer还可以,推荐使用。另外,Real VNC也提供服务器端,但是是收费的,所以就不推荐了。

MacOS

VNC客户端

MacOS自带的客户端——屏幕共享支持VNC协议,找起来比较麻烦,位置如下图所示。一个比较简单的方法是直接在浏览器的地址栏里输入要连接的VNC服务端地址,格式如:vnc://ip地址:端口号 ,就会自动打开屏幕共享的应用。

image-20210216233150249

RDP客户端

如果我们希望从Mac计算机远程Windows计算机的话,就需要另外安装客户端,推荐Microsoft官方提供的Microsoft Remote Desktop。用这个App有一个小小的问题:APP在中国市场无法找到。因此,要么使用其他国家或地区的账号(例如美国),要么从APP Store以外的地方下载,推荐从微软官方下载Beta版App,具体参考: https://www.maczd.com/post/microsoft-remote-desktop-mac.html

image-20210217013326418

Linux

多协议客户端

以Ubuntu为例,自带的远程桌面客户端为Remmina(https://remmina.org/ ),支持RDP、VNC、NX等协议,推荐一般使用。

RDP客户端

如果只是希望连接RDP服务端,同时有一些特殊的需求,例如支持多显示器等,Remmina可能不能实现,这时候推荐使用FreeRDP (https://www.freerdp.com/ )。需要注意的是FreeRDP并没有图形界面,另外关于命令的一些参数也比较晦涩,提供一些资料供参考:
https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown

VNC客户端

VNC客户端可选较多,可以用TigerVNC的客户端,也可以使用RealVNC的客户端。

专用软件

专门用于远程联机的软件很多,这里只推荐一款——NoMachine (https://www.nomachine.com/ ),总体体验稳定、流畅、免费、但是画面有些模糊,应该与协议的压缩有关。需要注意的是,在用Nomachine连接服务器端时,要保证服务器端的NoMachine软件正在运行。

如果有其他免费的体验较好的远程软件,也欢迎朋友们发掘推荐。

image-20210217014556730

总结

简单画一个表,作为总结:

Windows MacOS Linux(以Ubuntu为例)
服务器端 系统自带 系统自带 Xrdp
Windows-> 远程桌面连接 RealVNC Viewer 远程桌面连接
MacOs-> Microsoft Remote Desktop 屏幕共享 Microsoft Remote Desktop
Linux-> Remmina/Freerdp Remmina/Freerdp Remmina/Freerdp
跨平台 NoMachine NoMachine NoMachine

局限

需要注意的是,除了使用NoMachine、向日葵、TeamViewer等专用软件以外,进行远程桌面连接的一个必要条件是知道远端计算机的ip地址,在不考虑防火墙的情况下,处于同一个局域网的计算机一般是可以连通的,而公网中的计算机往往没有公网IP地址,即使有也可能是动态的,在这种情况下,需要借助其他的手段才能实现远程访问。有时间的话,我会在以后的文章里介绍一下公网实现远程访问的几种方法。

WechatIMG10407