2007-10-22

notebook acpi suspend to mem

в убунте перестал работать suspend, причем достаточно давно (видно его хорошенько обновили :))
соответственно решил разобраться что к чему, и как оно работает.

в общем-то, отправить ноут в спячку - шара :) достаточно сделать
echo mem -n > /sys/power/state

проблема даже не в этом, проблема в том что старое или примитивное железо (оба - мой случай :)) не в состоянии после пробуждения вернуться в начальное состояние (особенно видео)
соответственно это надо делать руцями - писать скрипт :)

собсно скрипт:

#!/bin/sh

# находим pciid видяхи
ID=`lspci | grep VGA | awk '{ print $1 }' | sed -e 's@0000:@@' -e 's@:@/@'`

# создаем временный файл для хранения состояния видео
TMP_FILE=`mktemp /var/tmp/video_state.XXXXXX`
trap 'rm -f $TMP_FILE' 0 1 15

# переключаемся на 1й vty - что б не было проблем с иксами :)
chvt 1

# сброс буферов дискового ио
sync

# сохраняем состояние видео
cat /proc/bus/pci/$ID > $TMP_FILE

# собственно переход в режим suspend
echo -n mem > /sys/power/state

# восстанавливаем видео
cat $TMP_FILE > /proc/bus/pci/$ID

# переключаемся в иксы
chvt 7

# удаляем временный файл
rm -f $TMP_FILE


вот собственно и все :)
и естественно оно работает (по крайней мере у меня :))

Немає коментарів: