Установка и настройка pm-utils 
В результате применения этого пункта потребление должно снизиться до 8-9 Вт
- Установить необходимые программы: apmd, pm-utils и т.п.
$ sudo apt-get install apmd pm-utils hdparm libnotify-bin
- Создадим скрип управления энергопотреблением:
$ sudo gedit /usr/lib/pm-utils/power.d/99-savings.sh
В появившемся окне редактора копипастим следующий текст
######################################################################################
# Script to aggressively toggle power management between high
# performance and very low power usage.
# For more information on each of these options, see http://www.lesswatts.org
# Colyleft axa-ru.blogspot.com
################# Ghanges history ###################################################
#VERSION=0.12 # 31.08.2010 Testing Ubuntu 10.04. Small changes for Wi-Fi control
#VERSION=0.13 # 21.09.2010 Adding services control:
# evolution-alarm-notify,
# postfix,
# rsyslog
#VERSION=0.2 # 23.07.2011 Modified for Ubintu 11.04. Tested on Thinkpad x220 4290rw1
#VERSION=0.23 # 27.07.2011 Added store value (Brightness, user, etc ) to /tmp/powersave.ini
# Fix notify-send message
VERSION=0.23.1 # 07.01.2012 Fix ethtool parameters in aLan procedure
#
# To install:
#
# sudo apt-get install apmd pm-utils expect hdparm libnotify-bin
#
# Save this file to /usr/lib/pm-utils/power.d/99-savings.sh
# cd /usr/lib/pm-utils/power.d
# sudo install 99-savings.sh /etc/pm/sleep.d
# sudo install 99-savings.sh /etc/pm/power.d
#
INI=/tmp/powersave.ini
aUsb()
{
#################################################
## USB Subsystem
##
# 0.7-0.8 W
case "$1" in
false) #ac_power
for i in /sys/bus/usb/devices/*/power/control
do
echo "on" > $i
done
;;
true) #batt_power
for i in /sys/bus/usb/devices/*/power/control
do
echo "auto" > $i
done
for i in /sys/bus/usb/devices/*/power/autosuspend
do
echo 1 > $i
done
echo 1 > /sys/module/usbcore/parameters/autosuspend
;;
esac
}
aSata()
{
case "$1" in
false) #ac_power
# Set the SATA to max performance
for i in /sys/class/scsi_host/host*/link_power_management_policy
do
echo max_performance > $i
done
;;
true) #batt_power
# Set SATA to minimum power
# 0.7 W
for i in /sys/class/scsi_host/host*/link_power_management_policy
do
echo min_power > $i
done
;;
esac
}
aPci()
{
case "$1" in
false) #ac_power
for i in /sys/bus/pci/devices/*/power/control
do
echo on > $i
done
;;
true) #batt_power
for i in /sys/bus/pci/devices/*/power/control
do
echo auto > $i
done
;;
esac
}
aI2c()
{
case "$1" in
false) #ac_power
for i in /sys/bus/i2c/devices/i2c-*/power/control
do
echo on > $i
done
;;
true) #batt_power
for i in /sys/bus/i2c/devices/i2c-*/power/control
do
echo auto > $i
done
;;
esac
}
aHdd()
{
case "$1" in
false) #ac_power
# Set the drive to mostly stay awake. Some may want to change -B 200
# to -B 255 to avoid accumulating Load_Cycle_Counts
# -S 240 => put in standby after 20 minutes idle
# -B 200 => do not permit spin down
# -M => not supported by my drive
hdparm -B 200 -S 240 -M 254 /dev/sda
# Remount ext3/4 file systems so the journal commit only happens every 60
# seconds. By default this is 5 but, I prefer to reduce the disk
# activity a bit.
mount -o remount,commit=60,atime /
;;
true) #batt_power
hdparm -B 1 -S 4 -M 128 /dev/sda
mount -o remount,noatime,commit=600 /
;;
esac
}
aSsd()
{
# add these commands in the /etc/rc.local
# echo deadline > /sys/block/sda/queue/scheduler
# echo 1 > /sys/block/sda/queue/iosched/fifo_batch
# sysctl -w vm.swappiness=1 # Strongly discourage swapping
# sysctl -w vm.vfs_cache_pressure=50 # Don't shrink the inode cache aggressively
case "$1" in
false) #ac_power
;;
true) #batt_power
;;
esac
}
aI915()
{
case "$1" in
false) #ac_power
echo 0 > /sys/module/i915/parameters/powersave
;;
true) #batt_power
echo 1 > /sys/module/i915/parameters/powersave
;;
esac
}
aWlan()
{
# WiFi power savings.
case "$1" in
false) #ac_power
/sbin/iwconfig wlan0 power off txpower 14
;;
true) #batt_power
/sbin/iwconfig wlan0 power on txpower 4
;;
esac
}
aLan()
{
case "$1" in
false) #ac_power
# set the ethernet max speed.
ethtool -s eth0 speed 1000 duplex full autoneg on wol d
;;
true) #batt_power
# set the ethernet power savings.
# ~ 0.4 W
ethtool -s eth0 speed 10 duplex half autoneg off wol d
;;
esac
}
aCpu()
{
#################################################
## CPU
##
case "$1" in
false) #ac_power
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
do
echo performance > $i
done
# Enable All Core CPU
for i in /sys/devices/system/cpu/cpu*/online
do
echo 1 > $i
done
# Shedule Multitreading
echo 0 > /sys/devices/system/cpu/sched_mc_power_savings
;;
true) #batt_power
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
do
echo powersave > $i
done
# Disable cores not affected for power saving
# for i in /sys/devices/system/cpu/cpu*/online
# do
# echo 0 > $i
# done
echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
;;
esac
}
aSnd()
{
case "$1" in
false) #ac_power
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
;;
true) #batt_power
# Turn off sound card power savings
# < 0.1 W
echo 10 > /sys/module/snd_hda_intel/parameters/power_save
;;
esac
}
aBt()
{
case "$1" in
false) #ac_power
# Enable the bluetooth driver
rfkill unblock bluetooth
;;
true) #batt_power
# Remove the bluetooth driver
# 0.3-0.4 W
rfkill block bluetooth
;;
esac
}
aDaemons()
{
#################################################
## demons, services
##
case "$1" in
false) #ac_power
# 1. Evolution alarm and integrations
/usr/lib/evolution/2.32/evolution-alarm-notify &
#/usr/lib/evolution/e-calendar-factory &
#/usr/lib/evolution/e-addressbook-factory &
# 2. Starting Sendmail server
#postfix start
# 3. Starting CouchDB & desktopcouch
dbus-send --session --dest=org.desktopcouch.CouchDB --print-reply --type=method_call / org.desktopcouch.CouchDB.getPort
;;
true) #batt_power
# 1. Evolution alarm
killall evolution-alarm-notify
#killall e-calendar-factory
#killall e-addressbook-factory
# 2. Stopping Sendmail server
#postfix stop
# 3. Stoping CouchDB & desktopcouch
killall beam.smp
killall desktopcouch-service
;;
esac
}
# < 0.1 W
aWebcam()
{
case "$1" in
false) #ac_power
# Enable the webcam driver
modprobe uvcvideo
;;
true) #batt_power
# Remove the webcam driver
modprobe -r uvcvideo
;;
esac
}
aMemory()
{
case "$1" in
false) #ac_power
# Set kernel dirty page value back to default
echo 10 > /proc/sys/vm/dirty_ratio
echo 5 > /proc/sys/vm/dirty_background_ratio
# Only wakeup every 60 seconds to see if we need to write dirty pages
# By default this is every 5 seconds but, I prefer 60 to reduce disk
# activity.
echo 6000 > /proc/sys/vm/dirty_writeback_centisecs
;;
true) #batt_power
# Reduce disk activity by waiting up to 10 minutes before doing writes
echo 90 > /proc/sys/vm/dirty_ratio
echo 1 > /proc/sys/vm/dirty_background_ratio
echo 60000 > /proc/sys/vm/dirty_writeback_centisecs
;;
esac
}
aBrightness()
{
case "$1" in
false) #ac_power
# Setup maximum brigthness
# Thinkpad x220, Ubuntu 11.04
vBAT_BRI=$(cat /sys/devices/virtual/backlight/acpi_video0/brightness)
echo $vAC_BRI > /sys/devices/virtual/backlight/acpi_video0/brightness
;;
true) #batt_power
# Setup brigthness 30%
vAC_BRI=$(cat /sys/devices/virtual/backlight/acpi_video0/brightness)
echo $vBAT_BRI > /sys/devices/virtual/backlight/acpi_video0/brightness
;;
esac
}
aMisk()
{
case "$1" in
false) #ac_power
# Turn off the laptop mode disk optimization
echo 0 > /proc/sys/vm/laptop_mode
echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource
# enable logging
service rsyslog start
# ZiXEL nbg460n. Set maximum wifi speed
if [ -f /etc/pm/802.11.bgn ]; then /etc/pm/802.11.bgn 1; fi
# enable winbindd
if [ -f /etc/init.d/winbind ]; then /etc/init.d/winbind start; fi
# Powersave pci express
echo performance > /sys/module/pcie_aspm/parameters/policy
;;
true) #batt_power
# Set laptop disk write mode
echo 5 > /proc/sys/vm/laptop_mode
echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource
# disable logging
service rsyslog stop
# ZiXEL nbg460n. Set standard wifi speed
if [ -f /etc/pm/802.11.bgn ]; then /etc/pm/802.11.bgn 0; fi
# disable winbind
if [ -f /etc/init.d/winbind ]; then /etc/init.d/winbind stop ; fi
echo powersave > /sys/module/pcie_aspm/parameters/policy
;;
esac
}
aNotify()
{
case "$1" in
false) #ac_power
MSGH="AC"
MSGT="Maximum Performance Mode"
MSGI="ac-adapter"
;;
true) #battery_power
MSGH="BATT"
MSGT="Battery Power Saving"
MSGI="battery"
;;
esac
vUSER=`ps -C gnome-session -o user=` #find UID user who start gnome-session
vPIDS=`pgrep -u $vUSER gnome-session` #find PID
for PID in $vPIDS; do
vDBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ \
| sed -e 's/DBUS_SESSION_BUS_ADDRESS=//')
DBUS_SESSION_BUS_ADDRESS=$vDBUS_SESSION_BUS_ADDRESS DISPLAY=:0.0 sudo -u $vUSER notify-send "$MSGH" "$MSGT" -i "$MSGI"
done
}
aLoadini()
{
if [ -e $INI ];
then
echo "Restore Value"
while read LINE
do
PARM=$(echo "$LINE" | awk '{print $1}')
KEY=$(echo "$LINE" | awk '{print $2}')
case $PARM in
"AC_BRI")
vAC_BRI=$KEY
;;
"BAT_BRI")
vBAT_BRI=$KEY
;;
"USER")
vUSER=$KEY
;;
"PIDS")
vPIDS=$KEY
;;
"DBUS_SESSION_BUS_ADDRESS")
vDBUS_SESSION_BUS_ADDRESS=$KEY
;;
esac
echo "$PARM $KEY"
done < $INI
else
echo "Reset Value"
vAC_BRI=15
vBAT_BRI=8
vUSER=""
vPIDS=""
vDBUS_SESSION_BUS_ADDRESS=""
fi
}
aSaveini()
{
echo "AC_BRI $vAC_BRI" > $INI
echo "BAT_BRI $vBAT_BRI" >> $INI
echo "USER $vUSER" >> $INI
echo "PIDS $vPIDS" >> $INI
echo "DBUS_SESSION_BUS_ADDRESS $vDBUS_SESSION_BUS_ADDRESS" >> $INI
}
##########################################################
## Apply settings
##
aLoadini
aCpu $1
aUsb $1
aI2c $1
aSata $1
aPci $1
if [ $(hdparm -i /dev/sda | grep Model | awk '{print substr($2,1,3)}') = "SSD" ];
then
aSsd $1
else
aHdd $1
fi
aI915 $1
aWlan $1
aLan $1
aSnd $1
aBt $1
aWebcam $1
aMemory $1
aDaemons $1
aBrightness $1
aMisk $1
aNotify $1
aSaveini
- Подключаем скрипт к событиям power и sleep
$ cd /usr/lib/pm-utils/power.d
$ sudo chmod 755 99-savings.sh
$ sudo install 99-savings.sh /etc/pm/sleep.d
$ sudo install 99-savings.sh /etc/pm/power.d
Вытаскиваем провод источника питания и наблюдаем pop up сообщение, что компьютер перешел в режим сохранения энергии
Вставяем провод источника питания и наблюдаем pop up сообщение, что компьютер перешел в режим максимального быстродействия.
Устанавливаем параметры загрузки Ubuntu 
В результате применения этого пункта потребление должно снизиться до 7 Вт
В терминале с помощью редактора gedit
sudo gedit /etc/default/grub
Заменяем строку
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"на
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.i915_enable_rc6=1 i915.lvds_downclock=1 i915_enable_fbc=1 reboot=pci"Перезагружаемся и проверяем, что у нас энергопотребление упало еще примерно на 1 Вт.
Компиляция и установка форка ядра 3.1.6-pf 
В результате применения этого пункта потребление должно снизиться до 6 Вт

