Mac 的風扇平常很安靜,但它現在轉多快、CPU 和 GPU 有多熱,系統並沒有一個隨手就能看到的地方。所以我做了 Fan Control:一個原生的 macOS 選單列小工具,打開就能即時看到風扇轉速、CPU/GPU 感測器平均溫度與最近 15 分鐘的走勢,需要時也能在管理員授權後手動調整風扇轉速。
目前最新版本是 v1.0.4(build 7),提供 Apple Silicon 與 Intel 通用的 Universal DMG,支援 macOS 15 以上,在 macOS 26 以上會適度採用 Liquid Glass 外觀。原始碼與安裝檔都公開在 GitHub,不需要登入就能下載。
下載 Fan Control v1.0.4 · 查看 GitHub 原始碼 · Fan Control 官網 · 繁體中文使用說明

Fan Control 能做什麼
- 常駐選單列:選單列可以分別選擇要顯示 RPM、CPU 溫度、GPU 溫度,以及單色的一分鐘迷你走勢圖。全部數字都關掉時,仍會保留圖示。
- 展開面板快速調速:面板內有最近一分鐘的 RPM 圖表、整數轉速輸入,以及 1,500/2,000/2,500 RPM 快捷按鈕(硬體不支援的轉速會自動省略),按「套用轉速」或「恢復自動調節」即可。
- 多風扇主畫面:v1.0.4 起,主畫面會把所有實際偵測到的風扇並排成卡片,每顆都有獨立的實際 RPM、1/5/15 分鐘走勢、韌體上下限、模式與目標轉速輸入。卡片會依視窗寬度換行,工具列上有「全部恢復自動」。
- 只畫真實資料:每秒取樣一次,在背景執行緒讀取。沒有讀值的時段會留白,圖表最小保留 200 RPM 的縱向範圍,避免把小幅的感測器雜訊放大成劇烈起伏。主視窗暫停圖表時,感測器讀取與選單列走勢都會繼續更新。
- 資料留在本機:走勢資料只放在記憶體中,最多保留本次執行期間 15 分鐘,不會上傳。
- 原生 Mac 外觀:使用系統字體與 SF Symbols,淺色、深色跟著系統走。macOS 26 以上,互動的控制區使用 Liquid Glass;macOS 15 使用標準材質;開啟「降低透明度」時改用不透明背景。數據與圖表本身不套玻璃效果,維持清楚易讀。


