Linux tip, Fedora tip / howto: keeping your PC cool and quiet

Note that these tips are mostly outdated

back to notes and tips index

Try my online puzzle page with Calcudoku, Killer Sudoku and online Sudoku.

keeping your PC cool and quiet

I have one of those "sleek" Asus "Terminator T2" cases: .
Yes, they don't take up a lot of space, but:
  • the case is really cramped, making it a pain to add/remove anything inside
  • it has only one AGP and one PCI slot
  • it is harder to keep cool
An increased temperature means higher fan speeds, which means more noise :-(

There are quite a few things you can do to improve this, as I did:

  • make sure the interior is free of dust (including all fan blades and cooling fins)
  • optimize the air flow inside the case
  • replace noisy fans

make sure the interior is free of dust

You simply have to open your PC every 6 months or so (depending on how dusty your work environment is), and vacuum out all dust (be very careful not to touch any components). For the fans and cooling blocks/fins you can use a small brush.

optimize the air flow inside the case

This involves making sure that the fans don't work against each other. I decided to let the case fan in the back blow inward, so cool air gets pulled in. On a fan, usually the side with the label is the side the air blows to. It's best to test this though.

For the CPU fan, the common wisdom seems to be to let it blow into the cooling block, i.e. down towards the CPU, so this is what I did.

In this PC, the power supply fan is on the inside (!), and blows out, so warm air from the power supply gets blown into the PC. I decided this was bad, and turned the fan around. I'm hoping enough warm air from the power supply exits at the back.

This picture shows the planned airflow (the CPU is obscured by the power supply and the harddisk cable):

My two 5 1/4" bays are empty, and the case fan is blowing straight into them (!). To guide the cooler air down, I've blocked the bays with some cardboard from a cereal box:

replace noisy fans

Zalman VF900-Cu graphics card fan

I ended up replacing the fan on my graphics card (a cheap whiny fan) with a Zalman VF900-Cu (costs about 28 pounds / 31 euros):

There are many installation guides for this fan on the web. Its main drawback for this PC is that the fan blocks the single PCI slot :-( (you can see this in the PC interior picture above).

Unfortunately the Ti4200 does not have a temperature sensor, so I can't tell you how well the Zalman cools. I'm always running it at the lowest speed though (it comes with a small case with a knob to control the fan speed) with no problems so far. And it's very quiet.

Xilence 92mm case fan

The case fan also needed replacing, for this I chose a fairly cheap (4 pounds or so) Xilence 92mm case fan. This fan has a maximum speed of 1500 RPM. Unfortunately, for my motherboard (the P4P8T of the Asus T2) the voltage fed to the CPU fan is the same as that to the case fan! And in my setup I depend on the case fan to run at a decent speed to pull in the cool air...

Connecting both to the variable voltage results in a CPU fan RPM of about 2600 (quite noisy), and a case fan RPM of about 500 (very quiet, but too slow). The Xilence fan has a power connector like on a harddisk, so you can hook it up to the maximum 12 Volts. To still get an RPM reading, you'll have to cut the red and black wires of the motherboard connector (the yellow wire is used to detect the RPM):

Now the temperatures are OK, but the case fan has become too noisy running at the full 1500 RPM :-(. To reduce this to about 1000 RPM, we need to connect a resistor between the power supply and the fan:

calculating the resistor value

The specifications of the Xilence 92mm fan:
voltage: 12V
power consumption: 0.6W (some sites put this at 0.84W)
current: 0.05A +/- 10% (some sites put this at 0.07A)
To compute the fans resistance:
V = I × R → 12 = 0.05 × R → R = 240.

Now we want the voltage over the fan to be 8V (assuming/hoping the dependency between the voltage and the RPM is linear):
8 = I × 240 → I = 0.0333.

There'll be 12V over both the fan and the resistor:
12 = I × (240 + R) → 4 = 0.0333 × R → R = 120.

So I bought a 120 Ohm resistor from Bitsbox (in fact I bought 10 resistors of various values to play with, at 5p each, plus 1.50 shipping made a total cost of 2 pounds) and put it in. For some reason the RPM readout doesn't work anymore with the resistor connected, but I can tell the fan is running more slowly and quietly.

Note that you need to check the required power rating of the resistor, in my case:
P = V × I → P = 4 × 0.0333 = 0.1333 W
so I could use the (cheaper) 0.5W resistor.

controlling fan speeds in software

You can read fan RPM values using:
cat /sys/class/hwmon/hwmon0/device/fan1_input
(and fan2_input etc.). You do need the lm_sensors package for this.

You can set the power input with:
echo 200 > /sys/class/hwmon/hwmon0/device/pwm1
(and pwm2 etc., if you have more)(200 is an example value, the minimum is 0 (note the fan does need a minimum voltage to start spinning), the maximum 255).

A program called pwmconfig in the lm_sensors package helps you set temperature limits and power ranges (which correspond to RPM ranges) in software. It can also create a plot of the power to RPM function (this plot is for my CPU fan):

The program fancontrol then actually sets the fan(s) power depending on the temperature.

Error: pwmconfig: There are no pwm-capable sensor modules installed

If you get that error, then you have to first run:

You can ignore any errors like: Failed to get D-Bus connection: Connection refused

Note: after sensors-detect is done, pwmconfig will still not work. First run:
cat /etc/sysconfig/lm_sensors
and look for a line like:
Then run:
modprobe w83627ehf
(alternatively, reboot)
I ended up having to add these lines to my /etc/rc.local:
modprobe w83627ehf
/usr/sbin/fancontrol &

Some results...

Before cleaning/fixing etc. my CPU temperature easily went over 40C at idle. With all changes implemented and the case fan running at full speed, this went down to 31C (fan at 2000 RPM), and a motherboard temperature of 29C (!). With the case fan running at 1000RPM, both temperatures stabilize at around 34C. The CPU now goes up to 42C under full load (CPU fan at 2500 RPM)(motherboard temp to 37C) (ambient temperature about 21C).

Send me your comments/experiences using the form below.

← back to notes and tips index
Please do not copy the text of this tip (© Patrick Min) to your web site.