点击
搜索 / Search

上一篇文章里,我快速整理了一些有关新玩具的信息。文章里也提到这次折腾提供了不少水文章的素材,所以先拿出一个写写。但按理说 RemoteApp 并不是什么新鲜玩意儿,至少在企业中这种功能已经用烂了。而我们选择这种程序运行方式的原因是:一、有一台 24 小时在线的 Windows 主机;二、少在本地跑流氓软件,跑在 AIO 里也省得本地开虚拟机了。所以如果你有条件在家或者办公室里折腾,可以尝试一下这种玩法。

首先还得向不熟悉 RemoteApp 的读者介绍一下基本信息。RemoteApp 作为远程桌面服务的一部分,最初在 Windows Server 2008 中发布。RemoteApp 最大的特色就是在会话过程中只传输指定应用程序的数据,从而减少了远程桌面会话所需的带宽及性能开销。虽然微软说这东西只面向域环境下的 Server 系统进行配置部署,但借助一些第三方软件,普通用户也可在任意 Windows 版本中进行操作。通过创建 RDP 文件或 MSI 软件包,便可在网络上任何经过认证的终端上使用已部署的 RemoteApp 应用程序。这在某些情况下可以大幅降低应用程序分发部署及用户数据迁移的难度。用户可以得到近似本地应用程序的使用体验。总的来说有点大材小用了,但不代表个人用户不能用嘛。

在这篇文章的演示中,我使用两台分别运行着 Windows Server 2022 和 Windows 10 的主机,RemoteApp 被部署在 Server 系统上。两台主机均未加域。非域环境下部署 RemoteApp 有一点点麻烦,所以用第三方工具完成配置。终端这边没什么可说的,只要保证两台机器访问顺畅就可以。首先启用服务器上的远程桌面访问,这个应该是系统装完后的第一步。为了图省事,在演示及实际使用中,都是默认使用管理员账号登陆远程服务器,对于想照猫画虎的各位朋友可以自己考虑一下权限分配的问题。接下来下载 RemoteApp Tool 这个软件,解压后运行,你会看到如下界面:

RemoteApp Tool 主窗口

还请无视窗口中的两个软件。接下来点击左下角的绿色加号,在弹出的对话框中选择需要添加的软件。这里以记事本作为演示。添加之后在窗口中会增加新软件的图标(有的软件可能是默认 RDP 的图标)。

添加应用程序

添加应用后的窗口

然后是发布 RemoteApp。点击“Create Client Connection…”按钮,在弹出的对话框中进行发布前的配置。可供选择的项目并不多,首先看 Host 选项卡,这里是远程主机地址及端口设置,如果你之前修改了 RDS 端口,记得在这里也改一下。然后选 Options 选项卡,这里的两个复选框分别是让你在导出 RDP 文件后当即打开进行手动修改,以及创建图标文件。其实我们都用不到,手工改 RDP 文件配置我们一会儿再说,这里你看看就好。其他选项卡就没有需要设置的地方,我们直接点击“Create…”输出 RDP 文件。

导出 RDP 文件 1

导出 RDP 文件 2

将生成的 RDP 文件复制到 Windows 10 主机上,双击运行,和远程桌面连接一样会弹出确认对话框,点击“确定”后,一个运行在远程主机上的记事本就打开了。

运行在本地的 RemoteApp 应用

对于大多数软件来说,默认设置即可满足功能需求。但不意味着没有别的地方可以调整,让我们翻回头去看生成的 RDP 文件,用任一文本编辑器来打开它:

allow desktop composition:i:1
allow font smoothing:i:1
alternate full address:s:test-pc
alternate shell:s:rdpinit.exe
devicestoredirect:s:*
disableremoteappcapscheck:i:1
drivestoredirect:s:*
full address:s:test-pc
prompt for credentials on client:i:1
promptcredentialonce:i:0
redirectcomports:i:1
redirectdrives:i:1
remoteapplicationmode:i:1
remoteapplicationname:s:记事本
remoteapplicationprogram:s:||记事本
server port:i:12450
span monitors:i:1
use multimon:i:1

如果准备在远程主机上运行 QQ 之类的东西,我们可以增改这几条设置:

redirectdrives:i:0     //对应 MSRDC 中“本地资源”选项卡的配置,值 0 表示启动远程连接时不自动挂载本地驱动器
devicestoredirect:s:   //留空表示不重定向任何即插即用设备
drivestoredirect:s:    //留空表示不重定向任何本地驱动器
audiocapturemode:i:1   //值 1 表示重定向本地麦克风至远程主机
audiomode:i:0          //表示在本地播放远程主机上的音频
camerastoredirect:s:*  //值 * 表示重定向本地任何摄像头至远程主机,如果使用指定的 deviceID,则只有该设备会被重定向

