Skip to content

FanControl 1.5.0 —— 界面中英双语(黑苹果主板风扇调速 / Nuvoton NCT679x)

Choose a tag to compare

@glassecho glassecho released this 12 Oct 02:15
· 2 commits to main since this release

FanControl 1.5.0

macOS 下的主板风扇调速工具(面向 Hackintosh)。给主板 Super I/O 芯片 Nuvoton NCT679x
补上 SMC 写能力,让黑苹果也能按温度曲线调速。

English? Jump to the English section ↓


这一版的头等大事:界面支持中英双语

跟随系统语言自动切换,没有任何设置项。 英文系统上第一次打开就是英文 ——
包括菜单栏面板、监控页、提示气泡,连 Finder / 程序坞里显示的 app 名字也跟着变。

你的系统语言 界面 app 名字
简体中文 简体中文 风扇控制
繁体中文 简体中文 風扇控制
英文 / 其他 English FanControl

约 150 条文案全部双语。

繁体中文用户目前看到的是简体界面 + 繁体 app 名。完整的 zh-Hant 翻译在计划中 ——
实现上只需要在 app/L.swift 里再加一个语言分支,欢迎 PR。

想强制指定语言(不改代码):

FANCONTROL_LANG=en /Applications/FanControl.app/Contents/MacOS/FanControl
defaults write local.hackintosh.FanControl UILanguage en   # 或 zh
defaults delete local.hackintosh.FanControl UILanguage     # 恢复跟随系统

下载哪个?

文件 大小 给谁用
FanControl-1.5.0.dmg 1.9 MB 普通用户装这个 —— 双击即可
FanControl-1.5.0.pkg 1.4 MB 同上,也可以用命令行装
FanControl-1.5.0-src.zip 3.2 MB 想自己编译的人

⚠️ 本软件没有 Apple 开发者签名(作者没有证书),Gatekeeper 会拦。
右键点安装包 → 打开 → 再点一次「打开」即可;
或到「系统设置 → 隐私与安全性」拉到底点「仍要打开」。


适用条件(缺一不可)

条件 要求
系统 Hackintosh(能改 OpenCore 的 config.plist)—— 真 Mac 不适用
主板 Super I/O Nuvoton NCT679x:NCT6790D…NCT6798D、NCT679BD,或 NCT6779D
架构 Intel —— Apple Silicon 不适用

macOS 13 / 14 / 15 / 26 均可。


这一版还有什么

