
后者才是串流对应的服务
一、引言
RDP和moonlight都是我常用的远程控制软件,他们不经过第三方的运作模式,在网络条件允许的情况下无疑是速度与延迟的最优解,同时两者又能很好的弥补对方的缺点,能够几乎完成远程控制下所有的使用需求。
有很多人应该也认同这样的观点,但是懂这些的人一定也知道,moonlight连接后使用RDP,可以,然而反过来就不行了。这也给这样一个组合的实用性带来了很大的打击。
当然,可以采用人力解锁,重新登录账户让moonlight重新变得可以连接,但是这就不叫远程控制了;也可以可以采用其他可以访问登录界面的控制软件作为跳板解锁,虽然为了稳定性我也使用unityhub作为跳板,但是我希望能有尽可能的不经过第三方的方案。
等等党等moonlight支持访问登陆界面?实际上刚开机的时候也确实是可以的,只不过大概率会失效(可能和快速启动什么的有关),并且在RDP之后是一定不能访问登陆界面的,server这边本质上是在使用nv的闭源服务(开源的也有,可能解决问题,但是远远远远远不如nv的开箱即用方便)因为这个软件本意是本地串流,并不指望nv会修复这种问题,等等党大失败。
那么有没有更合适解决方案呢,前两天看视频评论区隐约看到有人说是有的,所以我就花了点时间找出来了。
二、解决方案
首先直接上解决方案,在RDP中直接运行如下的bat文件即可。
%1 mshta vbscript:CreateObject("Shell.application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do ( %windir%\System32\tscon.exe %%s /dest:console ) net stop NvContainerLocalSystem net start NvContainerLocalSystem
此时RDP终端会弹出一个类似于你在物理机上输密码的 -其他用户把你顶出- 的提示,然后如果你在RDP之前是可以连上moonlight的,那么过几秒种moonlight应该就变得再次可用了。
为了方便,可以给bat建立一个快捷方式,并且修改一个漂亮的图标。或者是直接加到path都是可以的。
注意,强调这个步骤将导致物理机直接进入桌面,解锁时远程使用电脑旁边有有人的话他就可以直接操作你的电脑了,如果不是要使用moonlight 或者其他特殊用途,建议正常的退出RDP。
同时拥有可以登录你RDP的人相当于拥有了你主机物理机的解锁权限(而不是只能远程)。
三、命令分析
当然我没有做到对这几行命令的完全理解,如果有更好的实现方式欢迎指出。
第一部分是使得bat在运行时弹出UAC请求管理员权限,抄自某个工具箱,平时一直就这么用,用来避免后续的命令需要管理员权限的bat忘记用管理员模式运行(另外还能节约右键找菜单的时间)。
第二部分 核心代码,作用是将RDP会话终结,并且解除屏幕锁定。
第三部分其实是我夹带私货,我试过不需要这两行指令也可以解决我描述的问题,如果这个部分影响了你那边其他依赖Nvidia服务的功能,可以删掉或者是按需运行。只不过重启Nvidia的container服务,可以解决一些串流server的疑难杂症,相当于你手动到NVexp里面点了两次那个shield的按钮重启。而且命令行的形式可以避免远程图形化界面连接点击shield关闭后无法再打开的情况。我…就习惯性的加上了。
四、搜索过程
-我如何找到这个解决方法,以及发现中的一些小细节 《授人以鱼不如授人以渔
首先想到是去bing搜索“RDP moonlight”。当然,看到Closed的github issue就觉得有戏了?并不是(去年就看过一次这个主题了),题主表示“我没认证看FAQ哦,原来这样就是不行的”,然后close。
FAQ节选(moonlight的FAQ写的很不错,建议有问题之前先看一遍)
Known application compatibility issues
人话就是,在RDP之后不从物理机登录是无法使用moonlight的,用其他软件解锁后再连接吧。
文章开头我就说过这种解决方法,当然对于大部分人他还是好用的,我觉得这也是官方一直不放出我这样解法的教程的原因。
那官方说了不支持,我就放弃了吗。
在继续搜索的过程中我找到了一篇叫做“How to end a RDP session without locking”的文章,虽然文末作者表示在win10已经失效,但是我认为用这个做搜索关键词会更加有效,最后翻到了这一篇文章:
Disconnecting From Remote Desktop While Running Automated Tests | TestComplete Documentation (smartbear.com)
也就是我脚本的来源。
当然这篇文档,解释了RDP退出后影响了GUI的功能,从而使一些软件(包括串流服务器 很河里)无法正常工作,包括解释脚本的时候也是循序渐进,文档的质量可以说是相当的高了。
五、注意事项
最好在实施这个方案并离开你的电脑前尝试使用移动网络运行一下,看一下有没有问题。看着屏幕跑一边,代码可以没看懂,但是要理解他的工作方式。
虽然我个人也不喜欢远程控制经过第三方运营商,但是 -短时间- 内未稳定的情况下还不考虑丢弃这种途径,毕竟即使RDP已经较为稳定,还是不如成品方案有第三方服务器做中转可用性更高(比如纯ipv4网络也可用)。
个人实验的结果,对于刚开机的电脑,RDP进去并且执行脚本物理机也是解锁到桌面的,我目前只考虑安全问题的前提,是只有我自己能连接RDP,以及机器的物理位置一般只有我能接触到。是否有其他的安全问题需要综合你自己的使用环境以及要求来确定,之前我强调过。这也是最后那个文档末端描述推荐你在执行完测试的功能后在锁定计算机的原因。