戴尔 G5 上的风扇在全速和关闭之间切换

For*_*ork 6 fan dell 18.04

我有一台配备 Ubuntu 18.04.4 LTS 的 Dell G5 5590。BIOS 版本为 1.11.1。

即使没有任何处理器负载,我的风扇也会持续打开和关闭 30 秒(30 秒全速,30 秒完全关闭)。这非常烦人,我不确定它应该是这样的,因为我希望有更多梯度的风扇控制。

我做了什么:

  • 我查看了BIOS设置,但没有发现与风扇控制相关的设置;
  • 我已经安装lm-sensors、设置并sensors-detect添加coretemp/etc/modules
  • 我已经安装i8kutils并运行了sudo modprobe i8k force=1,现在我可以在psensorGUI中看到风扇速度,如下图所示;
  • 我已经安装fancontrol并尝试按照此处所述进行设置: https: //askubuntu.com/a/46135/762767 - 该pwmconfig工具能够在校准期间关闭和打开我的风扇,但是,校准后它说:
No correlations were detected.
There is either no fan connected to the output of hwmon7/pwm1,
or the connected fan has no rpm-signal connected to one of
the tested fan sensors. (Note: not all motherboards have
the pwm outputs connected to the fan connectors,
check out the hardware database on http://www.almico.com/forumindex.php)
Run Code Online (Sandbox Code Playgroud)

另外,即使我完成pwmconfig设置并运行fancontrol服务,风扇行为也没有变化。

这是 psensor 中的样子: 在此输入图像描述

Kyl*_*ker 7

更新 BIOS 并没有解决我的粉丝行为。

不过,它会永久降低处理器的性能,并且对某些处理器来说会失去降压能力。

以下是如何手动控制风扇并设置自定义风扇曲线

我有一台 Dell G5 5590,配有 i7-9750H 和 RTX 2070MQ。我正在运行 Pop_OS 20.10,它是 ubuntu 变体,并使用 systemd。

据我所知,BIOS的更新(至少在1.10之后,之前不能告诉你)主要是为了修复英特尔处理器架构的安全缺陷。“修复”需要以永久降低性能的方式限制处理器,并且降级是相当困难和危险的(被戴尔阻止,需要生成您自己的假BIOS有效负载来绕过,并且可能使指纹读取器永远无法再次工作)。根据我从 1.10 到 1.14 的经验,按照上述答案以及对上述答案和其他链接的评论,他们也不会改变这台笔记本电脑的风扇/热分布。

这是我的温度曲线,即使在 800mhz 空闲时,在最新的 BIOS 1.14 上: 在此输入图像描述

正如您在图像底部看到的,我的温度只是上下波动。在这些摆动的顶部,风扇打开至“高”/全速 4700rpm,在底部,风扇关闭至 0rpm。非常令人恼火。与我在 BIOS 1.10 上的体验相同。

后来更新:在这台笔记本电脑上,我的问题是通过 hdmi 和 miniDP 端口使用外部显示器 - 这样做会导致我的温度升高 40+ 摄氏度,无论是在 Linux 还是 Windows 中,这似乎是 nvidia 驱动程序问题。通过 USB-C 将我的外部显示器连接到双 HDMI 集线器,可以让我的电脑在没有风扇的情况下保持在 47 摄氏度,在干净启动后处于空闲状态。

戴尔对风扇进行了限制,并且只允许控制特定的预设,但是可以通过阅读以下链接在您的硬件上尽可能地访问它们:

(更新:戴尔似乎没有开源风扇控制,并且逆向工程工作取得的成功有限;Windows 可用的预设似乎比我在 Linux 中能够访问的要多。)

如何控制风扇转速? https://www.cyberciti.biz/faq/controlling-dell-fan-speeds-Temperature-on-ubuntu-debian-linux/ https://mijorus.medium.com/ Thermal-tweaks-on-dell-laptops- running-linux-769c8c80022e https://wiki.archlinux.org/index.php/fan_speed_control#BIOS_overriding_fan_control https://github.com/TomFreudenberg/dell-bios-fan-control

(请注意,我认为 /etc/i8kutils/i8kmon.conf 在更高版本中移至 /etc/i8kmon.conf,这就是我现在在我的文件系统和手册页中看到的内容。手册页中还有一项规定在您的主目录中指定一个conf文件。)

第 1 步:安装和设置

sudo apt install lm-sensors i8kutils -y
sudo modprobe i8k
if that doesn't work, which it did not for me, you may try:
# sudo modprobe i8k force=1
# (which seems to work for me?)
git clone https://github.com/TomFreudenberg/dell-bios-fan-control.git
cd dell-bios-fan-control
make
sudo mv dell-bios-fan-control /usr/bin/dell-bios-fan-control
Run Code Online (Sandbox Code Playgroud)

如果您遇到 i8k 无法工作的问题,您可以尝试以下操作:

sudo -i
echo "options i8k force=1"  >  /etc/modprobe.d/i8k.conf
echo i8k  >> /etc/modules
exit
Run Code Online (Sandbox Code Playgroud)

如果重新启动计算机,您也可能会看到更好的结果。

如果您仍然遇到问题,您可以检查上面提到的链接并使用 modprobe 进行更多研究。此链接也可能有助于指导您。

第 2 步:看看是否有效

为了真正生效,我们需要启动服务,并禁用风扇的 BIOS 控制,这显然是非常危险的。像这样的处理器可能会在 10 秒的高温活动中自行烧毁而无法修复,因此请务必小心。

我的建议:

  1. 打开psensor或其他一些图形温度应用程序,以便您可以密切关注温度,并准备好在发现温度上升高于应有水平时采取行动。
  2. 测试并确保您可以通过运行立即返回 BIOS 控制dell-bios-fan-control 1(按照此处)。
  3. 您可以设置警报,psensor以便在达到特定温度时自动运行dell-bios-fan-control 1,以更加安全。
  4. 如果您在运行该命令时看到温度上升并且没有听到风扇启动,请准备好快速关闭电源。我注意到在这台笔记本电脑上,按住电源按钮硬关机的速度非常慢,因此为了安全起见,您应该将操作系统电源按钮设置更新为“关机”而不是“睡眠”。(我认为你不会想要运行,shutdown now因为这不会足够快地杀死CPU上的负载,但我不确定。)
  5. ctrl+ alt+ printscrn/(sysreq) +b可能是让内核立即硬重启的最快方法。可能有更好的方法。

这可能有点过分了,但是......如果您有一台昂贵的笔记本电脑,请做好准备。(不过,不要偏执,因为有硬件安全开关可以关闭笔记本电脑以防止自身过热。)

既然你已经准备好了,

sudo systemctl stop i8kmon.service 
sudo systemctl status i8kmon.service 
Run Code Online (Sandbox Code Playgroud)

好的,我们现在要禁用 BIOS 控制——风扇应该安静——然后立即打开风扇——我们1将测试您实际上有多少个风扇设置,并确保这一点工作中。

一一运行这些命令并注意您的系统。

dell-bios-fan-control 0
# fans are now not being controlled by anything; are they quiet? 
# how are temps? You can watch for a second if desired.
dell-bios-fan-control 1
# let's turn it back on to make sure our failsafe works. With that settled,
# let's turn it back off
dell-bios-fan-control 0
# and let's manually set the fans on with i8kctl
i8kctl fan 1 1
# did fans turn on? let's see what RPM we're at:
i8kctl 
# you can spam this command a few times to get info. 
# the 7th and 8th values (will be in the thousands if fan is running, otherwise 0)
# are the left and right fan RPM.
# Now let's try and see if you hear different rpm's at different levels.
sudo i8kctl fan 2 2
# hear a difference? we can check again: 
i8kctl 
sudo i8kctl fan 3 3
i8kctl 
# did they all work? If not, not which ones did and didn't. For my G5 5590, I'm only seeing 0,1,2 work, which are 0rpm, 2200~ rpm, and 4740rpm.
Run Code Online (Sandbox Code Playgroud)

第三步:设置风扇“曲线”

现在您需要设置风扇曲线。我们通过编辑此文件来做到这一点:

sudo nano /etc/i8kmon.conf
Run Code Online (Sandbox Code Playgroud)

现在您必须根据计算机的热特性编辑该文件。根据需要查看手册页和文档。简短的版本是其中的几行是这样说的:

set config(0) {{0 0} -1 55 -1 60}
set config(1) {{1 1} 45 80 45 80}
set config(2) {{2 2} 70 90 70 90}
set config(3) {{3 3} 80 128 80 128}
Run Code Online (Sandbox Code Playgroud)

您需要根据笔记本电脑的热特性调整这些值。我的特定机器不能怠速低于 85,期间,因此风扇必须始终打开,因此我的曲线会相应调整。一旦我重新粘贴,我会再次更改它,可能是为了获得安静的空闲状态。

(请注意,G5 5590 不支持功率级 3,仅支持功率级 2——不过,如果您不打算包含该行,请确保您测试它不会破坏任何东西,i8kutils 对事情很敏感像那样)

要解释如何编写这些行,它们的意思是:

# DO NOT COPY PASTE THESE LINES, ADDING COMMENTS AFTER BREAKS THIS CONFIG FILE
set config(0)   {{0 0}  -1  55  -1  60} # run fans at 0,0; above 55(ac) / 60(batt), move up to config(1)
set config(1)   {{1 1}  50  65  55  70} # run fans at 1,1; at 50(ac),55(batt) drop down to config(0); at 65(ac),70(batt) move up to config(2)
set config(2)   {{2 2}  60  75  65  80} # etc.                           
set config(3)   {{2 2}  70 128  75 128} # etc.    
Run Code Online (Sandbox Code Playgroud)

注意:请勿在与这些命令相同的行上添加注释,仅在换行符上/之后添加注释。另外,最大/最小温度设置应该重叠,最好至少 10 度左右——如果您不明白为什么,请参阅手册页。

# set 
# config(configuration-number) 
# {
#  {speed-of-fan-n1 speed-of-fan-n2} 
#  drop-down-temp-AC                          
#  step-up-temp-AC                          
#  drop-down-temp-battery                       
#  step-up-temp-battery
# }
# 
# https://mijorus.medium.com/thermal-tweaks-on-dell-laptops-running-linux-769c8c80022e
Run Code Online (Sandbox Code Playgroud)

fans at 0,0fans at 1,1对应于这些行:

set status(leftspeed)   "0 1000 2000 3000" 
# 0=0rpm, 1=1000rpm, etc.
set status(rightspeed)  "0 1000 2000 3000" 
# same for right fan

# so 1,1 correponds to 1000rpm left fan,1000rpm right fan
Run Code Online (Sandbox Code Playgroud)

(再次请注意,在 G5 中(我认为甚至在精密系列中也不支持,这太疯狂了),不支持手动设置风扇 RPM,但我认为在 XPS 和 Alienware 系列中是支持的 - 然而,说,不要省略这些行。程序会运行,但风扇永远不会旋转!)

这告诉我们您在此处的评论中看到了什么。我认为 Alienware 允许此功能,而根据我简要阅读的内容,XPS 似乎是允许的 - 然而,戴尔人为地限制了粉丝使用所有不是他们顶级高端机器的东西 - 甚至是他们的半高端机器Precision 和 G5(不确定 G7?)系列不允许转速设置。不错,戴尔。

第四步:粉丝即服务

现在,如果您过去关注过您的临时情况,您可以尝试进入配置文件并将其设置为您想要的任何级别,然后打开 i8kmon 的 systemd 服务。

sudo systemctl status i8kmon.service 
sudo systemctl enable i8kmon.service 
sudo systemctl start i8kmon.service 
Run Code Online (Sandbox Code Playgroud)

现在,我们还需要添加一个 systemd 进程,以确保重启时 BIOS 不会再次接管。按照本指南,我们基本上会这样做:

sudo nano /lib/systemd/system/dell-bios-fan-control.service
Run Code Online (Sandbox Code Playgroud)

将其粘贴到那里:

[Unit]
Description=Turn off bios control of fans

[Service]
Type=simple
ExecStart=/usr/bin/dell-bios-fan-control 0

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

然后

sudo cp /lib/systemd/system/dell-bios-fan-control.service /etc/systemd/system/dell-bios-fan-control.service
 
sudo systemctl enable dell-bios-fan-control
sudo systemctl start dell-bios-fan-control
Run Code Online (Sandbox Code Playgroud)

你应该可以走了。不过,我会继续重新启动计算机,并确保它按预期工作。观察 psensor 应该会告诉您它是否遵循您的配置值。

如果这里有任何东西不起作用,请告诉我,在通过反复试验弄清楚之后,我正在以一种非常混乱的方式编写此内容。随着时间的推移,我正在清理它,因为我巩固了对此的理解。

一个明显的问题是,为了安全起见,在启动 i8k 服务时应该进行错误处理,以便在启动失败时重新打开 BIOS 控制。

即使这样也不能保证。我已经注释掉了“风扇转速”行,因为默认文件表明它们是不必要的,可以自动探测,并且我的型号(G5 5590)不支持该功能。该服务似乎启动良好,但无法真正激活风扇。因此,我还建议在另一个应用程序中设置另一个温度故障保护装置。如果/当我有时间这样做时,我会尝试更新本指南。

第 5 步:关机行为/双启动安全

如果您是双启动的,则在任何其他未添加手动风扇控制的发行版中都不会运行任何风扇,因此,您会过热并崩溃。要改变这一点,您应该添加一个反向过程,以在关机时将控制权交回 BIOS,如下所示:

sudo apt install lm-sensors i8kutils -y
sudo modprobe i8k
if that doesn't work, which it did not for me, you may try:
# sudo modprobe i8k force=1
# (which seems to work for me?)
git clone https://github.com/TomFreudenberg/dell-bios-fan-control.git
cd dell-bios-fan-control
make
sudo mv dell-bios-fan-control /usr/bin/dell-bios-fan-control
Run Code Online (Sandbox Code Playgroud)
sudo -i
echo "options i8k force=1"  >  /etc/modprobe.d/i8k.conf
echo i8k  >> /etc/modules
exit
Run Code Online (Sandbox Code Playgroud)

然后

sudo cp /lib/systemd/system/dell-bios-fan-control-reverse.service /etc/systemd/system/dell-bios-fan-control-reverse.service
 
sudo systemctl enable dell-bios-fan-control-reverse
sudo systemctl start dell-bios-fan-control-reverse
Run Code Online (Sandbox Code Playgroud)


K7A*_*AAY 3

请将您的Dell G5 5590 笔记本电脑从 BIOS 版本 1.11.1 更新到最新的BIOS 1.12.0,以解决风扇问题,因为风扇的控制是通过 BIOS 进行的,尽管您无法在其中调整控制(然而)。

后一个断言基于我在网络搜索中发现的前三篇帖子,这表明运行 Windows 10 和 Linux 的用户存在问题;因此我认为涉及BIOS。

https://www.reddit.com/r/Dell/comments/ag5d4p/dell_g5_manual_fan_control_utility/

https://www.dell.com/community/Inspiron/Dell-G5-15-5590-fan-control/td-p/7390514

https://www.dell.com/community/Inspiron/Annoying-fan-speed-oscillation-on-DELL-G5-5590/td-p/7403566