远程桌面连接(mstsc)全攻略

2016-04-04 15:48:01 Windowsmstsc

打算从今天开始,写一写我经常用的,有长时间使用经验的东西,与大家分享,就从mstsc开始吧!

mstsc应该是在Windows中,除了calccmdnotepadmspaint,我使用率最高的系统软件了,它真的很好用。下面我们就来详细介绍一下mstsc

注意:由于本人没有用过Win8/Win8.1,因此本文基本上忽略了Win8。在本文中若没有特别说明使用的系统,则默认都是按Win10来操作。

开启计算机的远程桌面连接功能

打开系统属性,打开远程设置,选择“允许远程连接到此计算机”,但是不建议勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”,如果勾选则WinXP等系统则不能远程控制该计算机。Win7的选项有些不同,但其实是一个意思,建议选择“允许运行任意版本远程桌面的计算机连接”。

另外,上面的这个远程协助跟mstsc没关系,不用勾选。这个远程协助指的是msra这个命令。

想要计算机能被远程,需要开启Windows防火墙。需要注意的是,一定要在防火墙中给“远程桌面”设置允许通过。如果你设置只允许它在专用网络通过防火墙,则一定要注意计算机当前使用的网络是专用还是公用,如果是公用则需改为专用。不过最简单的还是允许它专用和公用都能通过。(Win7中的家庭和工作都属于专用)

注意:一定要关闭远程计算机的自动休眠功能!

运行mstsc

Win+R,运行mstsc。输入IP,点击连接,之后输入用户名和密码即可。可勾选保存凭据。

远程设置

分辨率、颜色质量、性能这些都很常用,下面说一些不是很常用的设置。

  • 在“显示”选项卡中,可以设置全屏显示时是否显示连接栏。如果设置不显示,那么在进入远程界面几秒后连接栏就会消失。想要调出连接栏以关闭远程,就得用快捷键。
  • 在“本地资源”选项卡中,可以设置远程计算机可以使用的本地资源。默认剪贴板是开启的,也就是说,远程计算机和本地计算机共享剪贴板,可以复制文字、文件等。另外还有一个容易被忽视的功能,点击详细信息,里面可以将驱动器映射到远程计算机,可以是硬盘,也可以是U盘。这样远程计算机就能直接访问本地设备了。

快捷键

  • CTRL+ALT+END: 可发送CTRL+ALT+DELETE到远程计算机。直接按CTRL+ALT+DELETE操作的是本地计算机。
  • CTRL+ALT+HOME: 如果设置了“全屏显示时不显示连接栏”,可用此快捷键调出连接栏以关闭远程。注意:Win7以下不支持。Win7以下设备可按下CTRL+ALT+DELETE,选择任务管理器,这样可以调出开始菜单,在任务栏中关闭,或者直接在任务管理器中关闭,也是可以的。

更多快捷键可以参考微软官方文档

另外,如果想全屏时最小化远程窗口,比较难,在这里有相关讨论,目前我还没有找到比较合适的解决方案。

修改端口

远程桌面连接默认使用3389端口,如果想修改默认的端口,需运行regedit进入注册表,修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcpHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TcpPortNumber键值即可。修改时要注意使用的是十进制还是十六进制方式。

修改端口后,在远程输入IP时,就要显式指定端口号,形如ip:port

若使用IPV6地址进行远程,IPV6地址必须使用中括号,例如[2001:da8:214:1086:747c:abcd:efgh:1c6a]:22。如果不修改端口,IPV6地址可以不加中括号。

WinXP的一些细节

  • 使用WinXP进行远程时,是进入远程计算机界面进行登录操作(类似进入系统前的登录界面),因此可以看到远程计算机有哪些用户,直接选择并输入密码即可,根本不需要我知道远程计算机用户名是多少。这也是后来的系统要给出“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”的选项的原因之一。
  • 也正是由于上面这一的原因,使用WinXP远程要想保存凭据,必须在远程前在“常规”选项卡中勾选“允许我保存凭据”,点击连接后,会弹框让你输入密码。为什么要这么做?因为直接远程过去的话,所有操作就已经在远程计算机上了,包括输入密码,也就没法保存密码了。
  • 由于WinXP的特殊性(安全性低),可能会存在其他系统无法远程某机器,但是WinXP可以的情况。如果出现这种情况,一定是远程计算机的安全设置出现了问题,可进一步排查。例如我今天遇到一个Win10电脑不能被远程,提示凭据无法工作的情况,用WinXP可以远程过去,其他系统都不行,最后发现是组策略某设置的问题,具体解决方法是运行gpedit.msc打开组策略,找到计算机配置->Windows设置->安全设置->本地策略->安全选项->网络访问:本地帐户的共享和安全模型,修改为经典模式即可。

Win8以后的Microsoft账户问题

由于Win8以后开始使用MS账户,由此产生了一些“无法远程”的问题。究其原因,是MS账户的域的问题。

如图所示,这是一台已登录MS账户的Win10计算机,想远程某个Win7机器时,域被自动设置成了MicrosoftAccount,此时输入用户名密码后,会提示凭据无法工作。这是因为远程计算机本地账户的域不是MicrosoftAccount,因此需要显式指定计算机的域。