RemoteApp Tool 生成的默认配置是将本地设备和驱动器重定向至远程主机,这样跟在本地安装 QQ 也没什么区别了,所以需要我们自己对远程桌面连接配置进行修改。更详细的配置可以参考微软的官方文档。做到这里,就基本完成了在远程主机上部署 RemoteApp 并使用的全过程。

接下来可能还有一些小问题要解决。比如在 https://bgm.tv/group/topic/364804 中提到的,出现远程输入法的状态指示器。对应的解决办法是用同样的账户直接登录 RDS,然后关掉输入法指示器。当然现在我不确定这招是否有用,因为没法再试验了。

不过查阅了一下微软的文档,其中提到了特定情况下退出 RemoteApp 时会话不会终止的问题。对此,可以启用组策略中“计算机配置——管理模板——Windows 组件——远程桌面服务——远程桌面会话主机——会话时间限制——设置 RemoteApp 会话的注销时间限制”一项,时间设为立即。不过考虑到会话在多台设备间迁移,我没更改这个配置,但如果你遇到问题可以试着调整一下。

组策略配置相关

经过一番折腾之后,我们的 RemoteApp 服务就可以正式投入使用了。稍微总结一下使用情况和注意事项:

  1. 系统的选择。理论来说什么版本都没问题,因为即使有远程桌面功能限制的家庭版,也可以通过歪门邪道启用 RDS。但还是建议把 RemoteApp 部署在服务器版本系统上,好处是即使未经 RD 授权的 Win Server 也可以同时进行两个远程连接会话,且 RemoteApp 会复用 session,不受 2 个连接数的限制。这也就是说开多少 RemoteApp 会话都没关系,Windows 会认为你只占用了一个会话数,在此之外你还可以再正常开一个普通 RD 会话。
  2. 一个 RemoteApp 会话意外断开时,只要会话未超时,重新连接后可以继续之前的会话内容。组策略里能够更改超时时间和超时动作,也即上文提到的“会话时间限制”配置项。
  3. 基于第二点,我们可以把 RemoteApp 玩出花,比如关电脑之后上床继续打黄油什么的。如果能正确处理好硬件直通和 RemoteFX vGPU 这些让人完全无法下手的功能,用 RemoteApp 打游戏也不是问题,而且相比 moonlight 那些串流服务,能实现真正的 Play Anywhere(指游戏状态不丢失,在任何终端上可以继续当前进程)。
  4. 硬件配置。如果你也准备在虚拟机上部署,建议给虚拟机内存分多些,如果能直通显卡的话最好直通,毕竟某些窗口绘制和视频播放的功能有硬件加速效率更高。就我的配置而言,在一个 4C / 4G / 无显卡的虚拟机里,跑跑 QQ 还是没有压力的。
  5. 服务器和客户端之间年代差距别太大了,免得某些 RDP 协议支持不好,此外某些 bug 也只有更新的系统中提供了补丁修复。至于 RemoteApp 在 Windows 之外的支持状态,我觉得你可以试试,毕竟我的主要诉求是上 QQ,安卓就直接装应用了。
  6. 这套东西也可以直接跑在公网上,实现在办公室里远程摸鱼的愿望(受限于网络环境,体验可能不会太好)。不过如果要把 RDS 暴露给公网,那么相应的安全措施一定要做,包括不限于修改默认端口、防火墙规则,用户账户权限分配等。

至此关于 RemoteApp 的部署及应用就简单介绍完了,下一篇系列文章的内容我还没想好,到时再说吧。

参考资料:

  1. 远程桌面服务介绍(英文):https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/welcome-to-rds
  2. RDP 配置文件支持的参数:https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/rdp-files
    https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/remote/remote-desktop-protocol-settings
  3. 文中提到的有关 IME 的问题,标记为已解决:https://docs.microsoft.com/zh-cn/windows-server/remote/remote-desktop-services/troubleshoot/input-method-editor-error
  4. 如何在本机退出已关闭的 RA 会话:https://docs.microsoft.com/en-us/troubleshoot/windows-server/remote/rd-or-remoteapp-session-not-terminate
    https://techcommunity.microsoft.com/t5/security-compliance-and-identity/terminal-services-remoteapp-8482-session-termination-logic/ba-p/246566
  5. V2EX 上的讨论:https://www.v2ex.com/t/746542#reply51
声明: 本站所有图文遵循 署名-非商业性使用-相同方式共享 3.0 共享 协议.
转载请注明转自 ershiwo的私人研究所
标签:

0 Comments

难得的沙发不来一发吗?!