风扇速度控制

出自 ArchWiki

风扇控制可以为您的系统带来各种好处,例如更安静的工作系统,以及通过在低 CPU 负载时完全停止风扇来节省电能。

警告: 在高系统负载时配置或完全停止风扇可能会导致硬件永久性损坏,或充其量只是热节流。

概览

此文章或章节需要语言、wiki 语法或样式改进。参见 Help:Style 以供参考。

原因: 该注释应与引言合并,工具应留在各自的章节中(如果它们有的话),而其余的应放在底部的“包罗万象”章节中(标题恰当?)。(在 Talk:Fan speed control 中讨论)
注意: 笔记本电脑用户应了解其硬件中散热系统的工作方式。有些笔记本电脑只有一个风扇,同时为 CPU 和 GPU 散热。有些笔记本电脑有两个风扇,分别用于 CPU 和 GPU,但第一个风扇同时为 CPU 和 GPU 散热,而另一个风扇仅为 CPU 散热。在某些情况下,由于不兼容的散热架构(例如,一个风扇用于 GPU 和 CPU),您将无法使用 Fancontrol 脚本。请参阅 [1] 以获取有关此主题的更多信息。

对于台式机和笔记本电脑,有多种可行的风扇控制解决方案。取决于您的需求

Fancontrol (lm-sensors)

fancontrollm_sensors 的一部分,可用于控制 CPU/机箱风扇的速度。

对较新主板的支持可能尚未添加到 Linux 内核中。查看 lm-sensors 设备(存档) 表,以查看是否有适用于此类主板的实验性驱动程序。

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

配置

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

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

微调

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

用户可能会遇到 #Fancontrol (lm-sensors) 中提到的 hwmon 路径问题。请参阅 #/etc/fancontrol 中的设备路径已更改 以获取更多信息。

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

运行 Fancontrol

尝试运行 fancontrol

# fancontrol

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

对于非官方 GUI,安装 fancontrol-guiAURfancontrol-kcmAUR[损坏的链接:未找到软件包]

Fancontrol 在休眠-唤醒循环后停止工作

不幸的是,fancontrol 在休眠后无法工作。根据 提交的错误报告,您必须在休眠后重启 fancontrol。这可以通过 systemd 钩子 自动实现。

NBFC

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

NBFC 是适用于笔记本电脑的跨平台风扇控制解决方案。它带有一个强大的配置系统,可以将其调整为许多不同的笔记本电脑型号,包括一些最新的型号。

安装

NBFC 可以作为 nbfcAURnbfc-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 [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/,并检查是否有来自同一制造商的任何类似型号可用。例如,在 华硕 Zenbook UX430UQ 上,配置 华硕 Zenbook UX430UA 效果不佳(风扇一直完全停止),但 华硕 Zenbook UX410UQ 效果非常好。

运行 nbfc 以查看所有选项。有关配置的更多信息,请访问 上游 wiki

戴尔笔记本电脑

i8kutils 是一个守护进程,用于根据某些戴尔 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 时完全关闭。

提示: 如果在以 verbose 选项运行 i8kmon 时,您注意到状态发生变化(输出示例:# (57>=55), state=1, low=45, high=75),但左右风扇报告状态 0,您可以考虑将配置文件中第一个状态的速度值从默认值 1000 更改为 2000 或更高。

作为服务安装

i8kmon 可以通过启动/启用 i8kmon.service 自动启动。

BIOS 覆盖风扇控制

某些较新的笔记本电脑具有 BIOS 风扇控制功能,这将覆盖操作系统级别的风扇控制。要测试是否是这种情况,请在命令行中以 verbose 模式运行 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 (推荐)。

安装

安装 thinkfanAURthinkfan-gitAUR。可选但推荐,安装 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 内核模块参数。因此,检查风扇功能非常重要。

因此,默认情况下启用风扇控制。

现在,加载模块

# modprobe thinkpad_acpi
# cat /proc/acpi/ibm/fan

您应该看到风扇级别默认为“auto”,但是您可以将级别命令回显到同一文件以手动控制风扇速度

# echo level 1 > /proc/acpi/ibm/fan
风扇级别
级别 效果
0 off
2 低速
4 中速
7 最高速
auto 默认 - 自动,风扇 RPM 由 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: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#风扇控制 中找到完整的 /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 生成配置文件

如果您在使用 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 中提供此功能。

在华硕 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] 也可以将这些值作为 root 写入 fan_boost_mode 文件,并获得所需的效果。

这已在华硕 TUF FX504GE 和华硕 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 温度,并加上三个零,例如 33000 代表 33°C。

grmat 编写的 bash 脚本 amdgpu-fancontrol 通过使用描述的 sysfs hwmon 功能,提供完全自动的风扇控制。它还允许通过在脚本顶部提供抽象的配置字段,方便地调整 fancurve 的温度/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 无法正常运行。错误信息是“Configuration appears to be outdated, please run pwmconfig again”(配置似乎已过时,请再次运行 pwmconfig)。上游错误

解决方案

/etc/conf.d/lm_sensors 中,有两个数组列出了当您执行 sensors-detect 时检测到的所有模块。这些模块由 fancontrol 加载。如果该文件不存在,请以 root 身份运行 sensors-detect,接受默认值。打开(或创建)/etc/modules-load.d/modules.conf。从 /etc/conf.d/lm_sensors 中的 2 个变量中获取所有列出的模块,并将它们放入 /etc/modules-load.d/modules.conf 文件中,每行一个模块。这样指定应该为模块加载创建一个定义的顺序,这应该使 hwmon 路径保持原位,并且不会在每次启动时更改顺序。如果这不起作用,我强烈建议寻找另一个程序来控制您的风扇。如果您找不到任何程序,那么您可以尝试使用下面的替代解决方案。

替代解决方案:绝对路径

默认情况下,在 fancontrol 中使用绝对文件路径不起作用,因为它的 helper 脚本 pwmconfig 被编程为仅使用 hwmon 路径来获取文件。它的工作方式是检测其配置文件 /etc/fancontrol 中提供的 hwmon 路径是否已更改,并使用变量 DEVNAMEDEVPATH 来确定此类更改。如果您的 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 验证检查。您也可以忽略配置文件中的变量 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 应该可以正常工作。