以远程我的计算机为例,我的计算机名是fz-DESKTOP,工作组为WORKGROUP,用户名为fz。在一台登录了MS账户的计算机上远程我的计算机时,用户名输入fz-DESKTOP\fz或者WORKGROUP\fz就可以正常远程了。

另外,如果远程一台登录了MS账户的计算机,使用本地账户和MS账户都可以,只是可能需要使用相应的域。

UPDATE: 似乎新版本的Win10 10586已经解决了此问题,即使使用MicrosoftAccount域也可以登录本地账户。Win8不太清楚。

不能用mstsc进行的工作

其实绝大多数情况使用mstsc都没什么问题,有一种情况肯定是不行的,那就是对显示要求高的程序,例如看视频。

其实我们想一想就可以知道,网络带宽根本不足以支撑正常的显示数据传输,所以MS做了一些优化,让我们远程起来不是那么卡。而看视频的话,这种优化就没用了,因为看视频需要很高的帧数。

另外音频传输会有一定延迟,但是我还没搞清楚为什么,理论上应该是可以做到无延迟的(或延迟很低)。

多用户远程

对于MS来说,多用户同时远程一台计算机在技术上并不是难事,不过似乎MS只提供给了Server版这样的功能,普通的系统要手动修改系统文件的。

其实一般是用不到这个功能的,有需要或者有兴趣的话可以搜索“Windows 多用户远程”。

Linux远程Windows

上面说的都是Win远程Win的情况,有时候我们也会需要在其他系统上远程Win。

在Linux中,可以使用rdesktop这个软件。

以Ubuntu为例,执行sudo apt-get install rdesktop安装。给出一个常用的命令格式:

rdesktop -a 16 -u [username] -p [password] -f -r disk:name=/home/fz -r clipboard:PRIMARYCLIPBOARD -r sound:local [ipaddress]
  • -a 16: 使用16位色。
  • -u username: 指定用户名为username。
  • -p password: 指定密码为password。
  • -f: 全屏模式。
  • -r disk:name=/home/fz: 将本地路径/home/fz映射到远程计算机中,并起名为name,使其可被远程计算机访问。
  • -r clipboard:PRIMARYCLIPBOARD: 共享剪贴板,但不支持文件操作。(实际使用中这个共享剪贴板经常出问题)
  • -r sound:local: 映射远程计算机声音到本地。

可以按CTRL+ALT+ENTER进行全屏/窗口模式切换。想要退出远程,也只能先切换到窗口模式再退出。

若需指定分辨率,可以把-f换成-g [resolution],例如-g 1920x1080

若不指定用户名和密码,则会进入远程计算机的登录界面(类似WinXP),但是不能像WinXP一样显示出远程计算机的用户名。

想要让远程计算机执行CTRL+ALT+DELETE,直接执行即可(它在Linux中不是系统快捷键)。

更多设置可以man rdesktop来查看。

另外,Ubuntu自带一个Remmina的远程软件,直接执行即可打开。它支持mstsc的RDP协议,也支持SSH、SFTP等等。

Android远程Windows

下载安装Microsoft Remote Desktop

用起来很简单,效果如下:

OS X远程Windows

虽然我并没有用过OS X,不过风刃同学反映他的远程软件想要远程Win10,必须修改远程计算机的组策略,我对此表示怀疑,后来发现他用的是2010年的旧版,而新版Microsoft Remote Desktop只在美区的App Store可以找到,国区没有。所以使用美区账号下载即可,链接在此。这个是一直在更新的,上个月底刚更新过。

另外,OS X用linux的rdesktop也可以的,我让junshi同学测试了一下,执行brew install rdesktop安装,中间会提示需要安装一些库,按提示装好即可。

也可以在github,下载release,可参考README安装。(不过这个我没测试)

2018-04-04 UPDATE: 风刃同学告诉我App Store的Microsoft Remote Desktop已经不更新了,现在在Mac上使用RDP最好的方法是brew cask install microsoft-remote-desktop-beta,这种方法还不需要appleid。

PPPoE用户获取IP

如果是想远程家里的电脑,而家里的电脑使用的是PPPoE拨号的话,每次自动获取的IP是随机分配的。想要远程就必须知道电脑的IP是多少。

获取IP的访问有很多,如果你有一个公网服务器的话,这事就简单了。

我的处理方法是让该电脑每1小时访问一次服务器的某个网页,该网页用PHP的$_SERVER['REMOTE_ADDR']得到访问者IP,并记录下来,通过访问服务器就可以得到家里电脑的IP了。

非公网IP、非固定IP的一些方案

如果你是非固定IP,则情况类似PPPoE,可以用上面的方法解决。但如果你没有公网IP,更准确地说是你没有可以直连的IP,那又怎么办呢?

你可以使用VPN达到这一目的。同样地,你需要一台可以直连IP的服务器,装一些VPN软件,让两台机器同时连上VPN,使用你设置好的该VPN分配的内网IP就可以进行远程了。

**2018-08-09 UPDATE: 也可以使用frp这种内网穿透软件。

感谢

感谢zwh、Isco、Archemiya、风刃、junshi参与测试!

如果长时间无法加载评论,请对 *.disqus.com 启用代理!