TearSnow Fan


多用户使用Windows远程桌面连接解决方案

实验室里有一台性能较好的计算机,运行Windows 10 x64 教育版,平时都是开机状态以便不同人员进行一些高性能的计算任务。使用远程桌面连接来共享这台计算机自然是一种比较方便的办法。

然而只有Windows Server 服务器版操作系统可以同时使用多个远程桌面连接登陆,桌面版本的Windows操作系统(如专业版)则默认只能使用一个远程桌面连接,而且本地控制台会话也不能和远程桌面连接会话并存,也就是说连接数限制为1。至于家庭版本的Windows,甚至只能连出不能连入,可以认为连接数限制是0……

解决方法有两个,推荐CSDN用户 知贵待缘 的两篇文章,介绍得非常详细:

可以看出,远程桌面连接的限制主要是C:\Windows\system32\termsrv.dll文件造成的,通过处理这个dll文件可以解除连接数的限制。

方法一(RDP Wrapper Library)是目前比较“完美”的解决方案,然而不幸的是,其官方Github(https://github.com/stascorp/rdpwrap)已经于2020年5月后无法访问。根据该项目Github之前的描述:

RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update.
RDP Wrapper does not patch termsrv.dll, it loads termsrv with different parameters.

RDP Wrapper 作为服务控制管理器和终端服务的中间层发挥作用,原始的termsrv.dll文件保持不变,这种方法可以很好的应对Windows更新。
RDPWrapper 不修改termsrv.dll,它用不同的参数加载termsrv.dll。

然而Windows Update会导致 termsrv.dll 文件频繁更新(可以通过查看该文件的属性-版本),方法二针对当RDP Wrapper Library不能支持的升级后的高版本termsrv.dll的情况,可以将该文件替换为低版本的termsrv.dll,并仍然使用RDP Wrapper Library对其进行处理。

那么其实还有第三种方法,就是简单粗暴地替换termsrv.dll为支持多用户远程桌面连接的版本(例如从相应版本的Windows Server操作系统中复制),连安装RDP Wrapper Library也不需要了。

但是方法二和方法三都可能存在稳定性/兼容性问题,毕竟替换后的 termsrv.dll 文件和 Windows操作系统 的版本是不匹配的(所以尽量替换为相近的版本),也有可能在Windows更新时被系统还原termsrv.dll文件。

替换C:\windows\system32\termsrv.dll文件需要在安全模式下,或者进入WinPE进行。所需的termsrv.dll文件可以尝试搜索“Win10远程桌面多用户补丁”等,注意其适用的Windows版本(如1909)和架构(x86/x64),而且一定要备份自己的原版termsrv.dll文件。

本人主要使用RDP Wrapper对 termsrv.dll 文件进行处理,并在本文中记录一些操作方法和问题,以供学习交流。我同时创建了Github仓库 smallerxie/rdpwrap-ini-dll 来保存一些必要的资源文件。

使用 RDP Wrapper 进行多用户远程桌面连接

RDP Wrapper已经很久没有更新了,目前最新版本是2017.12.27发布的v1.6.2,鉴于官方Github已经被封,可以在我的Github仓库 smallerxie/rdpwrap-ini-dll 中下载到。

下载RDPWrap-v1.62.zip压缩包,然后解压,右键使用管理员权限运行install.bat安装(该压缩包中的bat文件都需要用管理员权限运行),RDP Wrapper Library会安装在 "%ProgramFiles%\RDP Wrapper" 文件夹(一般是 C:\Program Files\RDP Wrapper)。其实可以将"RDPWrap-v1.6.2.zip"中解压出来的文件也放到这个目录下。

然后运行RDPConf.exe,看到Diagnostics后面都是绿色的,并且Listener state是Listening [fully supported],则表示全绿破解成功;如果出现Listening [not supported]则说明需要更新"%ProgramFiles%\RDP Wrapper\rdpwrap.ini"文件。事实上,几乎每次Windows Update升级系统的termsrv.dll版本后,都需要更新该 rdpwrap.ini文件来使得RDP Wrapper支持新的termsrv.dll文件。

虽然RDPWrap-v1.62.zip压缩包中自带一个update.bat文件,但是鉴于官方Github(stascorp/rdpwrap)已经被关闭,已经无法用来更新ini文件了。事实上,在其官方Github关闭之前,大家也都是在其官方repository的issues中交流分享最新的ini文件的,比使用update.bat的官方渠道靠谱得多。

附几个目前仍在更新的Github repository,一般都可以在其项目代码或者issues中找到最新的ini文件。

有了最新的rdpwrap.ini文件,要怎么进行替换呢?

在远程桌面连接服务和RDP Wrapper已经启动的情况下,是无法替换ini文件的,因此只需要关闭相关服务即可。可以Win+R运行services.msc来手动关闭Remote Desktop Services后替换,也可以用如下方法:

  1. 以管理员身份运行“命令提示符”;
  2. net stop termservice
  3. 复制新的 "rdpwrap.ini" 到 "%ProgramFiles%\RDP Wrapper" 文件夹;
  4. net start termservice;
  5. 建议重启Windows操作系统(否则可能无法正常启动服务),也可以在“命令提示符”窗口中,使用 cd (ChangeDir) 命令进入解压后的 "RDPWrap-v1.6.2" 文件夹,并右键使用管理员身份运行 RDPWInst -r 来重启相关服务。

组策略中的相关设置

微软远程桌面连接的一些设置可以在组策略(gpedit.msc)中进行配置。
重点在于【计算机配置】->【管理模板】->【Windows组件】->【远程桌面服务】->【远程桌面会话主机】->【连接】中的两个设置项:

  • 【限制连接的数量】:允许的RDP最大连接数;
  • 【将远程桌面服务用户限制到单独的远程桌面服务会话】:每次使用同一个用户登录时,创建新的会话还是恢复之前的会话(如果存在)。

第一项【限制连接的数量】很容易理解,根据自己需求设置就好,主要是安全和性能方面的考虑。

第二项【将远程桌面服务用户限制到单独的远程桌面服务会话】更没有标准修改方法(顺便鄙视网上那些抄来抄去的文章和回答,误导用户)。至于怎么修改,取决于你想实现那种效果。我这里假设两种需求:

需求一:指定单个Windows账号用于远程桌面连接,该账号可以同时存在多个会话。

需求一配置:将【将远程桌面服务用户限制到单独的远程桌面服务会话】设置为“已禁用”;【限制连接的数量】根据性能和需求进行合理配置。

需求一特点:意外断开连接或者直接关闭连接时,会话不会注销;而每次登陆都会生成新的会话;未注销的无用会话可能越来越多占用大量资源;可以设置为连接丢失后自动强制注销或者手动在任务管理器-“用户”选项卡中注销。

需求二:不同用户使用各自的账号进行远程桌面连接,但每个账号只允许存在一个会话。

需求二配置:将【将远程桌面服务用户限制到单独的远程桌面服务会话】设置为“已启用”;用户数不多的情况下【限制连接的数量】不用配置或按需配置即可。

需求二特点:每个账户就只能存在一个会话了(包括本地控制台登陆);每次连接断开后,只要没有注销会话,下一次使用该用户登陆时会恢复之前的会话(而不是新创建一个),本地控制台登陆和远程桌面连接使用同一个账户登陆时,也共享同一个会话,后登陆的会话会踢掉并接管前一个会话。

似乎不做更改时,Windows默认的组策略就是后者(需求二)。至于【限制连接的数量】,我试过将其改为“1”(并重启电脑确保已经应用了),仍然能在本地控制台登陆(账户A)时,同时连入两个远程桌面连接(账户B和账户C)。所以这个“限制连接的数量”貌似也是针对同一个用户的限制?

已知问题和解决

10.0.18362.836:Windows10在2020年5月12日更新KB4556799后,termsrv.dll会升级到10.0.18362.836,我已经在Github仓库 smallerxie/rdpwrap-ini-dll 上更新了支持 10.0.18362.836 (x64)的rdpwrap.ini文件,对于x86版本可能无效,即使运行RDPConf.exe显示全绿,使用RDPCheck.exe实际测试会提示无法连接。

加了RDP Wrapper的telegram小组(讨论基本是俄语的……),多人有相同问题,解决方法只能使用一个不完美的方案了,就是替换"C:\Windows\System32\termsrv.dll"文件为上一个版本 10.0.18362.657 即可继续使用RDP Wrapper。如果没有备份10.0.18362.657版本的termsrv.dll,直接卸载更新KB4556799也是可以的,重启后termsrv.dll会回退到10.0.18362.657版本,建议备份该版本的 termsrv.dll 以免再次被更新。

降低termsrv.dll版本后,可能需要重新替换rdpwrap.ini为支持该低版本termsrv.dll的ini文件并重启计算机后,RDP Wrapper才能生效。

MacOS下进行微软远程桌面连接

顺便安利一个MacOS下可用于远程桌面连接的软件 Microsoft Remote Desktop,貌似在中国区App Store中找不到,但是在国外是可以正常下载的,而且免费哦。

Microsoft Remote Desktop的详情可以看iplaysoft的一篇介绍:https://www.iplaysoft.com/microsoft-remote-desktop.html

参考资料

[1] RDP Wrapper 官方Github:https://github.com/stascorp/rdpwrap
[2] 我的Github备份 https://github.com/smallerxie/rdpwrap-ini-dll
[3] ini文件自动更新:https://github.com/asmtron/rdpwrap
[4] CSDN | 采用RDP Wrapper Library(理论支持所有Windows版本)
[5] CSDN | Win10多用户同时远程桌面的另类解决方案

本文固定链接: https://blog.xieyc.com/multiuser-windows-remote-desktop/ | 小谢的小站

该日志由 xieyc 于2020年05月28日发表在 折腾, 软件 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 多用户使用Windows远程桌面连接解决方案 | 小谢的小站
关键字: ,

多用户使用Windows远程桌面连接解决方案:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter
//added by myself XIEYC