完整信号链:从你的手到游戏
按顺序讲清自瞄配置里的每一根线:鼠标到输入设备、输入设备到游戏主机、DMA 卡到副机,以及副机的指令究竟从哪里进入信号链。
简短回答
鼠标插输入设备的主机端口,设备接游戏主机,副机(第二台电脑)接设备的控制端口。永远不要用线把游戏主机和副机直接连起来:它们之间唯一的联系应该是一只鼠标。
信号链是怎么工作的
你的手移动鼠标,而这只鼠标插在输入设备上,而不是插在游戏主机上。输入设备转发每一次移动和点击,并以一只普通 USB 鼠标的身份出现在游戏主机上。另一方面,游戏主机里的 DMA 卡通过它自己的 USB 线把物理内存数据传给副机,由副机上的软件计算出目标在哪里。当软件需要移动光标时,就通过第三条链路向输入设备发送一条小指令。输入设备把这个移动注入到你的手正在使用的同一个鼠标数据流中,所以游戏主机收到的只是一个端口上的一只鼠标,所有动作都由它完成。
信号链的五个组成部分
信号链由五个部分组成,每个部分只负责一件事。只要你能说清每个部分负责什么,就能排查这套配置的问题。
- 1. 实体鼠标
- 你真实的手部输入。只插在输入设备的主机端口上,不插其他任何地方
- 2. 输入设备
- KMBox、MAKCU、Teensy 或 Arduino。把你的手部操作和副机的指令合并成一个 HID 数据流
- 3. 游戏主机
- 运行游戏。DMA 卡插在它的 PCIe 或 M.2 插槽上。它只看到一只鼠标和一个匿名的 PCIe 设备,别的什么都看不到
- 4. DMA 卡
- 读取游戏主机的物理内存,并通过数据口经 USB 传出去
- 5. 副机
- 读取内存数据流,决定该做什么,并向输入设备发送移动指令。除此之外不以任何其他方式接触游戏主机
如何一步步完成接线
在所有设备断电的状态下按这个顺序操作。顺序很重要,因为如果你先接控制链路再接 HID 链路,第一次测试时就看不出是链路的哪一半出了问题。
- 关闭两台机器。把 DMA 卡插进游戏主机上空闲的 PCIe 或 M.2 插槽,并拧紧挡板螺丝
- 用一根 USB 3 数据线,从 DMA 卡的数据口(DATA,不是刷写口)接到副机的后置 USB 3 接口,不要接前面板接口
- 把实体鼠标或无线鼠标的接收器插到输入设备的主机(HOST)端口上
- 从输入设备的 HID 端口接一根线,直接连到游戏主机的后置 USB 口,中间不要经过集线器
- 从输入设备接控制线到副机。KMBox B+、MAKCU、Teensy 或 Arduino 是 USB 串口连接,KMBox Net 则是网络端的那根线
- 先启动游戏主机,等它进入桌面,确认用手能移动光标。在确认之前不要继续往下做
- 启动副机,然后安装或确认 DMA 卡所需的 FTDI 驱动,以及输入设备所需的串口或网络驱动
- 打开辅助,先连接 DMA 卡,再连接输入设备。运行设备的移动测试,观察游戏主机上的光标自己移动
- 如果你想把叠加层显示在主显示器上,融合器要接在游戏主机和显示器之间的视频链路上。它根本不属于输入链路
每根线传输的是什么
这四根线传输的是四种完全不同的数据,把它们搞混是大多数接线错误的根源。
| 链路 | 方向 | 传输内容 | 游戏主机认为它是什么 |
|---|---|---|---|
| 鼠标到输入设备 | 单向,流入设备 | 你的手部操作:移动、按键和滚轮的 HID 报告 | 什么都不是。这根线在输入设备的另一侧,游戏主机永远看不到它 |
| 输入设备到游戏主机 | 单向,流入游戏主机 | 一个合并后的 HID 鼠标数据流:你的手部操作加上注入的移动 | 一只插在鼠标端口上、行为也像鼠标的 USB 鼠标 |
| DMA 卡到副机 | 主要是从游戏主机流出 | 物理内存数据,经 DMA 卡的 USB 数据桥接传输 | 什么都不是。对游戏主机来说 DMA 卡是一个 PCIe 设备,它的 USB 一侧对操作系统不可见 |
| 输入设备到副机 | 单向,流入设备 | 通过串口或 IP 发送的小型移动和点击指令 | 什么都不是。这条链路终止于输入设备,永远不会到达游戏主机 |
四根线中有两根在物理上连接着两台机器,但它们都不会把副机作为一台电脑呈现给游戏主机。这种隔离就是这套设计本身,也是它全部的意义所在。
副机的指令从哪里进入信号链
指令在输入设备内部进入信号链,这也是它们唯一能进入的地方。设备一侧是鼠标,另一侧是游戏主机,它本来就在两者之间转发报告流。来自副机的移动指令会变成同一个报告流中的一条额外报告,或者变成对下一条报告的调整。它使用的端点和描述符与你手部操作的报告完全相同。游戏主机上不会出现第二台设备、第二个接口或单独的通道。合并发生在游戏主机的前一跳,此后的一切在性质上与你的手部操作毫无区别。
警告
为什么游戏主机绝不能直接看到副机
这条规则经常被说得很随意,所以有必要把它的含义讲准确。确实有两根线在物理上连接着两台机器(DMA 卡的数据线和输入设备的两端),但它们都不会把你运行辅助的机器作为一台机器呈现给游戏主机。DMA 卡是一个匿名的 PCIe 设备,游戏主机的操作系统完全看不到它的 USB 一侧;输入设备则是一只鼠标。绝对不能存在的,是任何让两台电脑成为对等节点的东西。这就排除了它们之间的网线或共用交换机网段、远程桌面或 VNC 会话,以及文件共享或映射网络驱动器。两台机器都会写入的云同步文件夹也同样排除在外。在两台机器上登录同一个账号也一样,两台机器都会枚举的 KVM 或共享外设也一样。这些做法中的每一种都会在游戏主机上留下痕迹,比如一条路由、一个共享、一个会话或一条设备历史记录。每一种都指向旁边还有第二台电脑在做着什么。你搭建的这条信号链,设计目标就是让游戏主机上没有任何东西知道副机的存在。不要只因为拷一个配置文件方便,就用一根网线把这一切毁掉。也不要因为在游戏主机上下载更快,就在游戏主机上运行辅助自己的更新程序。
如何逐段测试信号链
搭建完成后测试一次,以后每次出问题时再测一次。每一步只测试一段链路,所以第一个失败的步骤就告诉你该从哪里下手。
- 只开游戏主机:移动你自己的鼠标。如果光标会动,说明鼠标、输入设备的透传和 HID 链路都没问题
- 游戏主机,设备管理器:检查你这套配置只列出了一只鼠标,并且 DMA 卡显示为 PCIe 设备、没有黄色警告三角
- 副机,设备管理器:检查 DMA 卡的 FTDI 设备存在,并且输入设备显示为 COM 端口或网络适配器
- 副机:运行 DMA 卡的读取速度测试工具。速度正常,就能独立于其他所有环节证明内存链路没问题
- 副机:如果输入设备是网络版,就 ping 它;如果是串口版,就打开它的端口。这一步要在打开辅助之前做
- 副机,辅助:连接 DMA 卡,然后运行输入设备的移动测试,在手不碰鼠标的情况下观察游戏主机上的光标移动
- 到这一步才开启任何瞄准功能。如果你跳过了前面的某一步,这时出现的问题看起来会像辅助的 bug,但其实不是
最终接线检查清单
- 实体鼠标只插在输入设备上,绝不同时插在游戏主机上
- 输入设备的 HID 线接在游戏主机的后置接口上,中间没有集线器
- DMA 卡的线插在数据口,而不是刷写口
- DMA 卡的线接到副机的后置 USB 3 接口,中间没有集线器或扩展坞
- 两台机器之间没有任何网线、远程桌面、文件共享或同步文件夹相连
- 游戏主机上没有安装任何与辅助相关的东西,包括更新程序和压缩包
- 游戏主机的设备管理器里只显示一只鼠标,也没有哪个条目以古怪的名称暴露出你输入设备的制造商
- 如果用了融合器,它只接在视频链路上,不接触这条信号链中的任何东西
接线常见问题
输入设备的控制线能改接到游戏主机上吗?
不能,这样会破坏整个设计。指令之所以来自副机,是因为软件运行在副机上。把控制链路接到游戏主机,就等于在你想让它保持毫不起眼的那台机器上,多出一个来自同一设备的第二个接口。
可以用 KVM 让两台机器共用一套键盘鼠标吗?
经过输入设备的那只鼠标不行,键盘也要慎重考虑。KVM 是两台机器都会枚举的设备,这恰恰就是这条信号链要避免的那种共享痕迹,所以给副机单独配一个便宜的键盘。
副机需要联网吗?
通常需要,用于辅助自身的验证和更新。让它通过单独的网线或 Wi-Fi 连接到你的路由器,拥有自己独立的网络连接,不要共用游戏主机的网络连接。
融合器在这张图里处于什么位置?
它不属于输入链路。融合器位于视频链路上,把游戏主机的画面输出和副机的叠加层合成为显示器上显示的内容。它与鼠标输入毫无关系,也无法移动光标。
如果我只想要雷达,还需要输入设备吗?
不需要。雷达或透视(ESP)叠加层都是只读的,只需要 DMA 卡、副机和一块屏幕。输入设备是整套方案中唯一会对游戏产生动作的部分,所以等你决定需要这个功能时再加上它。
这样接线能让整套配置不被检测到吗?
不能。它消除了游戏主机上容易被发现的软件信号,并让两台电脑之间看不出明显的关联。但它消除不了 PCIe 设备、输入设备的 USB 身份以及你瞄准的形态,这些才是真正的暴露点,任何走线方式都改变不了它们。
资料来源
这是实测接线:线缆顺序和五个节点来自我们实际搭建这些配置的经验,而不是来自任何公开文档。
继续阅读
仍然没有解决?在 Discord 提交工单
全部指南