Aspireone the noisy fan hack

  • Download the acer_ec.pl script.
  • Download the acerfand daemon script.
  • Execute these lines in a terminal in the directory you downloaded the above scripts:
    chmod a+x acerfand
    sudo cp acer_ec.pl acerfand /usr/local/bin/

    To run it straight away:
    sudo acerfand
    To run it at boot:
    In Ubuntu:
    gksu gedit /etc/rc.local
    Insert the following line above the “exit 0” at the bottom:
    /usr/local/bin/acerfand
    In Linpus Linux Lite: (default Aspire One installation)
    As root :
    vi /etc/rc.local
    Press i to switch to INSERT mode and add the following line at the bottom :
    /usr/local/bin/acerfand
    Press Esc and type :wq to save and quit
    Optionally create an /etc/acerfand.conf file. The file is just a shell script that sets up to three values. eg:
    INTERVAL=5
    FANOFF=60
    FANAUTO=70

    Those are the default values, if the /etc/acerfand.conf file isn’t found.
    INTERVAL is the polling interval in seconds
    FANOFF is the temperature at or below which to turn the fan off, if it’s currently on auto
    FANAUTO is the temperature at or above which to turn the fan to auto, if it’s currently off.
    ==========
    Read all registers:
    sudo perl acer_ec.pl regs
    sudo perl acer_ec.pl regs > test.txt

    Read one register:
    # 51 is the address of the register in hexadecimal
    sudo perl acer_ec.pl ?= 51
    Write value to one register:
    # 51 is the address in hexadecimal of the register to be written, and 0 is the value to write, also in hexadecimal.
    sudo perl acer_ec.pl := 51 0

    Convenient commandline to monitor the temperature. (Register 58 is thought to be CPU temperature, in degrees C):
    This also assumes you’re already root and have made acer_ec.pl executable. eg:
    # Become root
    sudo su -
    # Make the script executable
    chmod a+x acer_ec.pl
    # Read the temperature and display in decimal every 2 seconds
    watch -n 2 'echo Temp: $[$(./acer_ec.pl ?= 58 | cut -f 3 -d" ")] C'

    NB: For this to work, /bin/sh must invoke bash. Usually /bin/sh is a symlink to /bin/bash, but in Ubuntu this is not the default, and as a result the conversion of the temperature from hexadecimal to decimal won’t occur.

    To change /bin/sh to point to /bin/bash, on Ubuntu, as root:
    ln -sfn /bin/bash /bin/sh

    Leave a Reply

    Your email address will not be published. Required fields are marked *