使用 RemoteFX 通过 RDP 玩 3D 游戏时鼠标移动不稳定

使用 RemoteFX 通过 RDP 玩 3D 游戏时鼠标移动不稳定

似乎使用 RDP 连接时的默认鼠标驱动程序无法很好地与某些应用程序(例如 3D 游戏)配合使用。

我的设置:

  • 带有 Hyper-V 和强大显卡的 Windows 2012 R2
  • 配置了 Windows 8.1 Enterprise、RemoteFX 和 vGPU 的虚拟机
  • 通过快速链接与 RDP 连接。

得益于 RemoteFX/vGPU,3D 视频性能非常出色。它绝对可以让游戏通过 RDP 运行得非常好(如果不是因为鼠标的话)。

问题是,在游戏中鼠标反应相当疯狂 - 但在 3D 环境之外则完全正常。(例如,在游戏菜单中鼠标就没问题)。

我能想到的最接近的解释是,无论是通过实验还是在网上搜索(许多其他人也遇到了同样的问题,但没有找到解决方案),鼠标驱动程序似乎传输的是相对位置,而不是移动。这个
“理论”与鼠标指针如何跳进和跳出 RDP 窗口的一些解释很吻合(例如,将其从左侧的窗口移出,从右侧移回 - 并且它表现完美,即基于位置的鼠标而不是基于运动的鼠标),也与游戏中的行为很吻合 - 例如,如果我将鼠标向左移动很多,视图就会疯狂地向左跳;如果我将它向右移动一点,但仍然没有完全回到中心(即鼠标仍然在中心的左侧,但向右移动),它会继续向左跳。(即,它似乎仍在报告其位置“在中心的左侧”而不是“向右移动”)。

我希望能找到任何解决方案。有人有什么想法吗?

答案1

哇,经过大量的研究和失败的尝试,我终于解决了这个问题!
好吧,大多解决了它 - 它是功能性的,但并非没有缺点。

感谢@JourneymanGeek 的回答,特别是他链接的帖子,我得以跟进,并最终发现,在远程桌面客户端 ActiveX 实现的许多接口中,其中一个支持相对鼠标模式属性!这听起来正是我需要的,它将强制 RDP 支持相对鼠标移动!

不过,我确实注意到此 MSDN 论坛帖子“RelativeMouseMode 在 RDP RDSH/RDVH 场景中不受支持,不应使用”,但我觉得管它呢,这不是真正的生产环境,使用不受支持的功能也没问题。它的文档也很差,但似乎我得到了我需要的东西 -StackOverflow 上的这个问题也让我相信这是可行的。

因此,我开始实现一个简单的 WinForms 应用程序来托管 ActiveX 控件,并设置了“...Unsafe”接口属性。


但事实证明,微软这次所说的“不支持”的意思是“它不起作用”。
好吧,如果是这样的话,这将是一个 SO 问题,很抱歉让你误入歧途(但我认为最好在某处记录下来……)


然而,并非一切都是徒劳的,在深入研究 RDP 协议的过程中,我查看了 RemoteFX USB 重定向 - 这看起来像是一条死胡同,因为基本输入设备(如鼠标、键盘、打印机)被明确阻止在 USB 重定向机制之外:

默认情况下,上述类别的设备可通过高级设备重定向方法在远程会话中访问。这些重定向方法可在大多数用户场景中实现设备的最佳性能和向后兼容性。因此,这些设备不通过 RemoteFX USB 重定向提供。

嗯,事实证明,最终的答案是,这个块有一个覆盖机制。


步骤 1:启用 RemoteFX USB 重定向
这里有一个很好的详细说明:https://www.itprotoday.com/server-virtualization/q-how-do-i-enable-remotefx-usb-redirection。基本上,在客户端计算机上,您可以使用本地策略或组策略来设置RemoteFX USB Device RedirectionEnable并允许用户(或仅管理员)使用权限。然后gpupdate /force重新启动。

步骤 2:启用鼠标重定向覆盖。
如下所示MS KB文章解释,您可以设置注册表项以启用特定设备(或设备类)的 USB 重定向。

