Sunshine虚拟手柄实操指南:没有实体手柄也能串流游戏
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
Sunshine 是 Moonlight 客户端配套的自托管游戏串流服务器,它的虚拟手柄功能可以在串流时把手机、平板或客户端手柄的输入,注入为主机上真实存在的 HID 手柄,解决「游戏只认手柄,而你手上只有触屏」的操控问题。整条链路只有两件事:装对输入驱动、配好gamepad参数。
效果预览:Moonlight 连接后,你的设备会被识别成什么
Sunshine 在每次串流会话开始时都会创建一个虚拟手柄节点,游戏和系统看到的就是一个标准控制器,不需要你在主机上做任何额外操作。
gamepad取默认值auto时,Sunshine 按 Moonlight 客户端上报的设备特征选型:带运动传感器或触控板的设备会模拟成 PlayStation 系手柄,其余设备模拟成 Xbox 系手柄。- Windows 上游戏通常直接看到 "Xbox 360 Controller" 或 "DualShock 4";Linux 上对应的是通过 uinput 注册出来的虚拟输入节点。
- 重连或会话结束时节点会被重建,你不需要手动"卸载"手柄。
要串流的目标游戏或桌面,可以在 Web UI 的应用管理里维护:
🔧 Windows 与 macOS 的虚拟手柄驱动怎么选
虚拟手柄在桌面系统上依赖具体驱动后端,Windows 有两个可选,能力差异很大,先确认要装哪个再动手。
- Virtual HID Broker(libvirtualhid):官方主推方向,需单独安装并持有付费机器授权,要求驱动版本 2026.914.1218.10 或更新。它能创建 Xbox 360、Xbox One/Series、DualShock 4/5、Switch Pro 和通用(generic)手柄。
- ViGEmBus:遗留替代方案,只能模拟 Xbox 360 和 DualShock 4,项目已停止维护;若选用必须是 1.17 及以上版本。
- macOS:虚拟手柄同样依赖 Virtual HID Broker,需单独安装 libvirtualhid 的 DMG 包,并在"系统设置 → 隐私与安全性"中授权。
安装完成后,在 Web UI 中把gamepad_driver设为all(有 Broker 就优先 Broker,否则回落 ViGEmBus)、virtualhid(只用 Broker)、vigembus(只用 ViGEmBus)或none(关闭虚拟手柄,不影响键鼠)。官方建议安装或更新驱动后重启一次电脑,让驱动稳定加载。
🐧 Linux 解锁 uinput 权限:把用户加入 input 组
Linux 的虚拟手柄走 libvirtualhid 的 uinput 后端,前提是运行 Sunshine 的用户能读写/dev/uinput,安装完成后只需补一步权限。
sudo usermod -aG input $USER安装过程已经创建了input组并配置好 uinput 权限,加组后注销重新登录即可生效。如果连上了但游戏收不到输入,先看日志中带[libvirtualhid]前缀的行;在 Wayland 上若 seat 不是 seat0,虚拟设备名会带上 seat 后缀,docs/troubleshooting.md 给出了对应的 udev 规则写法。
⚙️ 配置 gamepad 参数:auto 自动选型与手动指定
手柄类型由gamepad参数决定,默认auto就能覆盖绝大多数场景,只有游戏明确只认某款手柄时才需要手动指定。
controller = enabled gamepad = auto可选值与对应的模拟设备:
| 取值 | 模拟的手柄 |
|---|---|
| auto | 按客户端设备特征自动选择 |
| generic | 通用 HID 手柄 |
| x360 / xone / xseries | Xbox 360 / One / Series |
| ds4 / ds5 | DualShock 4 / PS5 |
| switch | Switch Pro 手柄 |
注意两点:当gamepad_driver为vigembus时,只有auto、x360、ds4可用,这是 ViGEmBus 自身的能力上限;controller参数控制是否允许客户端发送手柄输入,默认enabled,除非你只想要键鼠串流,否则不要动它。参数详情见 docs/configuration.md。
🎮 微调自动选型:motion_as_ds4 与 touchpad_as_ds4
gamepad = auto的判定由两个默认开启的开关驱动,出现"选错了手柄类型"时改它们即可,不必切到手动模式。
motion_as_ds4(默认 enabled):客户端手柄上报运动传感器时,按 PlayStation 系手柄模拟。touchpad_as_ds4(默认 enabled):客户端手柄带触控板时,按 PlayStation 系手柄模拟。ds4_back_as_touchpad_click(默认 enabled):让 Select/Back 输入同时触发 PS 系触控板点击,个别只认 XInput 的游戏可以关闭它。virtualhid_randomize_mac:为 PlayStation 系虚拟手柄随机化 MAC 地址,用于应对按 MAC 识别设备的场景。
🩺 故障排除页定位问题:驱动、参数、权限三处对照
虚拟手柄无反应时,按"驱动 → 参数 → 权限"的顺序排查,Web UI 的故障排除页能一次性给出前两项的状态。
- 页面会显示 ViGEmBus 是否已安装、版本是否兼容,以及 Virtual HID Broker 的驱动版本与授权状态;未授权或版本过旧时,驱动后端不会创建手柄节点。
- 核对
gamepad与gamepad_driver的取值是否符合预期(vigembus 下确实只剩 x360/ds4 可选)。 - Linux 上确认运行用户已在 input 组;Sunshine 会把底层诊断以
[libvirtualhid]前缀转发到日志,报错信息会直接指向具体环节。
虚拟手柄的实现集中在 src/platform/virtualhid_input.h 与 third-party/libvirtualhid/,配置项清单以 docs/configuration.md 为准。按"装驱动 → 配类型 → 看故障排除页"这条路径走完,没有实体手柄的设备就能作为串流输入使用。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考