Parsec 远程畅玩「暗黑2:浴火重生」的光标问题

最近意识到了一个 Parsec 中的鼠标指针丢失的问题是如何造成的,记录一下

问题

在「暗黑2:浴火重生」中,如果你是使用 Parsec 和手柄来进行远程畅玩, 那么可能你会和我一样遇到相同的问题:在移动道具的页面中,显示不出鼠标指针的位置。

parsec-no-cursor.gif

这里叫「鼠标指针」可能也不那么合适,因为我们是在用手柄,理解万岁,先这样叫着好了。

分析

我们可以对比一下另一个应用 MoonLight 的效果:

moonlight-move-cursor-with-joystick.gif

所以 MoonLight 没有这个问题。

Parsec 官方 有对游戏中没有鼠标指针的问题进行说明,官方是认为,你没有接鼠标, windows 就不会显示鼠标指针,所以我们忠实地重现了这一点。 这个说法在我这里是行不通的,因为我的远程电脑一直接着鼠标。官方给了三个建议, 我也对应写了下我的想法:

  1. 连接物理鼠标:我已经连了
  2. 安装三方驱动:给出的驱动已经是十年前了
  3. 打开小键盘模拟鼠标:影响小键盘使用

感觉都不是很有说服力,因为我已经接了鼠标,用了这三招,也不一定能解决我的问题。 后来,连接鼠标使用 Parsec 时,我注意到一个问题:

vlcsnap-2022-12-22-18h35m21s633.png

不明白我在讲什么对不对,没关系,我们看一下 MoonLight,你就会明白:

vlcsnap-2022-12-22-18h36m40s101.png

Parsec 的鼠标指针要比 MoonLight 大一些。所以我们大概就清楚了怎么回事: Parsec 其实没有把鼠标和画面一起带到本地,而是根据鼠标指针的实际图像, 结合本地的 dpi 尺寸进行了重绘,所以这个指针是 Parsec 结结实实从原画面上抠掉的重画。 那么,为什么在移动道具的时候,鼠标显示不出来呢,我们再做一个实验, 我们在 Parsec 客户端的移动道具 UI 上移动一下客户端本地的鼠标试试:

parsec-move-cursor-with-mouse.gif

所以移动鼠标的时候,这个光标还是画得出来的,只是我们不能点击,因为一旦我们点击, 游戏会判定我们是在用键鼠操作,就会切换到键鼠的操作界面。

那么这个问题就很好理解了:只有在鼠标移动时,Parsec 才会绘制鼠标指针, 而对于「暗黑2:浴火重生」,手柄控制的情况下,移动光标是手柄操作的, 并不会触发鼠标移动事件,所以不会显示出鼠标指针。

规避

有了这个结论,那么基本上我们是没有办法解决这个问题的,不过应该还是有办法回避:

打开鼠标轨迹

我们可以打开指针的显示轨迹,然后把滑杆调到最短, 这个设置的位置在「设置 / 蓝牙和其他设备 / 鼠标」的「其他鼠标设置」:

Untitled

这样鼠标指针会有一个很短的轨迹,不过会有一点显示偏移, 毕竟只是轨迹不是鼠标的真实位置,不过我觉得这是最小成本的解决方案了, 毕竟只改一个配置,也不太影响其他应用。这个做法远称不上完美, 但是起码能让我们知道指针的大概位置。

至于有些网友说安装 Input Director 可以解决这个问题,我估计不行, 试了一下也验证了我的想法,因为 Input Director 只是强制在远程主机的本地显示一个鼠标, 相当于远程主机接了一个虚拟的鼠标,所以远程主机的本地一定会有指针的显示, 但是 Parsec 是擦掉远程主机本地绘制的指针,在客户端重新绘制一个, 所以我们在客户端里同样看不到这个指针。这是由 Parsec 本身的机制决定的。

「远程主机的本地」这个词可能理解起来比较绕,希望大家能明白我的意思。 就是我们实际运行游戏的那台主机的本地。