Managing PC fan speeds in Linux can help you achieve the perfect balance between cooling performance and noise levels. While your BIOS handles fan control by default, Linux offers powerful tools to take manual control when needed. This comprehensive guide will walk you through controlling your PC fans and safely returning control to your BIOS.
Understanding Fan Control Basics
Before diving into Linux fan control, it’s important to understand how modern PC fans work:
PWM vs Voltage Control: Most modern fans use PWM (Pulse Width Modulation) for speed control, offering precise speed adjustment from 0-100%. Older 3-pin fans typically use voltage control, providing less granular control.
Hardware Monitoring Chips: Your motherboard contains dedicated chips (like NCT6798, IT8772, or similar) that interface between the CPU, sensors, and fans. Linux accesses these through the Hardware Monitoring (hwmon) subsystem.
BIOS Safety Override: Your motherboard’s BIOS maintains ultimate control over fan speeds as a safety mechanism. If temperatures exceed critical thresholds, the BIOS will override any Linux settings to prevent hardware damage.
Prerequisites and Tools
Essential Packages
Most Linux distributions require installing sensor monitoring tools:
# Ubuntu/Debian
sudo apt install lm-sensors fancontrol
# Fedora/CentOS/RHEL
sudo dnf install lm_sensors fancontrol
# Arch Linux
sudo pacman -S lm_sensors fancontrol
Hardware Detection
Before controlling fans, you need to detect your system’s sensors and fan controllers:
# Detect all available sensors (answer 'yes' to most questions)
sudo sensors-detect
# View detected sensors and current readings
sensors
Finding Your Fan Controllers
Locating Hardware Monitoring Devices
Your system’s fan controls are located in the /sys/class/hwmon/
directory:
# List all hardware monitoring devices
for device in /sys/class/hwmon/hwmon*/name; do
echo "$(dirname $device): $(cat $device)"
done
Common controller chips include:
- NCT6798/NCT6799: Nuvoton Super I/O chips (very common on modern motherboards)
- IT8772/IT8792: ITE chips
- W83627: Winbond chips
- k10temp/coretemp: CPU temperature sensors
Finding Available Fan Controls
Once you’ve identified your hardware monitoring device, check for available PWM controls:
# Replace hwmon1 with your actual device
ls -la /sys/class/hwmon/hwmon1/pwm*
# Show all PWM-related files system-wide
find /sys/class/hwmon -name "*pwm*" | sort
Manual Fan Control Methods
Direct PWM Control
The most straightforward method is writing directly to PWM files:
# Set fan to 50% speed (values: 0-255)
echo 128 > /sys/class/hwmon/hwmon1/pwm1
# Turn fan off (use with caution!)
echo 0 > /sys/class/hwmon/hwmon1/pwm1
# Set fan to maximum speed
echo 255 > /sys/class/hwmon/hwmon1/pwm1
Important: Always ensure adequate cooling before reducing fan speeds. Monitor temperatures using watch sensors
.
Understanding PWM Enable States
Each PWM output has an associated enable file that determines the control mode:
# Check current enable state
cat /sys/class/hwmon/hwmon1/pwm1_enable
Enable values typically mean:
0
: No fan speed control (full speed)1
: Manual PWM control2
: Automatic control (BIOS/motherboard managed)3
: Automatic control with manual override capability
To enable manual control:
echo 1 > /sys/class/hwmon/hwmon1/pwm1_enable
Using Fancontrol for Automated Management
Initial Configuration
The fancontrol
utility provides automated fan curve management:
# Run the configuration wizard
sudo pwmconfig
The wizard will:
- Detect available PWM outputs and temperature sensors
- Test each fan by stopping and starting it
- Allow you to correlate fans with temperature sensors
- Create temperature curves for automatic control
Configuration File
The wizard creates /etc/fancontrol
with your settings:
# Example fancontrol configuration
INTERVAL=10
DEVPATH=hwmon1=devices/platform/nct6775.656
DEVNAME=hwmon1=nct6798
FCTEMPS=hwmon1/pwm1=hwmon1/temp7_input
FCFANS=hwmon1/pwm1=hwmon1/fan1_input
MINTEMP=hwmon1/pwm1=30
MAXTEMP=hwmon1/pwm1=60
MINSTART=hwmon1/pwm1=150
MINSTOP=hwmon1/pwm1=100
Starting Fancontrol Service
# Start fancontrol
sudo systemctl start fancontrol
# Enable automatic startup
sudo systemctl enable fancontrol
# Check service status
sudo systemctl status fancontrol
Advanced Control Techniques
Creating Custom Fan Curves
You can create sophisticated fan curves by directly editing /etc/fancontrol
:
# Multiple temperature thresholds
MINTEMP=hwmon1/pwm1=35
MAXTEMP=hwmon1/pwm1=65
MINPWM=hwmon1/pwm1=80
MAXPWM=hwmon1/pwm1=255
Per-Application Fan Profiles
Create scripts for different scenarios:
#!/bin/bash
# gaming-fans.sh - High performance profile
echo 1 > /sys/class/hwmon/hwmon1/pwm1_enable
echo 200 > /sys/class/hwmon/hwmon1/pwm1
echo "Gaming fan profile activated"
#!/bin/bash
# quiet-fans.sh - Low noise profile
echo 1 > /sys/class/hwmon/hwmon1/pwm1_enable
echo 80 > /sys/class/hwmon/hwmon1/pwm1
echo "Quiet fan profile activated"
Returning Control to BIOS
Restoring Automatic Control
To return fan control to your BIOS/motherboard:
# Method 1: Set enable state to automatic
echo 2 > /sys/class/hwmon/hwmon1/pwm1_enable
# Method 2: Stop fancontrol service
sudo systemctl stop fancontrol
sudo systemctl disable fancontrol
Handling Permission Issues
If you encounter “Permission denied” errors even as root:
# Use tee for better permissions handling
echo 2 | sudo tee /sys/class/hwmon/hwmon1/pwm1_enable
# Check if the file is writable
ls -la /sys/class/hwmon/hwmon1/pwm1_enable
Module Reload Method
For stubborn controls, reload the hardware monitoring module:
# Find your hwmon module
lsmod | grep -E "(nct6775|it87|w83)"
# Reload the module (example for NCT6775)
sudo modprobe -r nct6775 && sudo modprobe nct6775
Guaranteed Reset: Reboot
The most reliable way to restore BIOS control:
sudo reboot
Since manual PWM settings don’t persist across reboots, this always returns control to the BIOS.
Troubleshooting Common Issues
Fans Not Responding
Problem: PWM commands don’t affect fan speed.
Solutions:
- Verify the fan supports PWM (4-pin connector)
- Check if the enable file needs to be set to manual mode
- Ensure you’re writing to the correct PWM file
Permission Denied Errors
Problem: Cannot write to PWM files even as root.
Solutions:
- Use
echo value | sudo tee filename
instead of redirection - Check if the file is read-only (
ls -la filename
) - Verify the hardware supports the operation
Temperature Spikes
Problem: CPU overheating after fan control changes.
Solutions:
- Immediately restore automatic control
- Monitor temperatures with
watch sensors
- Ensure minimum fan speeds prevent overheating
Service Conflicts
Problem: Fancontrol conflicts with other monitoring software.
Solutions:
- Stop conflicting services before starting fancontrol
- Check for BIOS settings that might interfere
- Ensure only one fan control method is active
Best Practices and Safety Tips
Temperature Monitoring
Always monitor system temperatures when experimenting with fan control:
# Continuous temperature monitoring
watch -n 1 sensors
# Log temperatures to file
while true; do
echo "$(date): $(sensors | grep 'Core 0')" >> temp_log.txt
sleep 5
done
Safe Fan Speed Limits
- Never set CPU/case fans below 30% unless you’re monitoring temperatures closely
- Keep intake fans running at minimum 20-25% to maintain airflow
- Test new configurations under load (stress testing, gaming, etc.)
Backup and Recovery
Before making changes:
# Backup current PWM settings
for pwm in /sys/class/hwmon/hwmon*/pwm*; do
if [[ -f "$pwm" && "$pwm" != *"_"* ]]; then
echo "$pwm: $(cat $pwm)" >> pwm_backup.txt
fi
done
System Integration
Consider integrating fan control with system monitoring:
#!/bin/bash
# Smart fan control based on CPU load
CPU_TEMP=$(sensors | grep 'Package id 0' | awk '{print $4}' | sed 's/+//g' | sed 's/°C//g')
if (( $(echo "$CPU_TEMP > 70" | bc -l) )); then
echo 200 > /sys/class/hwmon/hwmon1/pwm1 # High speed
elif (( $(echo "$CPU_TEMP > 50" | bc -l) )); then
echo 120 > /sys/class/hwmon/hwmon1/pwm1 # Medium speed
else
echo 80 > /sys/class/hwmon/hwmon1/pwm1 # Low speed
fi
Conclusion
Linux provides powerful and flexible fan control capabilities that can help you optimize your system’s cooling and noise characteristics. Whether you need simple manual control for specific scenarios or sophisticated automated management, the tools are available.
Remember these key points:
- Always prioritize system safety and temperature monitoring
- Your BIOS maintains ultimate control as a safety mechanism
- Start with conservative settings and monitor system behavior
- Use
fancontrol
for automated management, direct PWM control for manual adjustments - Returning to BIOS control is always possible through enable files, service management, or system reboot
With proper understanding and careful implementation, Linux fan control can significantly improve your computing experience while maintaining system reliability and longevity.
In case you have found a mistake in the text, please send a message to the author by selecting the mistake and pressing Ctrl-Enter.