Минусы: у меня увеличилось время загрузки и выключения системы.
- Устанавливаем пакеты, необходимые для компиляции ядра
$ sudo apt-get -y install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge \
git-core libncurses5 libncurses5-dev libelf-dev libdw-dev binutils-dev kernel-package
$ sudo apt-get build-dep kernel-package linux-meta
cd ~
mkdir kernel-pf
cd kernel-pf
- Загрузим и разархивируем исходники ядра и патча форка.
$ wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.1.tar.bz2
$ tar xjvf linux-3.1.tar.bz2
$ wget http://pf.natalenko.name/sources/3.1/patch-3.1.6-pf.bz2
$ bzip2 -d patch-3.1.6-pf.bz2
- Применим патч и сконфигурируем Makefile.
$ cd linux-3.1
$ patch -p1 < ../patch-3.1.6-pf
$ cp /boot/config-`uname -r` .config
$ make oldconfig
Здесь будут заданы вопросы касающиеся применения новых функций и модулей.
Я на все вопросы оставил ответы по умолчанию (нажал <Enter>), кроме:
BFQ I/O scheduler (IOSCHED_BFQ) [N/m/y/?] (NEW) Y
BFQ hierarchical scheduling support (CGROUP_BFQIO) [N/y/?] (NEW) Y
Timer frequency
1. 100 HZ (HZ_100)
2. 250 HZ (HZ_250_NODEFAULT) (NEW)
3. 300 HZ (HZ_300)
> 4. 1000 HZ (HZ_1000)
5. 1500 HZ (HZ_1500) (NEW)
6. 2000 HZ (HZ_2000) (NEW)
7. 3000 HZ (HZ_3000) (NEW)
8. 4000 HZ (HZ_4000) (NEW)
9. 5000 HZ (HZ_5000) (NEW)
10. 7500 HZ (HZ_7500) (NEW)
11. 10000 HZ (HZ_10000) (NEW)
choice[1-11?]: 1
$ make-kpkg clean
$ CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd kernel_image kernel_headers
$ cd ..
$ sudo dpkg -i linux-*.deb
Тьюнинг SSD- Оптимизировать планировщики, swap, кэш hdd.
Открыть rc.local на редактирование
sudo gedit /etc/rc.local и добавить следующие команды:
echo deadline > /sys/block/sda/queue/scheduler
echo 1 > /sys/block/sda/queue/iosched/fifo_batch
sysctl -w vm.swappiness=1 # Strongly discourage swapping
sysctl -w vm.vfs_cache_pressure=50 # Don't shrink the inode cache aggressively
hdparm -W1 /dev/sda
- Отключить журналирование (показано на примере моей системы).

