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)."