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

Avi*_*viD 12 mouse remote-desktop remotefx windows-8.1

与 RDP 连接时的默认鼠标驱动程序似乎不适用于某些应用程序,例如 3D 游戏。

我的设置:

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

得益于 RemoteFX/vGPU,3D 视频性能非常出色。它绝对允许游戏在 RDP 上非常可玩(如果不是鼠标的话)。

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

从实验和网上的大量搜索中我能看出最接近的(许多其他人有同样的问题,但没有找到解决方案) - 似乎鼠标驱动程序传输其相对位置,而不是移动。
这个“理论”与关于鼠标指针如何跳进和跳出 RDP 窗口的一些解释非常相关(例如,将它从左侧的窗口移出,在右侧移回 - 它的行为非常完美,即基于位置的鼠标和不是基于动作的),以及游戏中的行为 - 例如,如果我将鼠标向左移动一堆,则视图会疯狂地向左跳;如果我然后将它向右移动一点,但仍然没有完全回到中心(即鼠标仍然在中心的左侧,但向右移动)它会继续向左跳。(即它似乎仍在报告它的位置“中心左侧”而不是“向右移动”)。

我希望找到任何一种解决方案。任何人的想法?

Avi*_*viD 10

哇,经过大量的研究和失败的尝试,我真的解决了这个问题!
好吧,大部分都解决了 - 它是实用的,但并非没有缺点。

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

但是,我确实在这篇 MSDN 论坛帖子中注意到“RDP RDSH/RDVH 场景中不支持 RelativeMouseMode,不应使用”,但我想试试看,它不是真正的生产环境,我很好使用不支持的功能。它的文档也很差,但似乎我有我需要的东西 - StackOverflow 上的这个问题也让我希望它是可行的。

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


除了事实证明,“不受支持”,这次微软的意思是“它不起作用”。
好吧,如果确实如此,这将是一个 SO 问题,很抱歉引导您继续(但我认为将它记录在某处很好......)


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

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

好吧,最终的答案是,这个块有一个覆盖机制。


第 1 步:启用 RemoteFX USB 重定向
这里有一个很好的阐述:http : //windowsitpro.com/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\Terminal Services\Client\UsbSelectDeviceByInterfaces

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

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

根据您的鼠标,您可能需要不同的标识符,所以 YMMV。但从那开始。

第三步:设置RDP客户端重定向鼠标。
正如第 1 步中的文章所述:

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

在此之下,您应该会看到一个鼠标条目;它可能有点模棱两可,例如:

其他设备重定向

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

就是这样!你现在有一个硬件鼠标“直接”连接到你的虚拟机,它允许 3D 游戏直接从鼠标驱动程序中拉出相关的鼠标移动 (-ish..)


但是,如上所述,存在一些缺点。

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

  2. 出于某种原因,重定向时,鼠标不会直接在远程会话中显示光标。虽然它仍然有效,但瞄准鼠标所指的对象确实有点令人困惑。
    一个简单的解决方案是打开鼠标轨迹,将长度一直调低。 鼠标轨迹
    这将显示鼠标位置,但它有点迟钝。

  3. 总的来说,虽然这个解决方案运行良好,但鼠标仍然有点缓慢和迟钝。
    您可以调高鼠标速度,用指针精确度的游戏(有时把它关闭,实际上这方面的帮助),并且在鼠标加速的注册表设置,甚至玩弄HKEY_CURRENT_USER\Control Panel\MouseMouse SpeedMouseThreshold1,和MouseThreshold2分别)。
    这将有助于缓解问题,但不会真正让它消失。

所以总的来说,这甚至可以让 3D 游戏变得非常具有可玩性——对于休闲游戏来说,不幸的是对于 twitch 游戏来说不是很好。(尽管如果您需要,您可以将金属直接引导到该 VHD 中,并且有两种选择....)