☰
Sunshine虚拟手柄实操指南:没有实体手柄也能串流游戏
2026/10/19 3:19:27 网站建设 项目流程

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 / xseriesXbox 360 / One / Series
ds4 / ds5DualShock 4 / PS5
switchSwitch 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询