跳转至内容

风扇速度控制

来自 ArchWiki
(重定向自 ThinkPad Fan Control)

风扇控制可以为您的系统带来各种好处,例如在 CPU 负载较低时完全停止风扇,从而获得更安静的工作系统和节能。

注意 笔记本用户应了解其硬件中的冷却系统的工作原理。有些笔记本电脑只有一个风扇同时为 CPU 和 GPU 散热。有些笔记本电脑有两个风扇分别用于 CPU 和 GPU,但第一个风扇同时为 CPU 和 GPU 散热,而另一个风扇仅为 CPU 散热。在某些情况下,由于冷却架构不兼容(例如,一个风扇同时用于 GPU 和 CPU),您将无法使用 Fancontrol 脚本。有关此主题的更多信息,请参阅 [1]
警告 配置或完全停止风扇在高系统负载下可能会导致硬件永久损坏,或最多导致热节流。

Fancontrol (lm-sensors)

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:这部分重复了 lm_sensors#Configuration,应该改为链接到那里。(在 Talk:Fan speed control 中讨论)

fancontrollm_sensors 的一部分,可用于控制 CPU/机箱风扇的速度。它最适合台式机和笔记本电脑,其中风扇控制可通过 sysfs(5) 提供。

较新主板的支持可能尚未包含在 Linux 内核中。

lm-sensors

警告 以下命令默认是安全的(在每次提示时按 Enter)。某些高级选项可能会损坏硬件:只有在了解其含义后才能修改默认设置。

首先要做的是运行

# 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
注意 如果输出没有显示 CPU 风扇的 RPM 值,可能需要 #增加传感器风扇分频器。如果风扇速度显示并且高于 0,则表示正常。

配置

一旦传感器配置正确,请使用 pwmconfig(8) 来测试和配置风扇速度控制。按照指南操作将创建 /etc/fancontrol,一个定制的配置文件。在指南中,如果您在不输入任何内容的情况下按 Enter,则默认答案将显示在括号中。输入 y 表示是,n 表示否。

# pwmconfig
注意 一些用户在使用 /sys/class/hwmon/ 路径配置其配置文件时可能会遇到问题。hwmon 类设备符号链接指向绝对路径,用于将所有 hwmon 传感器分组到同一个目录中以便于访问。有时,hwmon 设备顺序在重启后会发生变化,导致 fancontrol 停止工作。有关如何解决此问题的信息,请参阅 #Device paths have changed in /etc/fancontrol

调整

一些用户可能希望在以 root 权限运行 pwmconfig 后手动调整配置文件,通常是为了修复某些问题。要手动调整 /etc/fancontrol 配置文件,请参阅 fancontrol(8) 以了解变量定义。

用户可能会遇到上面 #Fancontrol (lm-sensors) 中提到的 hwmon 路径问题。有关更多信息,请参阅 #Device paths have changed in /etc/fancontrol

提示 使用 MAXPWMMINPWM 选项限制风扇速度范围。有关详细信息,请参阅 fancontrol(8)
注意 温度和风扇传感器路径也可能发生变化(通常在内核更新后)(例如,hwmon0/device/temp1_input 变为 hwmon0/temp1_input)。检查 fancontrol.service单元状态 以找出哪个路径是问题所在,并相应地更正您的配置文件。

运行 Fancontrol

尝试运行 fancontrol

# fancontrol

正确配置的设置将不会输出错误,并且将接管系统风扇的控制。用户应该在执行此命令后不久听到系统风扇启动。fancontrol 也可以通过 启动/启用 fancontrol.service 来运行。

对于非官方 GUI,请 安装 fancontrol-guiAUR

Fancontrol 在挂起–唤醒周期后停止工作

不幸的是,fancontrol 在挂起后无法工作。根据 提交的 bug,您需要在挂起后重启 fancontrol。这可以通过 systemd hook 自动实现。

NBFC

注意 NBFC 自 2020 年 3 月 29 日起已无人维护。仍然可以手动创建新的用户配置,但自那时以来未添加预定义配置。存在一些分支可以添加新配置,例如 nbfc-revive

NBFC(NoteBook Fan Control)是一种跨平台的笔记本电脑风扇控制解决方案,用 C# 编写,并在 Mono 运行时下运行。它带有一个强大的配置系统,允许根据许多不同的笔记本电脑型号进行调整,包括一些最新的型号。

