Published on

Parsec 远程畅玩实战排坑

Authors
  • avatar
    Name
    WoadZS
    Twitter

本文的目的在于记录实践过程中遇到的困难和解决方案,能够随手搜索到的基础操作和教程不再赘述。
另外本文异地组网均基于 Zerotier,如果有公网 IP,无论 IPv4 或是 IPv6,可尝试直连。

远程畅玩可用方案

主要有以下几种:

RDP(Remote Desktop Protocol)

微软出品的远程桌面协议,最佳的用途其实是画面刷新要求不太高的远程办公。由于该协议下相当一部分画面是客户端渲染,因此画面非常优秀,但也仅限于 Windows 的原生画面,第三方游戏画面会导致画面延迟,画质降低以及系统占用提高的问题。
对于 RDP 的评价是:

  • 如果用于游戏,仅推荐用于画面变化相对较小,即时性要求较低的游戏,比如卡牌。
  • RDP 可用于远程控制配置服务端机器,在需要远程修改或其他办公需求时,RDP 是首选。

Steam 远程畅玩

Steam 远程畅玩只需要在服务端和客户端登录同一个 Steam 账号即可,然后在客户机上点击服务端安装好的游戏远程畅玩就好了,简单粗暴。
但是就我个人而言,我个人想玩儿的战地 2042在 Steam 的远程畅玩中出现鼠标无法点击的 bug,遂放弃。
对于 Steam 远程畅玩的评价是:

  • 开箱即用,简单粗暴,支持 P2P;
  • 可能会有 bug,或遇到非 Steam 游戏,就需要寻找替代方案。

Moonlight

Moonlight 是利用老黄 Nvidia GameStream 的串流软件。好,我的 Vega 64 骂骂咧咧地退出了群聊。

Parsec

Parsec 是类似于 Moonlight 的串流软件,但是优点在于 A 卡和 N 卡都支持,操作也非常简便,同 Steam,在服务端和客户端登录同一 Parsec 账号即可实现串流。并且 Parsec 支持 P2P,这对降低延迟有着莫大的帮助。

基于以上的分析,自己串流方案就是:

  • Zerotier 组网;
  • RDP 做远程临时配置;
  • Steam 游戏使用 Steam 远程畅玩;
  • 使用 Parsec 游玩 Steam 远程畅玩有 bug 或不支持的游戏。

Parsec 使用排障

连接上后卡 Windows 登录界面

这个问题和 Steam 远程畅玩遭遇的 "Would you like to accept secure desktop input from Steam?" 弹窗的原因是一样的,是因为服务端主机被远程锁定,这个锁定原因可能是链接之前刚好退出了 RDP,RDP 在退出时出于安全原因会将服务端主机锁定。
为了避免登出 RDP 自动锁定屏幕,可以参照《如何在不锁屏的情况下登出远程 Windows PC》这篇文章,在任一位置新建一个 .cmd 的脚本,内容为:

xxx.cmd
@ECHO OFF
NET SESSION 1>NUL 2>NUL
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO ADMINTASKS

:ELEVATE
CD /d %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
EXIT

:ADMINTASKS
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console"

这条命令是使用 powershell 查询当前用户的 sessionid,然后使用 tscon 断开当前连接, 这种方式断开连接后,系统不会自动锁定屏幕,而会把控制权交回本地。 以后需要断开 RDP 时,仅需要点击这个文件并允许在弹出的 UAC 确认框即可。在此之后再链接 Parsec 就不会遭遇卡登录界面的情况,Steam 远程畅玩也不会再遇到可怕的弹窗。

Parsec 黑屏

Parsec 连接后黑屏的原因在于没有一个可供抓取的显示器输出,显示器此时是关闭的(不在家关了省电)。
因此为了方便 Parsec 抓取屏幕,有两种常见办法:

  1. HDMI 诱骗器,出门右拐淘宝,原理是给显卡上假负载,诱骗显卡输出;
  2. Indirect Display 虚拟显示驱动。

这里我们用第二种方法,主要参考资料是《虚拟显示器终极解决方案 IndirectDisplay》这篇文章。
大致流程(非自编译)为:

  1. 在服务端机器上下载这个链接的所有内容(页面左上角下载可一次性下载全部内容)并解压到某处。
  2. 首先安装 IddSampleDriver.cer 证书到受信任的根证书颁发机构(如不信任,请尝试自编译);
    信任证书 图据qwq.moe
  3. 右键安装 IddSampleDriver\IddSampleDriver.inf 文件,开始安装驱动,如果有是否信任的询问弹窗,请信任。 安装驱动 图据qwq.moe
  4. 驱动安装完成后,可不重启,可执行 IddSampleApp.exe 开启虚拟显示器。开启后就可以使用 Steam 远程畅玩或 Parsec 进行游戏了。
    启动虚拟现实器 图据qwq.moe 图据 qwq.moe

另外特别提示:

  • 使用完成后,强烈建议按照提示使用 Ctrl + X 关闭虚拟显示器,否则在使用真正的物理显示器时,可能会遇到桌面丢失或光标丢失等问题。
Parsec 远程畅玩实战排坑
本文作者
WoadZS
发布时间
许可协议
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!