再次在客户端上,在

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\终端服务\客户端\UsbSelectDeviceByInterfaces

您可以添加一个带有设备标识符的字符串值。
例如,在此键下,我添加了以下字符串值:

“GUID_DEVINTERFACE_MOUSE”=“{378DE44C-56EF-11D1-BC8C-00A0C91405DD}”

根据您的鼠标,您可能需要不同的标识符,因此 YMMV。但请从此开始。

步骤 3:设置 RDP 客户端以重定向鼠标。
如步骤 1 中的文章所述:

启用后,访问“本地资源”选项卡,单击“本地设备和资源”下的“更多”,您将看到一个新的“其他支持 RemoteFX USB 设备”设置。您可以使用此设置映射许多类型的 USB 硬件,而这些硬件无法通过普通 RDP USB 重定向进行映射,如下所示。

在其下你应该会看到一个关于你的鼠标的条目;它可能有点模糊,例如:

其他设备重定向

选择您的鼠标(或其他适当的条目)。

就是这样!现在,您已将硬件鼠标“直接”连接到您的 VM,这允许 3D 游戏直接从鼠标驱动程序中提取相对鼠标移动(-ish..)


然而,如上所述,它也存在一些缺点。

  1. 鼠标被重定向到 RemoteFX 的虚拟机 - 换句话说,客户端计算机不再有鼠标,至少在远程桌面会话打开时。
    一个可能的解决方案是连接第二个鼠标,然后只重定向其中一个。(我还没有尝试过,但它应该可以正常工作)。

  2. 由于某种原因,当鼠标重定向时,它不会在远程会话中直接显示光标。虽然它仍然有效,但它确实让人有点困惑,不知道鼠标指向什么。
    一个简单的解决方案是打开“鼠标轨迹”,并将长度调低到最低。 鼠标轨迹
    这样会显示鼠标位置,但速度有点慢。

  3. 总体而言,虽然此解决方案确实有效,但鼠标仍然有点慢且迟钝。
    您可以调高鼠标速度,使用指针精度(有时将其关闭实际上会有所帮助),甚至可以在HKEY_CURRENT_USER\Control Panel\Mouse(分别位于Mouse SpeedMouseThreshold1MouseThreshold2下)下调整鼠标加速注册​​表设置。
    这将有助于缓解问题,但不能真正解决问题。

因此总体而言,这可以使 3D 游戏变得非常好玩 - 对于休闲游戏来说,不幸的是对于 twitch 游戏来说并不好。(不过,如果您需要,您可以直接将金属启动到该 VHD 中,并同时拥有这两个选项......)

答案2

远程桌面传输绝对鼠标移动,以此减少需要从客户端发送到服务器的鼠标移动数据包数量。这种安排适用于大多数 Windows 应用程序(电子邮件、网页浏览等)。许多 2D 游戏也支持这种安排。但是,FPS 游戏通常需要相对鼠标移动才能控制鼠标外观,而远程桌面不幸无法传输这种外观。相对鼠标移动数据的丢失会导致游戏意外旋转视口。微软需要修改远程桌面才能使这种游戏场景正常运行。但是,使用具有 USB 重定向功能的 PC XBOX 控制器可能是一种替代方案。

答案3

显然是 remotefx平板电脑风格的“绝对”输入模式仅此而已,这是问题的根源。我找不到任何关于更改它的文档。

您可能需要考虑另一种远程访问模式 - steam 对我来说效果很好(在“主机”上使用 nvidia GPU,在另一端使用小型的 bay trail box)。Nvidia 有一个显卡选项,但我还没有真正尝试过。Parsec 也运行得相当好

简而言之,没有明显的方法可以用 remotefx 解决这个问题,除非可以将游戏设置为使用 remotefx 正在使用的输入模式。

答案4

有类似的东西秒差距可以自动将绝对鼠标转换为相对鼠标。其目前的缺点是它不能接受来自主机的任何麦克风输入。

相关内容