Возможно при этом будет отключена функция TRIM, введенная для более равномерного использования блоков SSD (
http://tokarchuk.ru/2011/01/enable-trim-support-in-ubuntu/).
Для отключения журналирования необходимо определить UUD раздела на котором установлена Ububtu:
$ sudo blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="E624915324912797" TYPE="ntfs"
/dev/sda2: LABEL="Windows7_OS" UUID="EAAE9549AE950F67" TYPE="ntfs"
/dev/sda3: LABEL="Lenovo_Recovery" UUID="E26C97CB6C97993D" TYPE="ntfs"
/dev/sda5: UUID="0C58-1DC4" TYPE="vfat"
/dev/sda6: UUID="24a89b42-96a6-415f-a23f-e13bdf770c45" TYPE="ext4"
/dev/sda7: UUID="925c3ca9-c234-4ad7-814d-2c2522542e48" TYPE="swap"
В моем случае Ubuntu установлена на /dev/sda6. Затем загузиться с live cd (инсталляционного диска) или другого раздела. Запустить терминал и дать команду:
tune2fs -O ^has_journal UUID="24a89b42-96a6-415f-a23f-e13bdf770c45"
В результате применения описанных действий вы должны получить вот такой результат.

Крайняя версия этой статьи и скриптов находятся в моем блоге
http://axa-ru.blogspot.com/2012/01/thinkpad-x220-powersaving.html