風扇控制可以為您的系統帶來多種好處,例如在低 CPU 負載時完全停止風扇運行,從而使系統工作更安靜並節省電力。
概述
有多種適用於台式機和筆記本電腦的風扇控制解決方案。根據您的需求:
- Fancontrol(lm-sensors)——一個用 Bash 編寫的腳本,用於配置風扇速度。最適合那些通過 sysfs(5) 提供風扇控制的台式機和筆記本電腦。
- NBFC(筆記本風扇控制)——一個跨平台的筆記本電腦風扇控制解決方案,用 C# 編寫,在 Mono 運行時下工作。最適合最新型號,不受 Fancontrol 支持的筆記本電腦。
- NBFC-Linux——一個用 C 語言編寫的輕量級 NBFC 實現。它不依賴於 Mono 框架,可以作為 nbfc-linuxAUR 或 nbfc-linux-gitAUR 安裝。
- Dell 筆記本電腦——一些 Dell 筆記本電腦的替代風扇控制守護進程。
- 聯想 ThinkPad 筆記本電腦——一些聯想 ThinkPad 筆記本電腦的風扇配置。
- 聯想 Legion 筆記本電腦——一些聯想 Legion 筆記本電腦的風扇速度配置和其他設置。
- ASUS 筆記本電腦——為一些 ASUS 筆記本電腦配置 Fancontrol 或手動控制。
- AMDGPU sysfs 風扇控制——控制 AMDGPU 內核驅動提供的顯卡風扇控制。
- fan2go-gitAUR——一個獨立於設備路徑的 Fancontrol 替代品。
- MControlCenter——用於 MSI 筆記本電腦的風扇控制應用程式。
- fw-ectool-gitAUR——Framework Laptop 的風扇配置。
-
CoolerControlAUR——一個帶有 GUI 的風扇控制守護進程,適用於
sysfs
和 liquidctl包 設備。
Fancontrol(lm-sensors)
fancontrol
是 lm_sensors包 的一部分,可以用來控制 CPU/機箱風扇的速度。
傳感器驅動
許多較新主板的傳感器仍然未受到 Kernel 內建驅動的支持,檢查此表 lm-sensors devices 來確認驅動支持情況。
lm-sensors
首先需要執行以下命令:
# sensors-detect
這將檢測出所有存在的傳感器,並且它們將被用於 fancontrol
。之後,運行以下命令以檢查是否正確檢測到了傳感器:
$ sensors
coretemp-isa-0000 Adapter: ISA adapter Core 0: +29.0°C (high = +76.0°C, crit = +100.0°C) ... it8718-isa-0290 Adapter: ISA adapter Vcc: +1.14 V (min = +0.00 V, max = +4.08 V) VTT: +2.08 V (min = +0.00 V, max = +4.08 V) +3.3V: +3.33 V (min = +0.00 V, max = +4.08 V) NB Vcore: +0.03 V (min = +0.00 V, max = +4.08 V) VDRAM: +2.13 V (min = +0.00 V, max = +4.08 V) fan1: 690 RPM (min = 10 RPM) temp1: +37.5°C (low = +129.5°C, high = +129.5°C) sensor = thermistor temp2: +25.0°C (low = +127.0°C, high = +127.0°C) sensor = thermal diode
配置
傳感器正確配置後,使用 pwmconfig(8) 來測試和配置風扇速度控制。按照指南操作應該會創建 /etc/fancontrol
,一個自定義的配置文件。在指南中,如果你直接按回車而不輸入任何內容,默認答案會放在括號內。輸入 y
表示是,n
表示否。
# pwmconfig
/sys/class/hwmon/
路徑時可能會遇到問題。hwmon
類設備的符號連結指向絕對路徑,並且被用來將所有的 hwmon
傳感器集中到一個目錄下,以便於訪問。有時,hwmon
設備的順序在重啟後會改變,導致 fancontrol
停止工作。有關如何解決這個問題的更多信息,請參閱 #/etc/fancontrol 中設備路徑改變。提示與技巧
有些用戶在以 root 權限運行 pwmconfig
後可能想要手動調整配置文件,通常是為了修復某些問題。有關手動調整 /etc/fancontrol
配置文件,請參見 fancontrol(8) 查看變量定義。
用戶可能會像上面在 #Fancontrol(lm-sensors)所提到的那樣遇到 hwmon 路徑問題。有關更多信息,請參見 #/etc/fancontrol 中設備路徑改變。
hwmon0/device/temp1_input
變為 hwmon0/temp1_input
)。檢查 fancontrol.service
的單元狀態以找出哪個路徑是問題所在,並相應地更正您的配置文件。運行 Fancontrol
嘗試運行 fancontrol
:
# fancontrol
一個正確配置的設置將不會輸出錯誤,並將接管系統風扇的控制。用戶在執行此命令後不久應該能聽到系統風扇開始運轉。也可以通過啟動/啟用 fancontrol.service
來運行 fancontrol
。
對於非官方的圖形用戶界面,可以安裝 fancontrol-guiAUR 或 fancontrol-kcmAUR。
Fancontrol 在掛起並喚醒後停止工作
不幸的是,fancontrol
在掛起後無法正常工作。根據已報告 bug,您將不得不在掛起後重新啟動 fancontrol
。這可以通過 Systemd 鉤子自動實現。
NBFC(筆記本風扇控制)
NBFC 是一個跨平台的筆記本電腦風扇控制解決方案。它配備了一個強大的配置系統,可以調整以適應許多不同的筆記本電腦型號,包括一些最新的型號。
安裝
NBFC 可以通過 nbfcAUR 或 nbfc-gitAUR 安裝。同時,啟動/啟用 nbfc.service
。
配置
NBFC 提供了預製的配置文件。您可以在 /opt/nbfc/Configs/
目錄中找到它們。應用這些配置文件時,請使用沒有文件擴展名的確切配置文件名(例如,some profile.xml
變為 "some profile"
)。
檢查 NBFC 是否有任何推薦設置:
$ nbfc config -r
如果您至少有一個型號,請嘗試應用此配置文件,並查看風扇速度是如何被控制的。例如:
$ nbfc config -a "Asus Zenbook UX430UA"
File Descriptor does not support writing
,請刪除 StagWare.Plugins.ECSysLinux.dll
[1] 並重啟nbfc.service
:
# mv /opt/nbfc/Plugins/StagWare.Plugins.ECSysLinux.dll /opt/nbfc/Plugins/StagWare.Plugins.ECSysLinux.dll.old
如果上述解決方案沒有幫助,嘗試將 ec_sys.write_support=1
添加到內核參數。
如果您沒有找到推薦的模型,請前往 NBFC Git 倉庫或在/opt/nbfc/Configs/
查看是否有來自同一製造商的類似模型可用。例如,在華碩 Zenbook UX430UQ上,配置華碩 Zenbook UX430UA 運行並不理想(風扇始終完全停止),但華碩 Zenbook UX410UQ 運行得非常好。
運行 nbfc
以查看所有選項。有關配置的更多信息可在上游維基上找到。
Dell 筆記本電腦
i8kutils
是一個守護進程,用於根據 CPU 溫度配置某些戴爾 Inspiron 和 Latitude 筆記本電腦的風扇速度。它使用由 i8k
驅動程序提供的 /proc/i8k
接口(dell_smm_hwmon
的別名)。結果會根據不同的筆記本電腦型號而有所不同。
如果 fancontrol 在您的系統上無法工作,請使用 ignore_dmi=1
內核模塊參數來加載 dell_smm_hwmon
。
i8kutils
BIOS 系統調用在某些系統上會暫時停止內核(在戴爾 9560 上已確認),這可能導致像音頻中斷這樣的副作用,參見 https://bugzilla.kernel.org/show_bug.cgi?id=201097
安裝
i8kutilsAUR 是控制風扇速度的主要包。此外,您可能還想安裝以下軟體包:
- acpi包——使用 i8kmon 必須安裝。
-
tcl包——必須安裝以便將 i8kmon 作為後台服務運行(使用
--daemon
選項)。
- dell-bios-fan-control-gitAUR——如果您的 BIOS 覆蓋了風扇控制,推薦安裝。
配置
風扇改變轉速的溫度點可以在配置文件 /etc/i8kutils/i8kmon.conf
中進行調整。只支持三種風扇速度(高、低和關閉)。查找類似於以下的部分:
set config(0) {{0 0} -1 55 -1 55} set config(1) {{1 1} 45 75 45 75} set config(2) {{2 2} 65 128 65 128}
這個示例在 CPU 溫度達到 55 攝氏度時以低速啟動風扇,在 75 攝氏度時切換到高速。一旦溫度下降到 65 攝氏度,風扇將切換回低速,並在 45 攝氏度時完全關閉。
i8kmon
時注意到狀態變化(輸出示例:# (57>=55), state=1, low=45, high=75
)但左右風扇報告狀態為 0,可能需要考慮在配置文件中將第一個狀態的速度值從默認的 1000 更改為 2000 或更高。作為服務安裝
i8kmon
可以通過啟動/啟用 i8kmon.service
自動啟動。
BIOS 覆蓋風扇控制
一些較新的筆記本電腦擁有 BIOS 風扇控制,這將覆蓋作業系統級別的風扇控制。要測試是否是這種情況,請在命令行中以詳細模式運行 i8kmon
,確保 CPU 處於空閒狀態,然後觀察風扇是否相應地關閉或降低轉速。
如果 BIOS 風扇控制確實存在,你可以嘗試使用 dell-bios-fan-control-gitAUR:
i8kmon
,或者在測試這個程序時讓 CPU 保持空閒。啟用 BIOS 風扇控制:
# dell-bios-fan-control 1
禁用 BIOS 風扇控制:
# dell-bios-fan-control 0
BIOS 風扇控制可以通過啟動/啟用 dell-bios-fan-control.service
自動禁用。
聯想 ThinkPad 筆記本電腦
一些風扇控制守護進程包括 simpfand-gitAUR 和 thinkfanAUR(推薦)。
安裝
安裝 thinkfanAUR 或 thinkfan-gitAUR。可選但推薦安裝 lm_sensors包。如果需要,可以使用 thinkfan-uiAUR 提供圖形界面。然後查看以下文件:
# pacman -Ql thinkfan
請注意,thinkfanAUR 包安裝了 /usr/lib/modprobe.d/thinkpad_acpi.conf
,其中包含以下內核模塊參數:
options thinkpad_acpi fan_control=1
experimental=1
內核模塊參數。因此,檢查風扇功能非常重要。所以風扇控制默認是啟用的。
現在,加載模塊:
# modprobe thinkpad_acpi # cat /proc/acpi/ibm/fan
你應該看到風扇級別默認是 "auto"
,但你可以通過向同一文件回顯一個級別命令來手動控制風扇速度:
# echo level 1 > /proc/acpi/ibm/fan
級別 | 效果 |
---|---|
0 | 關閉 |
2 | 低速 |
4 | 中速 |
7 | 最高速 |
auto | 默認 - 自動,風扇轉速由 BIOS 控制 |
full-speed | 在監控下的最大風扇速度 |
disengaged | 甚至更快的速度,控制器不監控風扇速度 |
thinkfan
守護進程將自動執行這些操作。
7
並不等同於 disengaged
。7
是最大調節速度(對應 full-speed
)。而 disengaged
是最大非調節速度。詳情請見 ThinkWiki。
最後,啟用 thinkfan.service
。
要配置溫度閾值,你需要將示例配置文件(/usr/share/doc/thinkfan/examples/thinkfan.yaml
)複製到 /etc/thinkfan.conf
,並根據個人喜好進行修改。此文件指定了要讀取哪些傳感器,以及使用哪個接口來控制風扇。有些系統有 /proc/acpi/ibm/fan
和 /proc/acpi/ibm/thermal
可用;在其他系統上,你可能需要指定類似:
hwmon: /sys/devices/virtual/thermal/thermal_zone0/temp
來使用通用的 hwmon
傳感器,而不是特定於 thinkpad 的傳感器。
配置示例可以在 Gentoo:風扇轉速控制/thinkfan#配置(en) 中找到。
運行
你可以首先手動以 root 身份運行 thinkfan 來測試你的配置:
# thinkfan -n
並觀察它對其他正在運行的程序的負載水平的反應。
當你正確配置後,啟動/啟用 thinkfan.service
。
聯想 Legion 筆記本電腦
工具 Lenovo Legion Linux 允許更改存儲在嵌入式控制器中的風扇曲線。它由一個必須編譯和加載的內核模塊組成。目前沒有現成的軟體包,而是需要從原始碼編譯和安裝。
然後,可以通過 hwmon
接口設置風扇曲線。這可以使用提供的腳本或 Python GUI 來完成。
ASUS 筆記本電腦
本主題將介紹華碩筆記本電腦上用於 Fancontrol(lm-sensors)的驅動程序配置。
內核模塊
在配置文件中,我們將使用完整的 sysfs
文件路徑(例如 /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1
)。這是因為重啟後 hwmon1
可能會變成其他任何數字。由於 Fancontrol (lm-sensors) 是用 Bash 編寫的,所以在配置文件中使用這些路徑是完全可以接受的。你可以在 ASUS N550JV#風扇控制找到完整的 /etc/fancontrol
配置文件示例。
asus-nb-wmi
asus-nb-wmi
是一個內核模塊,包含在 Linux 內核中,並且在華碩筆記本電腦上會自動加載。它只允許控制單個風扇,如果有第二個風扇,你將無法對其進行控制。請注意,將此模塊加入黑名單將阻止鍵盤背光工作。
以下是控制風扇的命令。檢查你是否可以控制你的風扇:
# echo 255 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1 # 风扇全速 (值: 255) # echo 0 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1 # 风扇停止 (值: 0) # echo 2 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1_enable # 将风扇模式改为自动 # echo 1 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1_enable # 将风扇模式改为手动 # echo 0 > /sys/devices/platform/asus-asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1_enable # 将风扇模式改为全速
如果以上命令能夠修改風扇速度,那麼繼續進行 #使用 pwmconfig 生成配置文件。
asus_fan
asus_fan
是一個內核模塊,它允許在一些舊的 ASUS 筆記本電腦上同時控制兩個風扇。它在最新的型號上不起作用。
安裝使用 DKMS 的 asus-fan-dkms-gitAUR 內核模塊, 提供 asus_fan
:
# modprobe asus_fan
檢查你是否能夠控制兩個風扇:
# echo 255 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1 # CPU 风扇全速 (值: 255) # echo 0 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1 # CPU 风扇停止 (值: 0) # echo 255 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2 # GPU 风扇全速 (值: 255) # echo 0 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2 # GPU 风扇停止 (值: 0) # echo 2 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1_enable # 将 CPU 风扇模式改为自动 # echo 1 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1_enable # 将 CPU 风扇模式改为手动 # echo 2 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2_enable # 将 GPU 风扇模式改为自动 # echo 1 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2_enable # 将 GPU 风扇模式改为手动 # cat /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/temp1_input # 显示 GPU 温度 (当 GPU 被禁用/未使用时总是为 0)
如果一切正常工作,你可以在啟動時加載內核模塊以自動化這一步驟。
使用 pwmconfig 生成配置文件
如果在用 pwmconfig
生成配置文件時出現錯誤 沒有工作的風扇傳感器,所有讀數都是 0
,請首先打開一個控制台並執行:
# watch -n 1 "echo 2 > /sys/devices/platform/'kernel_module'/hwmon/hwmon[[:print:]]*/pwm1_enable"
如果你使用的是 asus_fan
內核模塊並且有第二個風扇,在第二個控制台:
# watch -n 1 "echo 2 > /sys/devices/platform/'kernel_module'/hwmon/hwmon[[:print:]]*/pwm2_enable"
最後,在第三個控制台:
# pwmconfig
一旦你完成並且配置文件生成後,你應該停止第一個和第二個控制台。繼續進行 #Fancontrol(lm-sensors)。生成配置文件後,你可能需要手動將 PWM 值替換為完整的 sysfs
路徑,因為 hwmon
數字值在重啟後可能會改變。
使用 EC 寄存器的替代方法
如果上述方法對您不起作用,另一種方法是直接向嵌入式控制器(EC)中的特定寄存器寫入數據。使用 EC-Probe 工具,您可以將風扇模式設置為三種風扇速度模式之一,前提是您的型號在 Windows 中提供了這樣的功能。
在 ASUS FX504GD 型號中,將風扇速度設置為三種模式之一使用這些寄存器值:
# ec_probe write 0x5e 0x80 # 静音模式 # ec_probe write 0x5e 0x40 # 平衡模式 # ec_probe write 0x5e 0xC0 # 性能模式
在這裡,我們向負責設置風扇速度模式的寄存器 0x5e
寫入數據。
如果這些值對您不起作用,請在 Windows 中以監視模式運行 ec-probe
工具,並嘗試識別在切換風扇速度模式時哪個 EC 寄存器的值發生了變化。
設置熱限制策略
除了使用 asus-nb-wmi
手動控制風扇速度外,還可以設置熱限制策略,以實現更激進或更保守的風扇控制策略。可能的數值包括 0
(默認),1
(超增壓),和 2
(靜音)。
# echo 数值 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/throttle_thermal_policy
某些 TUF 系列筆記本電腦上的風扇控制模式
在某些華碩 TUF 系列筆記本電腦上,可以使用 Fn+F5
更改性能和風扇控制模式。可以通過運行以下命令來查看當前模式:
$ cat /sys/devices/platform/asus-nb-wmi/fan_boost_mode
當您使用 Fn+F5
時,可以觀察到值的變化。0
表示「普通模式」,1
表示「性能模式」,2
很可能是「靜音模式」。[2] 也可以作為 root 將這些值寫入 fan_boost_mode
文件,以獲得預期效果。
這已在華碩 TUF FX504GE 和 ASUS TUF FX504GD 型號上進行了測試,並發現有效。
您可以使用 tuf-fan-boost-notification-gitAUR 在每次風扇速度模式更改時獲得通知。
AMDGPU sysfs 風扇控制
AMDGPU 內核驅動通過 sysfs
中的 hwmon
提供顯卡風扇控制。
手動控制配置
要從自動切換到手動風扇控制,運行以下命令:
# echo "1" > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable
設置風扇速度,例如50%(100%是255個PWM周期,因此通過將所需風扇速度的百分比乘以2.55來計算):
# echo "128" > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1
要重置為自動風扇控制,運行以下命令:
# echo "2" > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable
amdgpu-fan
amdgpu-fanAUR 軟體包是一個用 Python 編寫的自動化風扇控制器,適用於啟用 AMDGPU 的顯卡。它使用「速度矩陣」來匹配 GPU 溫度與風扇頻率,例如:
speed_matrix: # -[溫度(*C), 速度(0-100%)] - [0, 0] - [40, 30] - [60, 50] - [80, 100]
通過啟動/啟用 amdgpu-fan.service
來啟動風扇控制服務。
amdfand-bin
amdfand-binAUR 軟體包是 amdgpu-fanAUR 的原生替代品。通過啟動/啟用 amdfand.service
來啟動風扇控制服務。
對於這個工具,還有圖形界面客戶端可用:amdguid-glow-binAUR(Xorg)和 amdguid-wayland-binAUR(Wayland)。在啟動客戶端之前,您需要啟用/啟動 amdgui-helper.service
。
fancurve 腳本
不僅風扇控制通過 sysfs
中的 hwmon
提供,GPU 溫度讀取也同樣可用:
# cat /sys/class/drm/card0/device/hwmon/hwmon0/temp1_input
這將輸出 GPU 溫度,單位為攝氏度,後跟三個零,例如 33000
代表 33°C。
由 grmat 編寫的 bash 腳本 amdgpu-fancontrol 提供了一個完全自動的風扇控制,它使用了上述的 sysfs hwmon
功能。它還允許用戶方便地調整風扇曲線的溫度/PWM周期的分配,並通過在腳本頂部提供抽象化的配置欄位來設置滯後性。
出於安全考慮,腳本在關機時會再次將風扇控制設置為自動。這可能會導致風扇加速旋轉,可以通過在 function reset_on_fail
部分設置 set_fanmode 1
來解決這個問題,但這會犧牲一定的安全性。
設置 fancurve 腳本
要啟動腳本,建議通過 systemd 初始化系統來進行。這樣,腳本的詳細輸出可以通過 journalctl/systemctl status
來讀取。為此,GitHub 倉庫中已經包含了一個 .service
單元文件。
在休眠後,可能還需要通過 root-resume.service 重新啟動腳本,以使其能夠自動正常工作:
/etc/systemd/system/root-resume.service
[Unit] Description=本地系統恢復動作 After=suspend.target [Service] Type=simple ExecStart=/usr/bin/systemctl restart amdgpu-fancontrol.service [Install] WantedBy=suspend.target
問題解決
提高傳感器的 fan divisor
如果 sensors
沒有輸出 CPU 風扇的 RPM(每分鐘轉數),可能需要更改 fan divisor(風扇除數)。
sensors
輸出的第一行是主板用於讀取溫度和電壓的晶片組名稱。
在 /etc/sensors.d/
中創建一個文件:
/etc/sensors.d/fan-speed-control.conf
chip "coretemp-isa-*" set fanX_div 4
將 coretemp-isa-
替換為晶片組的名稱,將 X
替換為要更改的 CPU 風扇編號。
保存文件,並以 root 用戶運行:
# sensors -s
這將重新加載配置文件。
再次運行 sensors
,並檢查是否有 RPM 讀數。如果沒有,請將 fan divisor 增加到 8
、16
或 32
。效果可能因人而異。
/etc/fancontrol 中設備路徑改變
位於 /sys/class/hwmon/
中的枚舉 "hwmon" 符號連結的順序可能會變化,因為內核模塊每次啟動時加載的順序並不一致。這可能會導致 fancontrol 無法正常工作。錯誤提示是「Configuration appears to be outdated, please run pwmconfig again」。[上游 bug]
解決方案
在 /etc/conf.d/lm_sensors
中,有兩個數組列出了執行 sensors-detect
時檢測到的所有模塊。這些模塊將由 fancontrol 加載。如果文件不存在,請以 root 身份運行 sensors-detect
並接受默認設置。打開(或創建)/etc/modules-load.d/modules.conf
。從 /etc/conf.d/lm_sensors/
中的兩個變量獲取所有列出的模塊,並將它們放入 /etc/modules-load.d/modules.conf
文件中,每行一個模塊。這樣指定應該可以為模塊定義一個加載順序,這應該可以使 hwmon
路徑保持在它們的位置,並且在每次啟動時不會改變順序。如果這不起作用,我強烈推薦尋找另一個程序來控制您的風扇。如果您找不到任何程序,那麼您可以嘗試使用下面的替代解決方案。
替代解決方案:絕對路徑
在 fancontrol
中使用絕對文件路徑默認情況下是不起作用的,因為它的輔助腳本 pwmconfig
被編程為只使用 hwmon
路徑來獲取文件。它這樣做的方式是檢測其配置文件 /etc/fancontrol
中提供的 hwmon
路徑是否發生了變化,並使用變量 DEVNAME
和 DEVPATH
來確定這種變化。如果您的 hwmon
路徑不斷變化,這將阻止 fancontrol
運行,無論您做什麼。然而,人們可以繞過這個問題。打開 /usr/bin/fancontrol
,並注釋掉腳本的這部分:
if ! ValidateDevices "$DEVPATH" "$DEVNAME" then echo "Configuration appears to be outdated, please run pwmconfig again" >&2 exit 1 fi
- 這樣做可能會使
fancontrol
寫入您在配置文件中給出的文件,無論文件是什麼。如果您提供了錯誤的路徑,這可能會損壞文件。確保您使用的是文件的正確路徑。 - 另外要注意的是,在執行此解決方法時,再次使用
pwmconfig
創建腳本將覆蓋您配置的所有絕對路徑。因此,如果需要,最好手動將舊路徑更改為新路徑,而不是使用pwmconfig
。
注釋掉這部分應該可以有效地忽略 hwmon
驗證檢查。您也可以在配置文件中忽略變量 DEVNAME
和 DEVPATH
。之後,將其他變量中的所有 hwmon
路徑替換為其絕對路徑。為了更方便,以 root 權限重新運行 pwmconfig
以刷新 hwmon
設備。配置文件中的 hwmon
路徑現在應該指向正確的絕對路徑。對於每個 hwmon
路徑,運行以下命令(其中 N
是 hwmon
路徑的枚舉):
$ readlink -f /sys/class/hwmon/hwmonN/device
這將為您提供設備的絕對路徑。
例如,/etc/fancontrol
文件列出 FCTEMPS
如下:
FCTEMPS=hwmon2/pwm1=hwmon3/temp1_input
執行 readlink -f /sys/class/hwmon/hwmon3/device
可以輸出例如 /sys/devices/platform/coretemp.0/
。cd
進入此目錄。如果您看到一個 /hwmon/hwmonN/
目錄,您必須在您的 fancontrol
配置文件中這樣做,以替換 hwmonN
路徑。根據前面的例子:
# 更改 FCTEMPS=hwmon2/pwm1=hwmon3/temp1_input # 为 FCTEMPS=hwmon2/pwm1=/sys/devices/platform/coretemp.0/hwmon/[[:print:]]*/temp1_input
基本上,您必須將 hwmon
路徑替換為絕對路徑,並與 /hwmon/[[:print:]]*/
連接,以便 bash
能夠捕獲隨機枚舉的 hwmon
名稱。
如果您沒有看到 /hwmon/hwmonN/
目錄,那麼您就不必擔心這個問題。這意味著溫度文件位於設備目錄的根目錄中。只需將 hwmonN/
替換為絕對文件路徑。例如:
# 更改 FCTEMPS=hwmon2/pwm1=hwmon3/temp1_input # 为 FCTEMPS=hwmon2/pwm1=/sys/devices/platform/coretemp.0/temp1_input
在替換了所有路徑之後,fancontrol
應該可以正常工作。