在所有 Windows 的版本中都包含一个用于连接到远程桌面的实用软件,即远程桌面连接 (mstsc.exe),有了它,我们就可以基于一台计算机,很方便地远程操作多台计算机。

不得不说,Windows 远程桌面连接程序提供了非常好的连接体验。但昨天我在 Ctrl + Alt + 左右方向键的问题上遇到了麻烦,由于我使用的多个软件都使用这些组合键,我也习惯了有它们的生活,因此这是个必须解决的问题。解决方法在本文结尾的叙述中。


令人迷惑的快捷键

最近,我希望能够远程连接到一台电脑上做一些代码工作。我打开了远程桌面连接软件,并成功地连接到开发机,正当我为远程桌面连接提供的绝妙体验而惊叹不已时,发现 IDE 里一些快捷键无法使用。我尝试寻找问题,借助鼠标打开“选项”设置对话框,尝试重新绑定快捷键时,发现键盘上的 Ctrl + 左Alt + 左右方向键 不起作用;但 右Alt + 左右方向键 却能够在远程电脑上触发 Ctrl + Alt + 左右方向键 的效果。真是神奇!

我又回到本地机器,确定了键盘左边 Ctrl + Alt + 左右方向键的组合键是能够正常工作的。找了一下电脑里可以设置键盘的地方,除了“轻松访问”,就只有一处键盘设置了,里面的设置项并不涉及键位调整。这倒使我想到了输入法“键盘布局”,又反复修改了键盘布局,并没有帮助。

于是问题回到远程桌面连接软件了:远程桌面连接软件为了提高交互体验,会提供一些自己的快捷键。比如使用 Ctrl + Alt + Break 来切换远程桌面的全屏模式。在 MSDN 网站上有一份远程桌面连接程序快捷键列表,其中并不包含有关 Ctrl + Alt 与左右方向键的快捷键;不过在另一份帮助问答中却列了出来赫然写着 Ctrl + Alt + 左右方向键用于“可以从远程桌面控件跳转到主机程序中的控件(如按钮或文本框)”,还注解说“将远程桌面控件嵌入到其他(主机)程序后,此功能非常有用”。

读到这个我有一丝无语的感觉——毕竟,当远程桌面程序作为控件嵌入其他程序之后,快捷键的设置难道不应该由那个程序的开发者自己确定么?我顿时有了一种不祥的预感。


尝试解决快捷键问题

我尝试寻找一些方法来禁用 mstsc 送来的这份快捷键厚礼。一番探索和搜索之后,失望而归。mstsc 除了提供了一个用于设置“Windows 组合键”,即日常计算机中的全局快键键(如 Alt + Tab、Windows + R)之外,并没有提供其他设置。也没有找到能够设置 mstsc 内置快捷键的注册表项。

我考虑了使用那些优秀的增强软件来替代 mstsc。这些软件主要增强了同时管理多台远程计算机的支持,比如 Remote Desktop Connection ManagerRemote Desktop Organizer 或 RoyalTS 等。它们的工作方式几乎都是将 mstsc 作为连接控件,而它们自身则提供管理多个连接和配置的功能。如我所料,使用它们连接到远程电脑时,也不能使用 Ctrl + Alt + 左右快捷键。而且,这些软件大多并没有很好地利用 Ctrl + Alt + 左右方向键这对快捷键;当然它们也并没有提供其他用于提高体验的快捷键。

可以说这个结果是令人沮丧的,这种如鲠在喉的感觉真是糟糕。

Mstsc 的完美的替代品 FreeRDP

上面那些远程连接增强软件使我想到了各种国产浏览器为 IE 做界面的行事风格,真是如出一辙。所以,我很快想到,有没有可能找到一种第三方软件,也能够用于远程连接的呢?第三方远程连接软件倒是不少,TeamViewer 早就名声在外了。除了 TeamViewer,还包含 Chrome Remote Desktop、2X RAS 和 NoMachine 等,这类软件的共同特点就是需要在远程机器上安装它们的服务程序。除非完全没有其他办法,这几乎是我不能接受的——因为它们带来了额外的负担,却并没有实际地提高体验。

有没有独立地兼容 RDP 协议的第三方内核程序呢?有,不但有,它还是一个 Portable 应用程序,也就是以前我们所说的“绿色版”,不用安装、直接运行。它正是 FreeRDP,是一个由大量开发人员维护、主要用于在 Linux 上连接 Windows 远程桌面会话的跨平台开源软件。虽然官方并没有发布 Windows 的预编译版本,但从其 CI 服务器中可下载到可执行程序。经过测试,发现由 CloudBase 编译的这个版本还是比较稳定的,使用一个命令就可以连接到远程服务器:

.</span>wfreerdp.exe /port:3389 /v:192.168.1.101 /f /clipboard /fonts

我没有找到 FreeRDP 的快捷键文档,只有人讨论过能够使用 Ctrl + Alt + Enter 切换全屏的话题,但我测试了一下,并不能用。于是,我暂时得出结论,快捷键问题终于得到解决了!现在,由于默认会启用 -grab-keyboard 参数,除了 Ctrl + Alt + Delete 能够切换到外边的主机,包括 Windows 键的其他键都会默认在远程会话中被捕获。

如果你正在被 mstsc 的其他快捷键困扰,那么你也可以 FreeRDP 带来的纯净体验。进一步了解发现,FreeRDP 其实还针对 Hyper-V 虚拟做了一些专门的支持,还有人提供了 PowerShell 包装,甚至是 WebConnect 服务等,都值得了解。