Categories
Ubuntu

Set fan speed Nvidia GPU Ubuntu Server Headless

Here are the quick command to adjust NVIDIA GPU on headless ubuntu.

Run this and reboot

sudo nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=7

Run Display then execute your NVIDIA-settings fan speed

X :1 &
export DISPLAY=:1

Or, simple way is copy this as fan.sh at home path then set permission with chmod a+x ~/fan.sh.

The usage `~/fan.sh 50 50`, which will adjust fan speed for 2x RTX 4090

❯ cat fan.sh       
#!/bin/bash

# Check if an argument is provided
if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Usage: $0 <fan_speed_gpu0> <fan_speed_gpu1>"
    echo "Please provide fan speed percentages (0-100)."
    exit 1
fi

# Validate input (must be a number between 0 and 100)
if ! [[ "$1" =~ ^[0-9]+$ ]] || [ "$1" -lt 0 ] || [ "$1" -gt 100 ]; then
    echo "Error: Fan speed for GPU0 must be an integer between 0 and 100."
    exit 1
fi

if ! [[ "$2" =~ ^[0-9]+$ ]] || [ "$2" -lt 0 ] || [ "$2" -gt 100 ]; then
    echo "Error: Fan speed for GPU1 must be an integer between 0 and 100."
    exit 1
fi

FAN_SPEED=$1
FAN_SPEED_TWO=$2

# Ensure X server is running
if ! pgrep -x "Xorg" > /dev/null && ! pgrep -x "X" > /dev/null; then
    echo "X server not running, starting a new one..."
    export XDG_SESSION_TYPE=x11
    export DISPLAY=:0
    startx -- $DISPLAY &
    sleep 5
else
    echo "X server is already running."
    export DISPLAY=:0
fi

# Set fan control state and speed for GPU 0
echo "Setting fan speed to $FAN_SPEED% for GPU 0..."
nvidia-settings -a "[gpu:0]/GPUFanControlState=1"
nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=$FAN_SPEED"
nvidia-settings -a "[fan:1]/GPUTargetFanSpeed=$FAN_SPEED"

# Set fan control state and speed for GPU 1
echo "Setting fan speed to $FAN_SPEED_TWO% for GPU 1..."
nvidia-settings -a "[gpu:1]/GPUFanControlState=1"
nvidia-settings -a "[fan:2]/GPUTargetFanSpeed=$FAN_SPEED_TWO"
nvidia-settings -a "[fan:3]/GPUTargetFanSpeed=$FAN_SPEED_TWO"

echo "Fan speed set to $FAN_SPEED% (GPU 0) and $FAN_SPEED_TWO% (GPU 1)."

Leave a Reply

Your email address will not be published. Required fields are marked *