系統需求
- 作業系統:macOS 15 以上;macOS 26 以上會使用 Liquid Glass 控制區。
- 處理器:Universal 版本,同時包含 Apple Silicon(arm64)與 Intel(x86_64)。
- 溫度感測器對應:涵蓋 M1 到 M4,以及常見的 Intel 感測器代碼。讀不到的溫度不會亂填,會直接標示為無資料。
老實說明測試範圍:目前只有我手上的 M4 Mac mini 做過實機驗證,包含即時監測、1,500/2,000 RPM 手動調速、降速與恢復自動。macOS 15、Intel 與其他機型還沒有實機測試,能編譯成 Intel 版本不代表已在 Intel 硬體上驗證過。v1.0.4 的實機調速與實體多風扇調速也還在待驗證清單上。如果你在其他機型上試用,非常歡迎回報結果。
安裝與使用
- 到 v1.0.4 Release 下載
Fan-Control-1.0.4-macos-universal.dmg。Release 也附上.dmg.sha256校驗檔,SHA-256 為a966d8cbf08b88111bf34a5ffe13df582f97899658172c8fc91c3b27fcc5ad45。 - 開啟 DMG,把 Fan Control.app 拖到「應用程式」(Applications)資料夾。要啟用風扇控制,App 需要放在
/Applications或~/Applications。 - 打開 App 就能開始監測,單純監測不需要管理員權限。關閉主視窗後,App 仍會留在選單列。
- 想手動調速時,在選單面板或設定按「啟用風扇控制」。macOS 可能會要求管理員驗證,並請你到「系統設定 → 一般 → 登入項目與延伸功能」允許 Fan Control。App 不會收集或儲存你的管理員密碼。
- 確認面板顯示「可調速」後,選「手動」,在硬體回報的範圍內輸入目標轉速或按快捷按鈕,再按「套用轉速」。要交回 macOS 管理,按「恢復自動調節」。
從舊版升級:先恢復自動控制並結束舊版 App,再安裝新版。v1.0.4 的名稱統一為 Fan Control.app,安裝後請移除舊的「風扇管理 Fan Control.app」或「Macmini contoral.app」,避免出現兩份。從安裝位置開啟新版後,在設定按「重新啟動控制服務」,確認服務版本為 1.0.4(7)。
另外提醒:目前的安裝檔使用 Apple Development 簽署,尚未經過 Apple 公證。
調整風扇前,請先看這些安全設計與注意事項
動到風扇就是動到硬體散熱,所以我把「出狀況時先交回系統」當成最優先的設計原則:
- 目標值與實際轉速分開顯示:只有在模式與目標值都回讀確認後才會顯示寫入成功;實際 RPM 需要一點時間才會收斂。若硬體拒絕寫入,App 會顯示錯誤,請不要把沒套用成功的目標值當成實際轉速。
- 自動恢復機制:控制服務會在連線中斷、12 秒心跳租約逾時、系統熱狀態達到 serious/critical、服務正常結束,或服務重新啟動後,把它接手的風扇恢復為自動。App 在睡眠前與正常結束時也會先要求恢復自動。
- 感測器失效保護:手動控制期間,控制服務會自己取樣。風扇讀值連續 3 秒無效,或原本讀得到的 CPU/GPU 溫度消失,就會自動恢復,即使 App 的心跳還在。
- 不搶別人的控制權:如果是其他程式設定的手動模式,Fan Control 不會默默接管。
- 版本一致才允許寫入:App 會先確認正在執行的控制服務協定、版本與 build;遇到舊版服務會提示更新,這時仍可正常監測。
也要提醒:溫度是目前可讀取的 CPU/GPU 感測器平均值,不是機殼溫度或室溫。SMC 代碼與風扇寫入因機型而異,並不是 Apple 公開且穩定的 API。手動調速請在硬體範圍內進行,不確定時就按「恢復自動調節」,把風扇交還給 macOS。
技術筆記
- 以 Swift 與 SwiftUI 撰寫,選單列使用
MenuBarExtra,圖表依照 Apple Charts 設計指引;專案用 Swift Package 組織,分成共用核心 FanCore、主 App、特權輔助程式,以及唯讀取樣工具 MacminiProbe。 - 透過 IOKit 讀取 SMC。需要寫入風扇時,由內建的輔助程式經 Apple 的
SMAppService註冊為系統服務。 - 輔助程式只接受同一個 Apple 簽署團隊、且符合本 App bundle ID 的連線,App 也會反向驗證輔助程式的簽章。IPC 只開放設定目標、恢復、ping 與心跳,不提供任意 key 寫入、shell 指令或檔案路徑。
- 改動硬體前,會先把接手的風扇 ID 記錄在 root 擁有、權限 0600 的 journal 檔;恢復失敗時保留紀錄並重試。
- v1.0.4 重新建置並執行 29 項測試,全部通過,涵蓋數值解碼、寫入前的範圍與非有限值檢查、先記錄再寫入、外部手動模式保護、寫入失敗恢復、恢復紀錄與心跳邊界等。失效保護的測試使用模擬硬體,不等同實體故障測試。
- SMC 傳輸格式、風扇 key 慣例、Apple Silicon 風扇解鎖流程與各機型溫度 key 對應,參考並改寫自開源專案 exelban/Stats(MIT 授權),詳見 THIRD_PARTY_NOTICES。
想自己編譯的話,需要 Xcode 26 以上與有效的 Apple Development 或 Developer ID 簽署憑證,執行 ./scripts/build-app.sh 與 ./scripts/package-dmg.sh 即可產出 Universal App 與 DMG,細節請看 GitHub 上的 README。
下載與回饋
Fan Control 還很新,從 v1.0.0 到 v1.0.4 都是這幾天密集改出來的。如果你也想在選單列隨時掌握 Mac 的風扇與溫度,歡迎下載試用;在其他機型上的使用結果、問題或建議,都可以到 GitHub 告訴我。
- GitHub 專案:github.com/eqwgeryfgbdf/Fan-Control
- 最新版本下載:GitHub Releases
- 官網:fancontrol.emo-lab.com
這篇是實際踩過的部署筆記。若你要重做一次,建議先確認硬體與版本,再對照文中的關鍵步驟。