恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Steam Deck Tools 风扇控制(Fan Control)实战指南:在 Windows 上复刻 SteamOS 风扇曲线
首页
资讯中心
/
Steam Deck Tools 风扇控制(Fan Control)实战指南:在 Windows 上复刻 SteamOS 风扇曲线
Steam Deck Tools 风扇控制(Fan Control)实战指南:在 Windows 上复刻 SteamOS 风扇曲线
发布时间:2026/10/14 2:07:50
桌面应用系统底层【免费下载链接】steam-deck-tools(Windows) Steam Deck Tools - Fan, Overlay, Power Control and Steam Controller for Windows项目地址https://gitcode.com/gh_mirrors/st/steam-deck-tools点击查看免费下载本指南以 docs/fan-control.md 为核心结合仓库源码讲解 Steam Deck Tools 中 Fan Control 模块的完整原理与用法。你将了解它如何通过直接操作 ECEmbedded Controller嵌入式控制器读写风扇转速、如何借助 LibreHardwareMonitor 采集 APU/CPU/GPU/SSD/电池温度并映射为 RPM以及如何安全地在 Default、SteamOS、Max 等模式间切换规避反作弊风险并评估硬件风险。Steam Deck Tools 的 Fan Control 是一个面向 Windows 的高度实验性风扇控制工具其设计目标是复刻 SteamOS 上的linux/jupiter-fan-control.py风扇调速逻辑。它不依赖厂商驱动而是直接操纵 EC 的硬件寄存器来读写风扇目标转速与实测转速因此需要管理员权限并且只会在**通过设备校验的 Steam DeckLCD/OLED**上工作。Fan Control 界面属性网格实时展示各传感器名称、当前值、平均值与计算转速截图来自 docs/images/fan_control.png1. 获取与运行前提1.1 获取构建产物可以从项目的 Releases 页面下载最新预编译版本安装包为SteamDeckTools-version-setup.exe安装脚本见 scripts/SteamDeckTools_Setup.nsi。如需自行编译可参考 docs/development.md执行scripts/build.bat后产物位于build-release/。1.2 管理员权限要求Fan Control 需要通过inpoutx64.dll直接读写 I/O 端口与物理内存因此必须以管理员身份运行。这一要求体现在 FanControl/app.manifest 中requestedExecutionLevel levelrequireAdministrator uiAccessfalse /同时 FanControl/FanControl.csproj 将inpoutx64.dll作为随应用分发的原生依赖CopyToOutputDirectory用于访问 EC 硬件。此外从源码看温度数据还依赖 LibreHardwareMonitor 库对硬件传感器的枚举因此运行前应保证必要的运行库如 Microsoft Visual C Redistributable已安装参见 docs/README.md。提示由于直接操作内核内存安全软件或反作弊系统可能将其标记为异常行为。相关风险与规避策略见第 5 节。2. 三种实际四种工作模式原文档说明 Fan Control 提供 3 种模式从当前源码看FanMode枚举实际定义了 4 个取值见 CommonHelpers/GlobalConfig.cspublic enum FanMode : uint { Default 17374, Silent, SteamOS, Max }各模式的行为由 FanController.SetMode() 决定模式说明底层实现Default完全交给 EC 自动控制风扇设备出厂默认行为Vlv0100.SetFanControl(false)关闭用户接管SteamOS复刻jupiter-fan-control.py的 SteamOS 风扇曲线Vlv0100.SetFanControl(true) 按温度计算 RPMSilent安静模式实验性仅在 DEBUG 构建下通过EnableExperimentalFeatures暴露指数型曲线默认 4000 RPM 对应 85℃Max全速运转恒定输出MAX_FAN_RPM即 0x1C84 7300 RPM说明原文档写作时2022 年 11 月前后仅列出了 3 种模式仓库源码中已存在Silent枚举值及其配置文件因此实际可用的模式为 4 种。其中Silent模式由 FanControl/Settings.cs 中的EnableExperimentalFeatures控制暴露该属性直接取自Instance.IsDEBUG即仅在调试构建下可见。2.1 模式切换入口在 FanControlForm 中模式切换有三条路径主窗口模式下拉框 / 系统托盘右键菜单点击后调用setFanMode()将选择写入Settings.Default.FanMode并持久化与其他模块联动Fan Control 通过内存映射文件SharedDataFanModeSetting见 CommonHelpers/SharedData.cs对外发布当前模式并可接收其他模块请求的模式变更SharedData_Update()窗口关闭时回退FanControlForm_FormClosed中强制SetMode(FanMode.Default)保证退出后风扇控制权交还 EC。另外程序会监听系统电源事件从休眠/睡眠恢复时PowerModeChanged的Resume分支会重置硬件枚举并重新应用当前模式FanControlForm.cs。3. 工作原理从 EC 寄存器到 RPM3.1 直接操控 ECVLV0100Steam Deck 的 EC 固件标识为VLV0100其封装位于 CommonHelpers/Vlv0100.cs。该实现对 EC 的控制分为两个层面内核驱动Kernel Drivers当用户选择 SteamOS / Max / Silent 等非 Default 模式时会加载内核驱动以开启对 EC 的接管I/O 端口直接读写通过inpoutx64.dll对固定物理内存地址做读写地址来自 DSDT 表并写死常量地址用途FSLO_FSHI0xFE700B00 0x92读取/写入目标风扇转速GNLO_GNHI0xFE700B00 0x95设置风扇增益GainFRPR0xFE700B00 0x97设置转速爬升率Ramp RateFNRL_FNRH0xFE700300 0xB0读取实测风扇转速FNCK0xFE700300 0x9F风扇状态检查BATH_BATL0xFE700400 0x6E读取电池温度IO6C端口0x6C写入0xCC启用用户控制 /0xCD交还 EC核心调用链为SetFanControl(true)设置 Gain10、RampRate10并向端口0x6C写入0xCC表示风扇由用户接管SetFanControl(false)Default 模式RampRate 改为 20写入0xCD交还 EC 自动控制SetFanDesiredRPM(rpm)将 RPM 写入FSLO_FSHI并钳制在MAX_FAN_RPM7300以内GetFanRPM()从FNRL_FNRH读回当前实测转速。风险提示原文档明确强调以上内存地址是从 BIOS 提供的 DSDT 中提取的可能随 BIOS 更新而变化。完整风险说明见 docs/risks.md请在升级 BIOS 后留意风扇控制是否异常。3.2 设备校验机制为防止在不兼容设备上误操作损坏硬件Vlv0100在打开时会读取固件版本、Board ID 与 PDCS 并进行白名单校验CommonHelpers/Vlv0100.cs。当前支持Steam Deck LCD固件0xB030BoardID0x6/0xASteam Deck OLED固件0x1050BoardID0x5同时启用电池大端序温度与充电上限特性。3.3 传感器采集与 RPM 计算温度数据来自LibreHardwareMonitorFanController 会递归遍历硬件树visitHardware按硬件类型、硬件名、传感器类型与名称四重条件匹配目标传感器见 FanSensor.Matches()。当前注册的 5 路传感器见 FanControllerSensors.cs传感器来源匹配目标SteamOS 曲线Silent 曲线APUAMD Custom APU 0405/0932功耗PackageW恒定 1500 RPM恒定 1500 RPMCPUAMD Custom APU温度Core Tctl/Tdie二次曲线指数曲线GPUAMD Custom GPU温度GPU Core二次曲线指数曲线SSD存储设备温度PID 控制PID 控制BattECVLV0100电池温度恒定40℃ 请求 2000 RPM同左读数平滑每个传感器维护一个滑动窗口AvgSamples默认 20只有当新值与窗口末值的差超过ValueDeadZone时才入队最终以窗口均值参与计算见 FanSensor.Update()。无效值如 ≤InvalidValue会被丢弃避免异常读数导致风扇骤变。四种曲线模型FanSensor.ProfileConstant恒定直接输出MinRPM若输入超过MaxInput则升至MaxRPM。典型用于 APU恒 1500 RPM与电池40℃ 时 2000 RPMQuadratic二次rpm A·input² B·input C。SteamOS 模式的 CPU/GPU 曲线使用A2.286、B-188.6、C5457输入范围 55~90℃Exponential指数rpm A^(input-B) C其中B Silent4000RPMTemp - 28。Silent 模式的 CPU/GPU 曲线默认取A1.28、C3000即温度达到Silent4000RPMTemp默认 85℃时接近 4000 RPMPID比例-积分-微分用于 SSD 温度控制默认Kp0、Ki-20、Kd0、目标点 70℃、上限 3000 RPM。积分项被钳制在MaxRPM内calculatePidRPM。最终风扇目标转速取所有传感器计算结果的最大值getDesiredRPM()FanController.cs再通过Vlv0100.SetFanDesiredRPM()写入 EC。整个循环由fanLoopTimer周期驱动若无法在 200ms 内取得全局互斥锁防止与其他进程冲突会保守地将当前目标转速上调 10%作为补偿FanController.Update()。4. 配置项说明Fan Control 的持久化配置由 FanControl/Settings.cs 定义存储于Settings注册表键下配置项默认值取值范围说明FanModeDefaultDefault / Silent / SteamOS / Max当前风扇模式应用启动时自动恢复AlwaysOnToptruetrue / false主窗口是否置顶Silent4000RPMTemp8570 ~ 90Silent 模式下达到 4000 RPM 所对应的温度点超出范围会被Math.Clamp强制收拢EnableExperimentalFeaturesDEBUG 构建为 true—由编译配置决定用于开放 Silent 等实验功能此外FanControlForm 还提供开机自启StartupManager注册为 Steam Deck Fan Control与始终置顶的托盘选项卸载时Instance.OnUninstall会自动关闭开机自启。5. 反作弊保护与安全使用5.1 反作弊确认机制由于非 Default 模式需要加载内核驱动并接管风扇控制可能触发部分游戏的反作弊检测。因此从 Default / 其他模式切换到 SteamOS 或 Max 前会弹出反作弊警告对话框AckAntiCheat()见 FanControlForm.cs 与 CommonHelpers/AntiCheatSettings.cs提供三个单选项Always show总是显示、Hide for current session本次会话隐藏休眠恢复后失效、Never show不再显示未确认点击 Abort则拒绝切换模式保证安全兜底当反作弊确认状态为NotYet且模式为 Default 时Fan Controller 会主动卸载内核驱动Instance.UseKernelDrivers false此时仅保留 Default 交还 EC 的安全行为FanController.Update()。5.2 推荐的安全配置依据 docs/README.md 的说明游玩启用反作弊的联机游戏时务必使用 Default 风扇模式不使用内核驱动时Fan Control 将失去优化的 SteamOS 风扇曲线即丧失自定义调速能力风扇行为回到 EC 默认控制。6. 已知限制与风险6.1 缺少 GPU 温度重要局限截至原文档写作时2022 年 11 月Windows 上无法读取 GPU 温度这使风扇控制存在不完整之处。设计上的补偿逻辑是GPU 与 CPU 处于同一颗 APU 芯片AMD Custom APU 0405/0932因此 GPU 温度大致与 CPU 相近SteamOS 曲线对 GPU 使用与 CPU 完全相同的参数见 FanControllerSensors.cs。但原文档明确警告由于缺少真实 GPU 温度设备仍存在过热损坏的可能请自行承担风险使用。从源码看GPU 传感器配置了InvalidValue 5.0f即读数低于 5℃ 时视为无效并丢弃FanControllerSensors.cs若 GPU 传感器完全匹配不到IsValid()会判定该模式存在无效传感器并在界面上显示警告sensorWarningLabel。6.2 整体风险Fan Control 属于整个 Steam Deck Tools 项目中风险相对较低的模块——它管理的是 EC 风扇控制而非 CPU/GPU 频率。但项目整体仍通过内核内存直接操作硬件见 docs/risks.md要点包括应用程序只会在通过设备校验的 Steam Deck 上启动尽量避免破坏设备内存地址硬编码自 DSDTBIOS 更新后可能失效或改变若在切换频率/功耗相关功能时发生 GPU 驱动锁死等罕见情况建议拔掉充电、长按电源键强制关机后重新启动。6.3 故障排查若 Fan Control 运行异常可参考 docs/troubleshooting.md确认项目依赖安装完整然后打开 Windows 事件查看器在Custom Events Administrative Events中查找.NET Runtime错误应用程序名为FanControl.exe的条目即为本模块的崩溃记录。7. 总结Steam Deck Tools 的 Fan Control 以 Windows 平台为目标复刻了 SteamOS 的jupiter-fan-control.py调速策略三种核心模式Default / SteamOS / Max加实验性的Silent覆盖交还 EC复刻 SteamOS 曲线全速三类典型需求底层实现通过对 VLV0100 EC 的内存映射读写 LibreHardwareMonitor 传感器枚举完成闭环温度 → 滑动平均 → 曲线计算恒定/二次/指数/PID→ 取最大 RPM 写入 EC安全设计包括设备白名单校验、反作弊确认弹窗、退出自动回退 Default、休眠恢复重置等主要局限是 Windows 下 GPU 温度缺失只能以 CPU 温度近似补偿存在过热风险请务必在使用前阅读风险说明并自行评估。继续阅读docs/risks.md风险说明、docs/README.md安装与依赖、CommonHelpers/Vlv0100.csEC 控制实现、FanControl/FanSensor.cs曲线计算逻辑。赞分享桌面应用系统底层【免费下载链接】steam-deck-tools(Windows) Steam Deck Tools - Fan, Overlay, Power Control and Steam Controller for Windows项目地址https://gitcode.com/gh_mirrors/st/steam-deck-tools点击查看免费下载相关推荐Fan Control终极指南Windows智能风扇控制软件完全教程Fan Control终极指南Windows智能风扇控制软件完全教程 想要彻底解决Windows电脑风扇噪音问题吗Fan Control正是你需要的智能风扇桌面应用智能硬件Fan Control终极指南免费Windows风扇控制软件快速上手Fan Control终极指南免费Windows风扇控制软件快速上手 你是否曾因电脑风扇噪音过大而烦恼或者担心硬件温度过高影响性能和寿命Fan Contr桌面应用智能硬件Fan Control终极教程Windows系统风扇控制完全指南Fan Control终极教程Windows系统风扇控制完全指南 你的电脑风扇是否总是在不该转的时候疯狂运转而在需要散热时却异常安静 这就是Fan C桌面应用智能硬件上一篇Cymist-2-v03-SFT环境友好型AI仅产生0.9kg CO2排放的绿色训练方案终极指南下一篇Godot Resource 基类全解析序列化、缓存、复制与场景本地化实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考