Pages

10/25/2010

Adjusting Fan Speed on Ubuntu 10.10 for Dell XPS m1330

From http://ubuntuforums.org/showthread.php?t=842775
It's a bit quite old thread, but I have been using my XPS m1330 for more than 2 years now, just started to use Ubuntu recently. And here is problem i met.
69 C !!! idle  (normally it's around 70 - 75 C idle)
yet the fan is running at full speed all the time. It's soooo noisy.

Therefore, I have researched for a fix for this problem.
Some says that the temperature sensor/software has a bug in it, so it always tells +10 C from actual temperature.

But that doesn't solve the noise problem.

So, I did search again, and found the above link.

Here's the installation (I tried from that site)

#1 install the i8kutils package
# this package comes with i8kmon(for Dell fan speed monitor/setting) and i8kbuttons (for button config)
sudo apt-get install i8kutils

#2 add "i8k" into /etc/modules
sudo echo "i8k" >> /etc/modules

#3 It says add "options i8k force=1" on a new line in /etc/modprobe.d/options"
#   Since i couldn't find it, i created a new file   /etc/modprobe.d/i8k.conf
sudo echo "options i8k force=1" > /etc/modprobe.d/i8k.conf

#4 adding i8k module with modprob
# ps. I did without "force=1", it shows similar error to this
# FATAL: Error inserting i8k (/lib/modules/2.6.33-ARCH/kernel/drivers/char/i8k.ko): No such device
sudo modprobe i8k force=1 

#5 create file /etc/i8kmon.conf and put the following into the file
# i did some experiment with the original settings from the post above
# timeout == duration before i8kmon check CPU temp again
# temperatures in the thresholds are in Celsius and they're captured from CPU sensor.
# my laptop has only one fan.
# here is my current setting:
# Run as daemon, override with --daemon option
set config(daemon)      0

# Automatic fan control, override with --auto option
set config(auto)        1

# Report status on stdout, override with --verbose option
set config(verbose) 1

# Status check timeout (seconds), override with --timeout option
set config(timeout) 20

# Temperature thresholds: {fan_speeds low_ac high_ac low_batt high_batt}
set config(0)   {{-1 0}  -1  30  -1  30}
set config(1)   {{-1 1}  30  60  30  60}
set config(2)   {{-1 2}  60  128  60  128}

# For computer with 2 fans, use a variant of this instead:
# Temperature thresholds: {fan_speeds low_ac high_ac low_batt high_batt}
# set config(0) {{-1 0}  -1  52  -1  65}
# set config(1) {{-1 1}  41  66  55  75}
# set config(2) {{-1 1}  55  80  65  85}
# set config(3) {{-1 2}  70 128  75 128}

# end of file

#6 three ways to run this app

#6.1 using i8kmon daemon
#   Enable i8kmon in /etc/default/i8kmon
#   if trying to run i8kmon right now, it'll say it's locked by /etc/default/i8kmon
#   to unlock, change "ENABLED=0" to "ENABLED=1" in that file.
sudo gedit /etc/default/i8kmon

#   run daemon
sudo /etc/init.d/i8kmon start

#6.2 run i8kmon standalone version
# simply run "i8kmon" or "/usr/bin/i8kmon"
i8kmon

#6.3 using Swallow-applet
# applet is automatic started when login, plus it allows user interaction/monitoring at anytime
#install  gnome-swallow-applet
sudo apt-get install gnome-swallow-applet

#    right click at the top panel, select "Add to Panel" 
#    choose  "Swallower Meta-Applet" then click "Add"
#    in program to run, type:   i8kmon 
#    leave another field blank and press "OK"


Above number is current CPU temperature (not GPU temperature).
The button below allows user to switch to different fan speed (from the configurations).
It also automatically changes fan speed to match with temp.

edit:
I just realized the CPU temp shown in the pic above is not correct.
After i update my laptop's BIOS from version A14 --> A15, temperature goes from 33 C --> 50 C
(update BIOS for Dell : http://linux.dell.com/wiki/index.php/Tech/libsmbios_dellBiosUpdate)

one last important step!!!
I have been using the above configuration for awhile, and it really does annoy me, because every time it sets to slower fan speed, it changes the fan speed back to the highest in few seconds.
And it sounds like  "puff!" all the day.

The hack to fix it is to change the timeout delay to just 200 ms.
Although, you can't not do that with the default configuration (/etc/i8kmon.conf) because it only allows incremental of 1 second,
you can hack the executable /usr/bin/i8kmon by yourself!!!!

Just go use
sudo gedit /usr/bin/i8kmon

and change the line like this (about line #127)
set status(timer) [after [expr $config(timeout)*1000] {status_timer}]
to
set status(timer) [after [expr $config(timeout)*200] {status_timer}]

This will make the incremental unit in /etc/i8kmon.conf to be incremental by 200 ms, instead of 1000ms (1sec).

Next step is to change the config in /etc/i8kmon.conf
to set timeout to be 1

set config(timeout) 1
And that's it. Quiet XPS M1330, there you go.



P.S. to change i8kmon to be run as a service
edit /etc/default/i8kmon  change to ENABLE=1
and edit /etc/i8kmon.conf  change daemon = 1 too

No comments:

Post a Comment