Энергосбережение
Материал из Gentoo Linux Wiki
- Вернуться в раздел железо
Во время настройки ноутбука мне потребовалось решить следующие задачи:
* При отключение от электросети ноутбук должен потреблять меньше энергии, при подключение обратно должен работать с наибольшей производительностью. * При малом заряде аккумулятора ноутбук должен выключиться правильным образом. * При закрытие крышки экран должен отключиться и запереться.
Пробовал kpowersave, powersave, но в итоге решил использовать средства acpid. Для решения вышеперечисленных задач достаточно поставить несколько пакетов и подправить /etc/acpi/default.sh:
| Файл: /etc/acpi/default.sh |
#!/bin/sh
# /etc/acpi/default.sh
# ACPI script v1.2 for laptops, author Nikoli nikoli@jabber.org nikoli.selfip.org
# Before using: install sys-power/acpid sys-power/hibernate-script sys-power/acpitool x11-apps/xset x11-misc/slock and run
# /etc/init.d/acpid start;rc-update add acpid default
set $*
group=${1%%/*}
action=${1#*/}
device=$2
id=$3
value=$4
log_unhandled() {
logger "ACPI event unhandled: $*"
}
rlock() {
if ps -C X>/dev/null;then
# su $(ps -C xinit -o user=) -c "DISPLAY=":0" XAUTHORITY=$(ps -C X -o args=|awk '{print $7}') /usr/bin/slock &" # without DM
/usr/kde/3.5/bin/dcop --all-users --all-sessions kdesktop KScreensaverIface lock # KDM
else
exit 1
fi
}
case "$group" in
button)
case "$action" in
power)
rlock
rmmod -f acpi-cpufreq;/usr/sbin/hibernate -f;modprobe acpi-cpufreq
;;
lid)
if grep -qv open /proc/acpi/button/lid/LID/state;then
sleep 1 && DISPLAY=":0" XAUTHORITY=$(ps -C X -o args=|awk '{print $7}') /usr/bin/xset -display :0.0 dpms force off && rlock
fi
;;
*) log_unhandled $* ;;
esac
;;
ac_adapter)
case "$value" in
# Add code here to handle when the system is unplugged
# (maybe change cpu scaling to powersave mode). For
# multicore systems, make sure you set powersave mode
# for each core!
*0)
echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
for i in /sys/class/scsi_host/host*/link_power_management_policy; do echo min_power > $i; done
hdparm -B 128 -S 12 /dev/sda
echo 5 > /proc/sys/vm/laptop_mode
echo 40 > /proc/sys/vm/dirty_ratio
echo 10 > /proc/sys/vm/dirty_background_ratio
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
;;
# Add code here to handle when the system is plugged in
# (maybe change cpu scaling to performance mode). For
# multicore systems, make sure you set performance mode
# for each core!
*1)
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 0 > /sys/devices/system/cpu/sched_mc_power_savings
for i in /sys/class/scsi_host/host*/link_power_management_policy; do echo max_performance > $i; done
hdparm -B 255 -S 240 /dev/sda
echo 0 > /proc/sys/vm/laptop_mode
echo 10 > /proc/sys/vm/dirty_ratio
echo 5 > /proc/sys/vm/dirty_background_ratio
echo 500 > /proc/sys/vm/dirty_writeback_centisecs
;;
*) log_unhandled $* ;;
esac
;;
battery)
if (( "$(/usr/bin/acpitool -b| awk '{ print $5}'|awk -F'.' '{ print $1}')" < "2" ));then
/sbin/init 0
fi
;;
*) log_unhandled $* ;;
esac
|
Для запуска иксов использую startx, но с *dm тоже должно работать после некоторых правок.
Советую воспользоваться sys-power/powertop для выяснения главных потребителей энергии. Для наблюдения за состоянием батарей удобен sys-power/acpitool, повесил на горячие клавиши такой скрипт:
| Файл: batStat.sh |
#!/bin/bash
# batStat.sh
osd_cat -P $(/usr/bin/acpitool -b| awk '{ print $5}') -T "$(acpitool -b)" -p middle -A center -b percentage -o 50 -c orange
|
osd_cat входит в x11-libs/xosd
Для более тихой и продолжительном работы ноутбуку полезно сократить общение с жёстким диском, в этом поможет добавление в /etc/sysctl.conf:
| Файл: /etc/sysctl.conf |
vm.swappiness = 10 |