还有一个轻量级的 NBFC 实现,用 C 编写,名为 NBFC-Linux。它不依赖于 Mono 框架。它可以作为 nbfc-linuxAUR 安装。

安装

NBFC 可以作为 nbfcAUR 安装。此外,请 启动/启用 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 [2]重启 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/,并检查是否有来自同一制造商的类似型号。例如,在 Asus Zenbook UX430UQ 上,配置 Asus Zenbook UX430UA 工作不佳(风扇一直完全停止),但 Asus Zenbook UX410UQ 工作得非常好。

运行 nbfc 以查看所有选项。有关配置的更多信息可在 上游 wiki 上找到。

Dell 笔记本

i8kutils 是一个守护程序,用于根据某些 Dell Inspiron 和 Latitude 笔记本电脑的 CPU 温度配置风扇速度。它使用 i8k 驱动程序(dell_smm_hwmon 的别名)提供的 /proc/i8k 接口。结果将因笔记本电脑的具体型号而异。

如果您的系统上 fancontrol 不起作用,请使用 ignore_dmi=1 内核模块参数 来加载 dell_smm_hwmon

警告 i8kutils 的 BIOS 系统调用在某些系统上会暂停内核(在 Dell 9560 上已确认),这可能导致音频中断等副作用,请参阅 https://bugzilla.kernel.org/show_bug.cgi?id=201097

安装

i8kutilsAUR 是控制风扇速度的主要软件包。此外,您可能需要安装以下软件包:

  • acpi — 必须安装才能使用 i8kmon
  • tcl — 必须安装才能将 i8kmon 作为后台服务运行(使用 --daemon 选项)。
  • tk — 必须与 tcl 一起安装,才能作为 X11 桌面小程序运行。
  • 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°C 时以低速启动风扇,在 75°C 时切换到高速。当温度降至 65°C 时,风扇将切换回低速,并在 45°C 时完全关闭。

提示 如果在运行带详细选项的 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

警告 关闭 BIOS 风扇控制可能会损坏您的硬件。请确保您事先已正确设置 i8kmon,或在测试此程序时保持 CPU 空闲。

启用 BIOS 风扇控制

# dell-bios-fan-control 1

禁用 BIOS 风扇控制

# dell-bios-fan-control 0

BIOS 风扇控制可以通过 启动/启用 dell-bios-fan-control.service 来自动禁用。

ThinkPad 笔记本

一些风扇控制守护程序包括 simpfand-gitAURthinkfanAUR(推荐)。

安装

安装 thinkfanAUR。可选但推荐安装 lm_sensors。如果需要,可以使用 thinkfan-uiAUR 获取 GUI。然后查看以下文件:

# pacman -Ql thinkfan

请注意,thinkfan 包安装了 /usr/lib/modprobe.d/thinkpad_acpi.conf,其中包含以下 内核模块参数

options thinkpad_acpi fan_control=1
注意 新的 Thinkpad 型号可能需要额外的 experimental=1 内核模块参数。因此,检查风扇功能非常重要。

因此,风扇控制默认启用,但您可能需要手动 重新生成 initramfs

现在,重新加载启用了风扇控制的模块:

# modprobe -r thinkpad_acpi
# modprobe thinkpad_acpi fan_control=1
# cat /proc/acpi/ibm/fan

您应该会看到风扇级别默认设置为 "auto",但您可以将级别命令 echo 到同一个文件来手动控制风扇速度:

# echo level 1 > /proc/acpi/ibm/fan
风扇级别
级别 效果
0 关闭
2 低速
4 中速
7 最高速
自动 默认 - 自动,风扇 RPM 由 BIOS 控制
全速 / 停转 最高风扇速度;在此模式下,控制器不监控风扇速度

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:Fan speed control/thinkfan#Configuration 中找到配置示例。

运行

您可以通过手动运行 thinkfan(作为 root)来首先测试您的配置:

# thinkfan -n

并观察它如何响应您运行的其他程序的负载级别。

配置正确后,启动/启用 thinkfan.service

联想拯救者笔记本

工具 Lenovo Legion Linux 允许更改存储在嵌入式控制器中的风扇曲线。它由一个必须编译和加载的内核模块组成。目前没有打包,但必须从源代码编译和安装。

然后可以通过 hwmon 接口设置风扇曲线。这可以使用提供的脚本或 Python GUI 来完成。

华硕笔记本

