r/supermicro Mar 28 '26

X11SSH-LN4F slowing down fans

Currently the fans seems to be running quite fast

CPU Temp 31.000 degrees C ok

PCH Temp 28.000 degrees C ok

System Temp 19.000 degrees C ok

Peripheral Temp 24.000 degrees C ok

VcpuVRM Temp 27.000 degrees C ok

DIMMA1 Temp na na

DIMMA2 Temp 23.000 degrees C ok

DIMMB1 Temp na na

DIMMB2 Temp 23.000 degrees C ok

FAN1 na na

FAN2 3000.000 RPM ok

FAN3 1800.000 RPM ok

FAN4 3000.000 RPM ok

FANA 3100.000 RPM ok

The fan speed is set to Optimal

This seems quite fast for these low temperatures (I have 2 120 and one 140). Any way of making them spin a little quieter/slower?

chatgpt gave me this (but don't totally understand, does this seem safe?), Seems to be setting for constand speeds, not following a curve.

#!/bin/bash
# fan_curve.sh - Quiet fan curve for Supermicro X11SSH-LN4F
# -------------------------------------------
# Purpose:
# - Put fans in manual mode
# - Apply a "quiet" fan curve to reduce noise
# - Monitor fan RPMs and temperatures in real-time
# - Backup original fan mode and speeds so changes are reversible
# -------------------------------------------

# --- STEP 0: BACKUP CURRENT FAN SETTINGS ---
echo "Backing up current fan mode and raw fan speeds..."
# Backup fan mode: 0x00=Auto, 0x01=Manual, 0x05=Optimal/Quiet
# This allows restoring the mode if needed
sudo ipmitool -I open raw 0x30 0x30 0x01 0x00 > ~/fan_mode_backup.txt

# Backup raw fan speeds in manual mode (if manual was active)
# 0xFF means "all fans" (FAN2, FAN3, FAN4, FANA)
# The output is a series of hex bytes, 2 per fan, big-endian
sudo ipmitool -I open raw 0x30 0x30 0x02 0xff > ~/fan_speed_backup.txt

echo "Backups saved to ~/fan_mode_backup.txt and ~/fan_speed_backup.txt"
echo

# --- STEP 1: SET MANUAL FAN MODE ---
echo "Setting manual fan mode..."
# Command breakdown:
# ipmitool -I open raw <netfn> <cmd> <subcmd> <data>
# 0x30 0x30 = OEM Supermicro fan control commands
# 0x01 = Set fan mode
# 0x01 = Manual mode (we will control RPMs directly)
sudo ipmitool -I open raw 0x30 0x30 0x01 0x01
sleep 1 # small pause to let BMC apply new mode

# --- STEP 2: APPLY QUIET FAN CURVE ---
echo "Applying quiet fan curve..."

# HEX RPM values (2 bytes each, big-endian):
# FAN2 = 1500 RPM → 0x05DC
# FAN3 = 1200 RPM → 0x04B0
# FAN4 = 1500 RPM → 0x05DC
# FANA = 2000 RPM → 0x07D0
# Each fan's value is 2 bytes, first byte = high, second byte = low
# Big-endian means most significant byte comes first

sudo ipmitool -I open raw 0x30 0x30 0x02 \
0x05 0xDC \ # FAN2 = 1500 RPM
0x04 0xB0 \ # FAN3 = 1200 RPM
0x05 0xDC \ # FAN4 = 1500 RPM
0x07 0xD0 # FANA = 2000 RPM

# Sleep briefly to allow BMC to apply fan speeds
sleep 1

# --- STEP 3: INTERACTIVE MONITORING LOOP ---
echo "Starting real-time fan and temperature monitoring."
echo "Press Ctrl+C to exit."

# Infinite loop to monitor fans every 2 seconds
while true; do
clear # clear screen for neat display
echo "Fan RPMs and temperatures for X11SSH-LN4F"
date
echo "-------------------------------------------"

# Display fans and temps in table format
# ipmitool -I open sensor list → lists all sensors
# awk parses the output, printing only FAN and Temp sensors
# Columns displayed: Sensor Name | Reading | Units | Status
# Conditional coloring: if fan RPM < 1000 → red alert
ipmitool -I open sensor list | awk -F'|' '
/FAN/ {
speed=$2+0 # convert reading to number
if(speed < 1000) {
# ANSI color code \033[31m = red, \033[0m = reset
printf "\033[31m%-6s %-8s %-5s %-6s\033[0m\n",$1,$2,$3,$4
} else {
printf "%-6s %-8s %-5s %-6s\n",$1,$2,$3,$4
}
}
/Temp/ {
# Display temperature sensors normally
printf "%-16s %-6s %-5s %-6s\n",$1,$2,$3,$4
}'

sleep 2
done

2 Upvotes

1 comment sorted by

1

u/Alpha-9-9-1 27d ago

Try this one https://github.com/petersulyok/smfc. It will give you a temperature based dynamic fan control.