1.5.0(本版)

  • 🆕 界面中英双语(见上)。
  • 🔧 顺手修掉三处内部隐患 —— 这三处都是「界面一旦变英文就必然出问题」的:
    • needsInstall 不再靠匹配提示文字(原来是 text.contains("安装"),
      英文提示里根本没有「安装」二字,判断必然失效),改由 fanctl 的退出码判断。
    • 生成 gpufand 配置时的注释头从中文改成 ASCII(# generated by FanControl),
      避免非 ASCII 内容进到 C 解析的配置文件里。
    • 手动模式下 duty 写失败时也会正确置上「需要安装辅助程序」提示。

实现方式(给要改代码的人):没有用 NSLocalizedString + .lproj ——
本项目的 app 是 swiftc 直接编的、没有 Xcode 工程,String Catalog 不会被处理。
改成 app/L.swift 里的纯 Swift 文案表,中英并排写在同一行:

var modeSilent: String { zh ? "安静" : "Silent" }

好处是漏写就是编译错误,不会等到用户切到英文才发现某处还是中文。
app 名字那一层另走 Cocoa 的 bundle 本地化机制(app/{en,zh-Hans,zh-Hant}.lproj/)。

1.4.1

  • 🆕 菜单栏面板里可以直接开关「开机自启」—— 走系统的登录项机制(SMAppService),
    在「系统设置 → 通用 → 登录项」里也能看到和关掉。
  • 🔧 修了五处内部隐患(版本号单一来源、子进程管道死锁、传感器面板动态发现 CPU 核心、
    临时配置文件唯一文件名、发布版二进制不含本机开发路径)。

1.4.0

  • 🆕 菜单栏常驻显示:可任选「风扇图标 / CPU 温度 / GPU 温度 / CPU 占用 / 内存 /
    风扇转速 / 显卡风扇 / 网络」中的几项显示在菜单栏上,每项各自带图标。

1.3.0

  • 🆕 「监控」页:8 个可独立开关的面板 —— CPU(总占用 / 每核心 / 负载 / 走势图)、
    显卡、内存、存储、网络、进程、传感器、系统。开关会记住,全部只读、不需要 root。

1.2.0

  • 🆕 显卡监控(只读):风扇转速 / 占空比 / 温度 / 功耗 / 核心频率 / 占用率。

装完必须做两件事

  1. 把 /usr/local/share/fancontrol/SMCSuperIO.kext 放进 EFI/OC/Kexts,替换同名文件,
    并在 config.plist → Kernel → Add 里注册 ——
    它必须排在 VirtualSMC.kext 之后(OpenCore 按顺序注入,依赖没就位的会被静默跳过)。
  2. 核对水泵通道:pump_channel 默认是 ch6(作者本机布局),换机器必须确认。

装完跑一次自检确认:

zsh /usr/local/sbin/fancontrol-check

校验(SHA-256)

cc3655b3dbc7e4e8ed08515e93817a165d348a7a80687504b98b919cfd869823  FanControl-1.5.0.dmg
219fd793453fa56d1369dc20b1f1055fba07ed403dcaa167fba8bea2a6493fbd  FanControl-1.5.0.pkg
7e7d58d0401b0f33e61ac18f749e232e79b78f1f6ee9cec18e4aadce6699c4f3  FanControl-1.5.0-src.zip

已知限制

  • 显卡风扇只能看、不能调 —— 由显卡固件的 PowerPlay 表 + 驱动管理,
    macOS 没有对外开放的写入接口。
  • 真 Mac、Apple Silicon 不适用。
  • 繁体中文的界面文案仍是简体(app 名是繁体)。完整 zh-Hant 翻译在计划中。
  • 界面是固定深色,跟随系统外观在计划中。
  • 没有 Apple 开发者签名,Gatekeeper 会拦。

反馈

作者手上只有一台机器(ASUS 主板 + NCT679BD),特别希望有不同主板、不同芯片的朋友帮忙一起测。
请到 Issues 反馈芯片型号、自检结果、
能不能调速、水泵通道是几号。


English

FanControl 1.5.0 for Hackintosh — motherboard fan control on macOS.

It gives hackintoshes the ability to control motherboard fans by temperature curve, by patching a gap in
VirtualSMC's SMCSuperIO. Six modes (silent / standard / performance / full / manual / custom curve),
plus read-only system and GPU monitoring and a menu-bar readout.

Headline: the UI is now bilingual

It follows your system language automatically — there is no setting to change. On an English
system it's in English the moment you open it: the main window, the Monitor page, the menu-bar popover,
tooltips, and the app name shown in Finder and the Dock.

Your system language UI App name
Simplified Chinese 简体中文 风扇控制
Traditional Chinese 简体中文 風扇控制
English / anything else English FanControl

Around 150 strings, all bilingual.

Traditional Chinese users currently get the Simplified UI with a Traditional app name. A full
zh-Hant translation is planned — implementation-wise it's one more language branch in
app/L.swift. PRs welcome.

To force a language without touching the code:

FANCONTROL_LANG=en /Applications/FanControl.app/Contents/MacOS/FanControl
defaults write local.hackintosh.FanControl UILanguage en   # or zh
defaults delete local.hackintosh.FanControl UILanguage     # back to following the system

Which file?

File Size For whom
FanControl-1.5.0.dmg 1.9 MB Normal use — just double-click
FanControl-1.5.0.pkg 1.4 MB Same thing, installable from the command line
FanControl-1.5.0-src.zip 3.2 MB If you want to build it yourself

Requirements — all three, no exceptions:

  • Hackintosh (you must be able to edit OpenCore's config.plist) — not for real Macs
  • Nuvoton NCT679xD or NCT6779D Super I/O chip
  • Intel — the kext is built for x86_64; Apple Silicon is not supported
  • macOS 13 / 14 / 15 / 26

New in this release

  • 1.5.0 — Bilingual UI (English / Simplified Chinese) that follows your system language, with no
    setting to change — including the app name in Finder and the Dock. Plus three internal fixes that
    the English UI would otherwise have broken: needsInstall no longer keys off matching a Chinese
    prompt string (it uses the helper's exit code instead), the generated gpufand config header is now
    ASCII, and manual mode now sets the "helper missing" flag when a write fails.

    Implementation note: this does not use NSLocalizedString + .lproj — the app is compiled
    directly with swiftc and has no Xcode project, so a String Catalog would never be processed.
    Instead, app/L.swift holds a plain Swift string table with both languages side by side on the
    same line (zh ? "安静" : "Silent"), which means a missing translation is a compile error.
    The app-name layer uses Cocoa bundle localization (app/{en,zh-Hans,zh-Hant}.lproj/).

  • 1.4.1 — Launch-at-login toggle right in the menu bar panel (uses the system login-items
    mechanism, so it also shows up under System Settings → General → Login Items). Plus five internal
    fixes: single-source version number, subprocess pipe deadlock, dynamic CPU-core discovery in the
    sensor panel, unique temp config filenames, and no more dev paths baked into the release binary.

  • 1.4.0 — Persistent menu bar readout: fan icon / CPU temp / GPU temp / CPU load / memory /
    fan RPM / GPU fan / network — each item with its own icon, toggleable from the popover.

  • 1.3.0 — A "Monitor" page with 8 independently toggleable panels (CPU / GPU / memory / storage /
    network / processes / sensors / system). Read-only, no root needed.

  • 1.2.0 — Read-only GPU monitoring: fan RPM, duty, temperature, power, core clock, utilization.

Two things you must do after installing

  1. Copy /usr/local/share/fancontrol/SMCSuperIO.kext into EFI/OC/Kexts, replacing the existing file,
    and register it in config.plist → Kernel → Add. It must come after VirtualSMC.kext —
    OpenCore injects in order, and a kext whose dependencies aren't in place yet is silently skipped.
  2. Verify the pump channel. The default is ch6 (the author's own board layout) and must be
    re-checked on any other board.

Then run the self-check to confirm your chip is supported:

zsh /usr/local/sbin/fancontrol-check

Full walkthrough: PORTING.md
(English) · 移植说明.md (中文)

Checksums (SHA-256)

cc3655b3dbc7e4e8ed08515e93817a165d348a7a80687504b98b919cfd869823  FanControl-1.5.0.dmg
219fd793453fa56d1369dc20b1f1055fba07ed403dcaa167fba8bea2a6493fbd  FanControl-1.5.0.pkg
7e7d58d0401b0f33e61ac18f749e232e79b78f1f6ee9cec18e4aadce6699c4f3  FanControl-1.5.0-src.zip

Known limitations

  • GPU fans are read-only — managed by the GPU firmware's PowerPlay table; macOS exposes no writable
    interface.
  • Real Macs and Apple Silicon are not supported.
  • The Traditional Chinese UI text is still Simplified (the app name is Traditional). A full
    zh-Hant translation is planned.
  • The UI is dark-only; following the system appearance is planned.
  • No Apple Developer signature — Gatekeeper will block it. Right-click the installer → Open →
    Open again, or use System Settings → Privacy & Security → Open Anyway.

Why it needs the kext

Installing a kext into your EFI is a physical prerequisite for controlling motherboard fans on a
hackintosh. There is no way around it — the fan keys simply do not exist in SMC until SMCSuperIO
publishes them. If a tool claims to control motherboard fans on a hackintosh without touching the EFI,
it is either reading the GPU or it isn't working.

Credits

Kext derived from shohart/gpufan →
VirtualSMC (SMCSuperIO by vit9696, joedm). BSD-3-Clause.
See NOTICE and THIRD-PARTY/ for attribution. Not affiliated with, or endorsed by, the upstream authors.

Disclaimer

This software changes motherboard fan speeds and requires you to modify your EFI.
Any change to your EFI / OpenCore configuration risks making the machine unbootable — back up first.
Provided "as is", without warranty of any kind. Do not put a water-cooling pump under speed control.