本主题将涵盖华硕笔记本上 Fancontrol (lm-sensors) 的驱动程序配置。

内核模块

在配置文件中,我们将使用 sysfs 文件的完整路径(例如 /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1)。这是因为 hwmon1 重启后可能会变为任何其他数字。Fancontrol (lm-sensors) 是用 Bash 编写的,因此在配置文件中使用这些路径是完全可接受的。您可以在 ASUS N550JV#Fan control 找到完整的 /etc/fancontrol 配置文件示例。

asus-nb-wmi

asus-nb-wmi 是一个内核模块,包含在 Linux 内核中,并在华硕笔记本上自动加载。它只能控制一个风扇,如果存在第二个风扇,您将无法控制它。请注意,阻止此模块会使键盘背光无法工作。

以下是控制它的命令。检查您是否可以控制风扇:

# echo 255 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1           # Full fan speed (Value: 255)
# echo 0 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1             # Fan is stopped (Value: 0)
# echo 2 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1_enable      # Change fan mode to automatic
# echo 1 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1_enable      # Change fan mode to manual
# echo 0 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1_enable      # Change fan mode to full speed

如果您能够使用上述命令修改风扇速度,则继续进行 #使用 pwmconfig 生成配置文件

asus_fan

asus_fan 是一个内核模块,它允许控制一些较旧华硕笔记本上的两个风扇。它不适用于最新型号。

安装 DKMS asus-fan-dkms-gitAUR 内核模块,提供 asus_fan

# modprobe asus_fan

检查您是否可以控制两个风扇

# echo 255 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1          # Full CPU fan speed (Value: 255)
# echo 0 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1            # CPU fan is stopped (Value: 0)
# echo 255 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2          # Full GFX fan speed (Value: 255)
# echo 0 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2            # GFX fan is stopped (Value: 0)
# echo 2 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1_enable     # Change CPU fan mode to automatic
# echo 1 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1_enable     # Change CPU fan mode to manual
# echo 2 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2_enable     # Change GFX fan mode to automatic
# echo 1 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2_enable     # Change GFX fan mode to manual
# cat /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/temp1_input          # Display GFX temperature (will always be 0 when GFX is disabled/unused)

如果一切正常,您可以 在启动时加载模块 来自动化此步骤。

使用 pwmconfig 生成配置文件

如果在生成配置文件时收到错误 There are no working fan sensors, all readings are 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 # silent mode
# ec_probe write 0x5e 0x40 # balance mode
# ec_probe write 0x5e 0xC0 # performance mode

这里我们写入负责设置风扇速度模式的寄存器 0x5e

如果这些值对您不起作用,请在 Windows 中以监视模式运行 ec-probe 工具,并尝试识别 EC 中的哪个寄存器在切换风扇速度模式时更改了值。

设置热节流策略

除了使用 asus-nb-wmi 手动控制风扇速度外,还可以设置 热节流策略 以获得或多或少激进的风扇控制策略。可能的值为 0(默认)、1(超频)和 2(静音)。

# echo number > /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
注意 在某些笔记本上,此设置可能位于 /sys/devices/platform/asus-nb-wmi/throttle_thermal_policy

当您按下 Fn+F5 时,您可以看到该值发生变化。0 是“普通模式”,1 是“性能模式”,2 最有可能是“静音模式”。[3] 也可以将这些值写入 fan_boost_mode 文件(以 root 身份)并达到预期效果。

这已在 ASUS 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
警告 由于驱动程序错误,将风扇速度重置为自动可能不起作用,并且可能需要重启驱动程序作为一种解决方法。

风扇曲线控制

较新的 AMD 显卡(如 RDNA3 显卡)由于固件限制,不支持手动风扇控制 [4]。对于这些情况,AMD 提供了 fan_curve sysfs API 来控制风扇曲线,有关更多信息,请参阅 [5]

amdgpu-fan

amdgpu-fanAUR 包是为 AMDGPU 启用的视频卡编写的 Python 自动风扇控制器。它使用“速度矩阵”来匹配风扇的频率与 GPU 的温度,例如:

speed_matrix:  # -[temp(*C), speed(0-100%)]
- [0, 0]
- [40, 30]
- [60, 50]
- [80, 100]

通过 启动/启用 amdgpu-fan.service 来启动风扇控制服务。

amdfand-bin

然后 amdfand-binAUR 包是 amdgpu-fanAUR 的原生替代品。通过 启动/启用 amdfand.service 来启动风扇控制服务。

