Repository navigation
FanControl 1.5.0 —— 界面中英双语(黑苹果主板风扇调速 / Nuvoton NCT679x)
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
- 🆕 显卡监控(只读):风扇转速 / 占空比 / 温度 / 功耗 / 核心频率 / 占用率。
装完必须做两件事
- 把
/usr/local/share/fancontrol/SMCSuperIO.kext放进EFI/OC/Kexts,替换同名文件,
并在config.plist → Kernel → Add里注册 ——
它必须排在VirtualSMC.kext之后(OpenCore 按顺序注入,依赖没就位的会被静默跳过)。 - 核对水泵通道:
pump_channel默认是ch6(作者本机布局),换机器必须确认。
装完跑一次自检确认:
zsh /usr/local/sbin/fancontrol-check- 中文详细步骤:
移植说明.md - English walkthrough:
PORTING.md
校验(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 systemWhich 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:needsInstallno 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 withswiftcand has no Xcode project, so a String Catalog would never be processed.
Instead,app/L.swiftholds 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
- Copy
/usr/local/share/fancontrol/SMCSuperIO.kextintoEFI/OC/Kexts, replacing the existing file,
and register it inconfig.plist → Kernel → Add. It must come afterVirtualSMC.kext—
OpenCore injects in order, and a kext whose dependencies aren't in place yet is silently skipped. - 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-checkFull 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.