This is an old revision of the document!


ubuntu 11.04 on asus pro 36j

this is not yet completed

nvidia card

i could not get the nvidia card to work but so far i didn't need it either.. so in order for it not to waste power and decrease the battery live it can be disabled.. (this is more or less a copy of this great article at ubuntuforums.org)

sudo apt-get install git build-essential
git clone http://github.com/mkottman/acpi_call.git
cd acpi_call
make
grep rate /proc/acpi/battery/BAT0/state
--- present rate:            19913 mW
sudo insmod acpi_call.ko
sudo echo '\_SB.PCI0.PEG1.GFX0._OFF' > /proc/acpi/call
grep rate /proc/acpi/battery/BAT0/state
--- present rate:            12558 mW

the following steps need to be executed after every kernel update:

sudo cp acpi_call.ko /lib/modules/`uname -r`/kernel/drivers/acpi/
sudo depmod

now make sure it is loaded on every start of the system:

sudo nano /etc/modules
--- add "acpi_call" as the last line and save
sudo nano /etc/rc.local
--- add "echo '\_SB.PCI0.PEG1.GFX0._OFF' > /proc/acpi/call" as the last line BEFORE exit 0
sudo nano /etc/modprobe.d/blacklist-nvidia.conf

enter these two lines:

blacklist nouveau
blacklist nvidia
sudo update-initramfs -u

now you should be able to reboot the system and then see the same low power consumption as right now.

auto recompile on kernel update

to keep this all working when a new kernel is installed you have to do the following steps:

cd .. && sudo mkdir -p /usr/local/src && sudo cp -r acpi_call /usr/local/src

create a new file

sudo nano /etc/kernel/postinst.d/acpi-call

and paste this into it:

#!/bin/bash

# We're passed the version of the kernel being installed
inst_kern=$1

if [ ! -e /usr/local/src/acpi_call ] ; then
    echo "acpi_call: WARNING - Failed to find source directory /usr/local/src/acpi_call.  Cannot proceed" >&2
    exit 0
fi

cd /usr/local/src/acpi_call/
rm -f acpi_call.ko
make

if [ ! -e acpi_call.ko ] ; then
    echo "acpi_call: WARNING - Failed to build.  Will not be installed in the new kernel" >&2
    exit 0
fi

cp acpi_call.ko /lib/modules/${inst_kern}/kernel/drivers/acpi/

and make it executable:

sudo chmod 755 /etc/kernel/postinst.d/acpi-call

fix suspend

the other annoying thing is that suspend is not working correctly.. luckily the same article as above provides a fix for that too: create a script that will disable the usb ports and re-enable the nvidia card prior to suspending the computer.. the nvidia card needs to be re-enabled because otherwhise it will become impossible to switch it off again after two resumes.. so create a new file

sudo nano /etc/pm/sleep.d/20_custom-asus-pro36jc

and enter this script:

#!/bin/sh

BUSES="0000:00:1a.0 0000:00:1d.0"

case "${1}" in
    hibernate|suspend)
        # Switch USB buses off
        for bus in $BUSES; do
            echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/unbind
        done
        # Switch nvidia card on before going to sleep, avoids the "constant on"
        # bug that occurs after 2 suspend/resume cycles (thanks kos888)
        echo '\_SB.PCI0.PEG1.GFX0._ON' > /proc/acpi/call
        ;;
    resume|thaw)
        # Switch USB buses back on and nvidia card off
        for bus in $BUSES; do
            echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/bind
        done
        echo '\_SB.PCI0.PEG1.GFX0._OFF' > /proc/acpi/call
        ;;
esac

NOTE right now it is not necessary to disable the USB 3.0 Port too because it is not working anyways.. but maybe in the future it might be necessary to add it to the busses too:

BUSES="0000:00:1a.0 0000:00:1d.0 0000:07:00.0"

now make the file executable:

sudo chmod 755 /etc/pm/sleep.d/20_custom-asus-pro36jc