Here are the quick command to adjust NVIDIA GPU on headless ubuntu.
Run Display
X :1 &
export DISPLAY=:1
Copy this as fan.sh
then set permission with chmod a+x fan.sh
The usage `./fan.sh 50 50`, which will adjust fan speed for 2x RTX 4090
#!/bin/bash
# Usage: ./set_fans.sh <fan_speed_gpu0> <fan_speed_gpu1>
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: $0 <fan_speed_gpu0> <fan_speed_gpu1>"
echo "Please provide two fan speeds (0-100)."
exit 1
fi
# Validate input
for arg in "$1" "$2"; do
if ! [[ "$arg" =~ ^[0-9]+$ ]] || [ "$arg" -lt 0 ] || [ "$arg" -gt 100 ]; then
echo "Error: Fan speed must be an integer between 0 and 100."
exit 1
fi
done
FAN_SPEED_GPU0=$1
FAN_SPEED_GPU1=$2
# Start a dummy X server if not already running
if ! pgrep -x Xorg > /dev/null; then
echo "Starting X server on :1..."
X :1 &
sleep 3 # give Xorg time to start
fi
export DISPLAY=:1
# Apply fan settings
echo "Setting GPU 0 fans to $FAN_SPEED_GPU0%..."
nvidia-settings -a "[gpu:0]/GPUFanControlState=1"
nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=$FAN_SPEED_GPU0"
nvidia-settings -a "[fan:1]/GPUTargetFanSpeed=$FAN_SPEED_GPU0"
echo "Setting GPU 1 fans to $FAN_SPEED_GPU1%..."
nvidia-settings -a "[gpu:1]/GPUFanControlState=1"
nvidia-settings -a "[fan:2]/GPUTargetFanSpeed=$FAN_SPEED_GPU1"
nvidia-settings -a "[fan:3]/GPUTargetFanSpeed=$FAN_SPEED_GPU1"
echo "✅ Fan speeds applied: GPU0=$FAN_SPEED_GPU0%, GPU1=$FAN_SPEED_GPU1%"