对于此工具,还有可用的 GUI 客户端: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

这会输出 °C + 三个零的 GPU 温度,例如 33°C 为 33000

grmat 的 bash 脚本 amdgpu-fancontrol 通过使用描述的 sysfs hwmon 功能提供全自动风扇控制。它还允许通过在脚本顶部提供抽象配置字段来方便地调整风扇曲线的温度/PWM 周期分配和滞后。

提示 为了正常工作,脚本至少需要三个定义的温度/PWM 周期分配。

出于安全原因,脚本在关机时会将风扇控制再次设置为自动。这可能导致风扇启动,可以通过在 function reset_on_fail 部分设置 set_fanmode 1 来绕过,但会牺牲安全性。

设置 fancurve 脚本

为了启动脚本,建议通过 systemd init 系统来启动。这样,脚本的详细输出可以通过 journalctl/systemctl status 查看。为此,GitHub 仓库中已包含一个 .service 单元文件。

在休眠后,可能还需要通过 root-resume.service 重启脚本,以使其自动正常工作。

/etc/systemd/system/root-resume.service
[Unit]
Description=Local system resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/usr/bin/systemctl restart amdgpu-fancontrol.service

[Install]
WantedBy=suspend.target

其他

故障排除

增加传感器风扇分频器

如果 sensors 没有输出 CPU 风扇 RPM,则可能需要更改风扇分频器。

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 读数。如果没有,请将分频器增加到 8、16 或 32。您的结果可能会有所不同。

/etc/fancontrol 中的设备路径已更改

位于 /sys/class/hwmon/ 中的枚举 hwmon 符号链接的顺序可能会有所不同,因为内核模块在每次启动时的加载顺序不一致。因此,这可能会导致 fancontrol 无法正常工作。错误是“配置似乎已过时,请重新运行 pwmconfig”。上游 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 路径是否未更改,并使用 DEVNAMEDEVPATH 变量来确定这种变化。如果您的 hwmon 路径不断变化,无论您做什么,这都会阻止 fancontrol 运行。但是,可以规避这个问题。打开 /usr/bin/fancontrol,并注释掉脚本的这部分

if [ "$DIR" = "/" -a -n "$DEVPATH" ]
then
   echo "Unneeded DEVPATH with absolute device paths" >&2
   exit 1
fi
if ! ValidateDevices "$DEVPATH" "$DEVNAME"
 then
     echo "Configuration appears to be outdated, please run pwmconfig again" >&2
     exit 1
 fi
  • 这样做可能会让 fancontrol 写入您在配置文件中提供的文件,无论该文件是什么。如果您提供了错误的路径,可能会导致文件损坏。请确保您使用的是文件的正确路径。
  • 另请注意,在进行此解决方法时,使用 pwmconfig 重新创建您的脚本会覆盖您配置的所有绝对路径。因此,如果需要,最好手动更改旧路径为新路径,而不是使用 pwmconfig

注释掉这一行应该可以有效地忽略 hwmon 验证检查。您也可以忽略配置文件中的 DEVNAMEDEVPATH 变量。在此之后,将其他变量中的所有 hwmon 路径替换为它们的绝对路径。为了更方便,请使用 root 权限重新运行 pwmconfig 来刷新 hwmon 设备。配置文件中的 hwmon 路径现在应该指向正确的绝对路径。对于每个 hwmon 路径,运行以下命令(其中 Nhwmon 路径的枚举)

$ 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 路径。从前面的例子

# BEFORE
FCTEMPS=hwmon2/pwm1=hwmon3/temp1_input
# AFTER
FCTEMPS=hwmon2/pwm1=/sys/devices/platform/coretemp.0/hwmon/[[:print:]]*/temp1_input

本质上,您必须将 hwmon 路径替换为绝对路径,并连接 /hwmon/[[:print:]]*/,以便 bash 可以捕获随机枚举的 hwmon 名称。

如果您没有看到 /hwmon/hwmonN/ 目录,那么您不必担心这一点。这意味着温度文件位于设备目录的根目录下。只需将 hwmonN/ 替换为绝对文件路径即可。例如

# BEFORE
FCTEMPS=hwmon2/pwm1=hwmon3/temp1_input
# AFTER
FCTEMPS=hwmon2/pwm1=/sys/devices/platform/coretemp.0/temp1_input

替换所有路径后,fancontrol 应该可以正常工作。