Featured image of post 使用 USB/IP 和 Moonlight 远程游玩 Helldivers 2

使用 USB/IP 和 Moonlight 远程游玩 Helldivers 2

反作弊机制不让我们串流玩,但是这根本拦不住我们

2024 年 3 月 4 日更新:

目前该游戏又重新开放了 Moonlight 串流的支持,因此本文所述的方法不再必要。


著名的友尽 PvE 游戏《地狱潜兵 2》在不久前上线,作为一代老玩家也是迫不及待的喜 +1,玩了几天感觉除了 bug 比较多也没啥大毛病,还是一如既往的原汁原味(

但是在 2 月 16 日,当我和之前一样在 Moonlight 串流的桌面里启动游戏后,我的所有输入都没了效果:任何键盘鼠标时间都没有任何反馈。跑到机柜里看了一眼电脑,没发现任何问题,关闭游戏之后 Moonlight 中的键盘鼠标又恢复了工作,于是我只能认为是这个游戏的反作弊机制屏蔽了 Sunshine 在串流游戏时的输入事件,后来我也在 Reddit 中发现了有玩家遇到了相同的问题:

Has anyone figured out how to get Helldivers 2 to work yet?

作为一个坚定的串流用户肯定不能因为这小小的阻碍就放弃游戏,于是我调研了一番,发现了有不少实现 USB over IP/Ethernet 的方案:

  1. VirtualHere 是一个商业软件,提供一步到位的 USB 远程连接方案,但是这个软件需要花费 45USD 才能解锁多设备连接,同时购买的授权也只能在一台设备上使用。
  2. USB/IP Project 是一个开源项目,已经有了一段时间的历史,也没有上述商业软件的限制。

由于我实在是不想花这 45 美元(如果他是浮动授权我还有可能真的就付款了,试用了一下还是蛮方便的),于是我掏出了吃灰多年的树莓派,更新软件源之后只需要执行 sudo apt install usbip 即可完成 Server 端软件的安装。为了方便将 usbipd 放在后台执行,我们可以准备一个这样的 systemd unit:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Unit]
Description=usbip host daemon
After=network.target

[Service]
Type=forking
ExecStartPre=/sbin/modprobe usbip-host
ExecStart=/usr/sbin/usbipd -D

[Install]
WantedBy=multi-user.target

启动这个 daemon 后,使用命令 sudo usbip list -l 即可查看当前设备上连接的 USB 设备:

1
2
3
% sudo usbip list -l
 - busid 1-1.3 (046d:c52f)
   Logitech, Inc. : Nano Receiver (046d:c52f)

我们再用命令来让相关内核模块来接管这个 USB 设备,以上面的鼠标接收器为例:sudo usbip bind -b 1-1.3

然后前往 Windows 游戏机,安装 Client 所需要的软件和驱动,此处可以直接参考 USB/IP for Windows 仓库中 README 的描述,此处不再赘述。

完成相关的驱动安装后,我们只需要执行命令 usbip.exe attach -r raspberrypi.local -b 1-1.3 便可以将鼠标接收器直接连接到 Windows 游戏机上,如法炮制可以继续连接一个 USB 键盘和手柄等别的想要连接的设备,这样我们就能愉快的游戏啦。

Screenshot of device manager
comments powered by Disqus
Except where otherwise noted, content on this blog is licensed under CC-BY 2.0.
Built with Hugo
主题 StackJimmy 设计