Dell XPS 15 9570 - How to control the fans?

I'm running dualboot Windows 10 and Ubuntu 18.04 (using the respin from this link). Everything works properly, however the fans are continuously going on and off. The CPU temp is between 39 - 42 degrees celsius. I think the fans are activated somewhere within this range, then cool the CPU and thus get the signal again to stop the fans, etc. On Windows, the fans are completely off at idle or light work.

What I already did

  • lm_sensors: cannot find the fans even after "sudo sensors-detect"

  • i8kutils: Cannot find /prod/i8k

  • BIOS updated to version 1.5.0

  • Kernel is version 4.19.2-041902-generic

  • Installed and activated thermald, tlp, powertop and intel-microcode.

  • Set the graphics card to Intel for power-saving

    • "sudo prime-select intel"
  • Undervolt by -140 mV on core and CPU, and -40 mV on iGPU (using this link)

  • Installed smbios-utils and set it to different modes (balanced, cool-bottom, quiet, performance)

  • Disable fan BIOS control (see link)

All without any luck.

What I still want to do

  • Repasting

Stats

sudo tlp stat

+++ System Info

System         = Dell Inc. XPS 15 9570
BIOS           = 1.5.0
Release        = Ubuntu 18.04.1 LTS
Kernel         = 4.19.2-041902-generic #201811132032 SMP Tue Nov 13 20:34:19 UTC 2018 x86_64
/proc/cmdline  = BOOT_IMAGE=/boot/vmlinuz-4.19.2-041902-generic root=UUID=5394fef0-92d3-4753-a6a1-fd7b5c4f9cea ro quiet splash quiet acpi_rev_override=1 acpi_osi=Linux scsi_mod.use_blk_mq=1 nouveau.modeset=0 nouveau.runpm=0 mem_sleep_default=deep vt.handoff=1
Init system    = systemd v237
Boot mode      = UEFI

+++ Temperatures
CPU temp               =    43 [°C]
Fan speed              = (not available)

I guess that Ubuntu is unable to see the fans and is thus unable to take control over them. Any suggestions to gain control over them?


I found a solution to my own problem.

To see the fans with lm_sensors

Add dell-smm-hwmon to modules:

sudo su
echo "options dell-smm-hwmon restricted=0 force=1" > /etc/modprobe.d/dell-smm-hwmon.conf
echo "dell-smm-hwmon" > /etc/modules
exit
sudo update-initramfs -u

Reboot, and the fans should be visible with:

sensors
dell_smm-virtual-0
Adapter: Virtual device
fan1:           0 RPM
fan2:           0 RPM

To take over control of your fans

Then follow this guide to install i8kutils:

sudo apt install i8kutils
sudo su 
echo "i8k" > /etc/modules
echo "options i8k force=1" > /etc/modprobe.d/i8k.conf
exit

Reboot:

sudo modprobe i8k force=1

Configure i8kutils:

sudo -H gedit /etc/i8kmon.conf

Finally, disable Dell BIOS Fan Control with this program by TomFreudenberg to let i8kutils take over.

git clone https://github.com/TomFreudenberg/dell-bios-fan-control.git
cd dell-bios-fan-control
make
sudo dell-bios-fan-control 0

Simply i8kmon service will be started and will control your fans. You can also disable i8kmon to try ik8fan to manually control your fans (not recommended as you might turn off your fans and they will never be started putting your CPU and GPU danger!).

i8kfan 2 2

A less intrusive method to get less temperature (and therefore no fans are required) is using powertop.

 cat /sys/bus/pci/devices/0000\:01\:00.0/power/control # (on?. That is bad)
 sudo powertop --auto-tune
 cat /sys/bus/pci/devices/0000\:01\:00.0/power/control # (auto?. That is good)

In order to get the changes permanently, see How do I make Powertop changes permanent? . However, in the help of TLP it is said that 'attempting to apply powertop's --auto-tune settings on each boot will conflict with TLP'. By now, it is working fine for me (XPS 15 9570, bios 1.5).