Controlling fans and undervolting in Acer Nitro 5 with Ubuntu

I installed Ubuntu on my Acer Nitro 5 || 8GB DDR4 || 1TB NVME SSD || i5-9300H || 4GB GTX 1650 laptop, replacing Windows.

Switching to Linux I think there are many features that I am unable to use like controlling fans and undervolting as in Windows; so is there any way by which I can get access to such features?

Acer Nitro 5


Paraphrased and abridged, from How to undervolt Intel i-series CPU in Linux:

  1. Install pip

    sudo apt install python3-pip
    

    Check with

    pip3 --version
    

    Expected output

    pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
    
  2. Install undervolt package

    sudo pip3 install undervolt
    

    Check with

    pip3 show undervolt
    

    Expected output

    Name: undervolt
    Version: 0.3.0
    Summary: Undervolt Intel CPUs under Linux
    Home-page: http://github.com/georgewhewell/undervolt
    Author: George Whewell
    Author-email: [email protected]
    License: GPL
    Location: /home/saransh/.local/lib/python3.8/site-packages
    Requires: 
    Required-by:
    
  3. Add Python installed package path to PATH environment variable

    sudo nano /etc/environment
    

    Append :home/<user>/.local/bin to PATH

    Source new enviroment

    source /etc/environment
    

    Check with

    echo $PATH
    

    Expected output

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/saransh/.local/bin"
    

    Check with

    sudo undervolt --read
    

    Expected output

    temperature target: -5 (95C)
    core: -128.91 mV
    gpu: 0.0 mV
    cache: -128.91 mV
    uncore: 0.0 mV
    analogio: 0.0 mV
    powerlimit: 60.0W (short: 0.00244140625s - disabled) / 45.0W (long: 28.0s - enabled)
    
  4. Create service to run upon boot

    cd /etc/systemd/system/
    sudo nano undervolt.service
    

    Paste in

    [Unit]
    Description=undervolt
    After=suspend.target
    After=hibernate.target
    After=hybrid-sleep.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/undervolt -v --core -150 --cache -150 --gpu -100
    
    [Install]
    WantedBy=multi-user.target
    WantedBy=suspend.target
    WantedBy=hibernate.target
    WantedBy=hybrid-sleep.target
    

    NOTE: change --core and --cache arguments according to your CPU. Do some research about your CPU stable offset voltage, else your system will shutdown and reset to default offset voltage, i.e. 0.0 mV, or may cause damage to your system!!!

    Check with

    systemctl start undervolt.service
    systemctl enable undervolt.service
    

    Stress test CPU to find the stable offset voltage

    Install stress package to Stress test the CPU

    sudo apt install stress
    

    Run stress test

    stress -c <CPU cores> 
    

    i.e.

    stress -c 8
    
  5. Stress test (again) and check CPU temperature

    Install i7z package to monitor the CPU temperature

    sudo apt install i7z
    

    Run monitor in super user session

    sudo su
    i7z
    

    Expected output

    i7z screenshot

    Re-run stress test.

    If CPU temperature goes above 80 °C, then continue the steps below, else you have finished.

  6. Disable Turbo boost

    Create start up script

    sudo nano /usr/local/sbin/no-turbo.sh
    

    Paste

    #!/bin/sh -
    cd /sys/devices/system/cpu/intel_pstate
    echo 1 > no_turbo
    

    Create a unit file to run the script on Startup

    sudo nano /etc/systemd/system/no-turbo.service
    

    Paste

    [Unit]
    Description="Disable Turbo boost"
    [Service]
    Type=simple
    ExecStart=/usr/local/sbin/no-turbo.sh
    [Install]
    WantedBy=multi-user.target
    

    Check with

    systemctl start no-turbo.service
    systemctl enable no-turbo.service
    

    Turbo boost should now be disabled.