Перевод очередной статьи с сайта en.opensuse.org. На этот раз вот этой.

S2ram - способ заставить suspend-to-RAM работать “из коробки”.

Цель S2ram состоит в том, чтобы добиться работы suspend-to-RAM работать “из коробки” на как можно большем количестве машин.

Важно.

Пакет называется suspend или uswsusp и устанавливается по-умолчанию во многих дисрибутивах.

Если ваша версия S2ram не содержит всех опций, которые описываются в этой статье, попробуйте получить более свежую версию, например здесь .

Опции -m и -v были добавлены довольно недавно.

А на заднем плане…

suspend-to-RAM уже работает на многих машинах. Это означает, что компьютер “просыпается” и продолжает работу, клавиатура работает, есть доступ к жесткого диску, но зачастую не работает видео и лампа подсветки монитора. Есть некоторые параметры для этого:

  • передача ядру параметра _acpisleep=s3 bios_
  • передача ядру параметра _acpi_sleep=s3mode
  • передача ядру обоих вышеупомянутых параметра (_acpi_sleep=s3bios и _s3mode)
  • регистрация видеокарты из пространства пользователя после побуждения, используя vbetool
  • получение номера видеорежима до засыпания и установка такого же режима после пробуждения, используя vbetool
  • сохранение статуса VBE перед засыпанием и восстановление его после пробуждения, используя vbetool
  • сохранение пространства PCI config карты VGA перед засыпанием и восстановление его после пробуждения

Начиная с ядра 2.6.16, параметр acpi_sleep может быть установлен во время работы машины (в перезагрузке нет необходимости) в _/proc/sys/kernel/acpi_videoflags. Варианты: “1″ для s3_bios, “2″ для s3_mode, “3″ для обеих сразу. Больше информации об этом “хаке” можно найти в исходниках ядра (обычно устанавливаются в /usr/src/linux) в файле Documentation/power/video.txt.

Есть некоторые машин, которые не просыпаются, используя консольный framebuffer. Недавние модели Dell и HP, например, очень часто попадают в их число. Вы можете выключить framebuffer, установив в файле конфигурации загрузчика - “vga=0″. Конфигурация grub обычно находится в /boot/grub/menu.lst.

**Если ни один из способов, описанных здесь, не работает должным образом, обязательно проверьте, действительно ли машина не просыпается или только видео не работает так, как надо. **Хороший способ проверить это состоит в том, чтобы запустить систему в минимальной конфигурации (init=/bin/bash), запустить s2ram -f, и после пробуждения, когда дисплей еще выключен, проверить, работает ли все еще клавиша “Caps Lock” (вы должны увидеть загорание индикатора Caps Lock на клавиатуре). Если так и есть, то скорее всего проблема действительно в инициализации видео. Если же нет, то это вероятно проблема BIOS или ошибка в ядре Linux.

Почему S2ram?

  • использовать vbetool для сохранения состоянияVBE нелегко: вы должны сохранить дамп состояния карты во временный файл до засыпания и восстановить его оттуда после пробуждения. Конечно, это можно записать в скрипт оболочки, но иметь его в одном бинарном файле гораздо проще.
  • вам необходимо знать, какой режим нужен машине и нужен ли вообще. S2ram содержит баду данных известных рабочих машин и режимов, которые этим машинам необходимы. Поэтом, если ваша машина поддерживается, она засыпает так же легко, как вы пишете “s2ram”.

Ок, достаточно! Давайте начнем!

Где я могу получить это?

s2ram - часть проекта suspend на sourceforge и пакет для Suse 10.1 также доступен.

Как это использовать?

Установите пакет и потом наберите в консоли s2ram. Если ваша машина есть в whitelist, должен сработать suspend-to-RAM. Будьте осторожны, некоторые поврежденные драйвера необходимо выгрузить до засыпания и загрузить после пробуждения. Если вы просто хотите узнать, известна ли ваша машина и какие режимы она поддерживает (если поддерживает), наберите команду s2ram -n.

S2ram также входит в последнюю сборку powersaved: если пакет suspend установлен, powersaved до своего старта проверит (используя s2ram -n) машину на возможность работы suspend-to-RAM, и в зависимости от результатов проверки включит или выключит “suspend button”.

Моей машины нет в whitelist? Что мне делать?

Просто узнайте какой режим необходим вашей машине (если необходим), затем отправьте эту информацию у нам вместе с выводом команды s2ram -i.

Режимы работы могут быть включены из командной строки s2ram:

    seife@susi:~> s2ram -h
    Usage: s2ram [-nhi] [-fspmrav]

    Options:

    -h, –help: this text.
    -n, –test: test if the machine is in the database.
    returns 0 if known and supported

    -i, –identify: prints a string that identifies the machine.
    -f, –force: force suspending, even on unknown machines.

    the following options are only available with –force:

    -s, –vbe_save: save VBE state before suspending and restore after resume.
    -p, –vbe_post: VBE POST the graphics card after resume
    -m, –vbe_mode: get VBE mode before suspend and set it after resume
    -r, –radeontool: turn off the backlight on radeons before suspending.
    -a, –acpi_sleep: set the acpi_sleep parameter before suspend 1=s3_bios, 2=s3_mode, 3=both

    -v, –pci_save: save the PCI config space for the VGA card.

Опции, в большинстве случаев, понятны сами по себе. Отметьте, что вы должны использовать опцию -f на всех неизвестных машинах, затем добавить надлежащие режимы работы. Опция -n нуждается в дополнительном числовом аргументе - от 1 до 3 - определяя, таким образом, режимы s3_bios, s3_mode или и то, и другое.

Лучший способ начать изучение неизвестной машины состоит в том, чтобы загрузить ее, набрав init=/bin/bash в приглашении загрузчика, в минимальном окружении, а затем сделать следующее:

    # mount /proc
    # mount /sys
    # s2ram -f

Если первая попытка увенчалась успехом, значит все отлично. Отправьте нам вывод команды s2ram -i (смотрите как связаться с разработчиками s2ram? далее в этой статье). Если же это не удалось, попробуйте следующие варианты:

  • s2ram -f -a 1
  • s2ram -f -a 2
  • s2ram -f -a 3
  • s2ram -f -p -m
  • s2ram -f -p -s
  • s2ram -f -m
  • s2ram -f -s
  • s2ram -f -p
  • s2ram -f -a 1 -m
  • s2ram -f -a 1 -s

Если ни одна из этих комбинаций не сработала, попробуйте добавить ключ “-v”.

Заметка: смешивание опций “-a” с опциями vbetool (”-p”, “-m”, “-s”) - это крайняя мера, обычно она не имеет большого смысла.

Мы надеемся, что один из вариантов вернул вашу машину к жизни (и подсветка включилась). Если вы нашли комбинацию, которая работает, отправьте нам эту информацию вместе с выводом s2ram -i. Если вы нашли несколько комбинаций, которые работают, например, “s2ram -f -a 3″ и “s2ram -f -p -m”, предпочтительней использовать метод в ядре “-a”, чем в пространстве пользователя (”-p”, “-m”, “-s”).

Если вы нашли комбинацию, которая работает, пожалуйста, проверьте работает ли это в обеих перечисленных ниже случаях, прежде чем сообщать об успехе разрабатчикам:

  • когда запускается s2ram в консольном режиме
  • когда запускается s2ram непосредственно в Иксах

Нормально, когда содержимое текстовой консоли исчезает после использования “-p” и “-m”, при использовании фреймбуфера это можно легко решить переходом на другую консоль. Хотя мог бы быть лучший результат при использовании опции “-s”, все же предпочтительней использовать “-m” в первую очередь, если это работает.

Отметьте, что вы действительно должны попробовать проделать все это, находят в минимальном окружении текстовой консоли . Сообщения, что это там работает, намного более полезны, чем сделанные только в Иксах. При этом вы также не получите такие побочные эффекты, как сообщения об остановке сразу после пробуждения от демонов управления питанием.

Все прекрасно работает, но подсветка моей машины работает в течение засыпания

Если на вашей машине установлена графическая карта Radeon, попробуйте добавить ключ “-r” к вашей комбинации. Известно, что это помогает ThinkPad 30-й серии (T30, X31, R32…). Если карта Radeon у вас отсутсвует, то данный ключ не имеет смысла использовать.

Моя машина в whitelist, но не работает. Что можно сделать?

В whitelist есть несколько обобщенных разделов, и возможно, что какой-то из них может соответствовать машинам, которые отличаются от проверенных. Сделайте то же самое, что описано в разделе “Моей машины нет в whitelist? Что мне делать?“, узнайте, какие варианты подходят вашей машине и отправьте нам информацию об этом вместе с выводом s2ram -i. Таким образом, мы, соответственно, сможем обновить whitelist.

Как связаться с разработчиками s2ram?

Отправьте письмо в список рассылки suspend-devel на suspend- devel@list.sourceforge.net. Если все это не работает по каким-то причинам, мы можете отправить письмо непосредственно мне, seife @ suse.de. Но список рассылки обычно отличается более быстрой скоростью ответа и большим количеством хорошо осведомленных людей.

Как проверить, ничего не устанавливая

Sitsofe Wheeler выяснил, что много машин можно проверить, не устанавливая ничего, просто используя OpenSUSE 10.2 Live DVD.

Свежие пакеты для различных дистрибутивов

SUSE/OpenSUSE

Свежие пакеты могут быть найдены в проекте Stefan Seyfried’s Buildservice на http://software.opensuse.org/download/home:/seife или непосредственно на OpenSUSE Factory. Пакет называется “suspend”. Для последних пакетов вам возможно придется установить пакет libx86, который находится в том же самом месте.

Debian

Tim Dijkstra поддерживает пакет в Дебиан (называется uswsusp). Он находится на http://packages.debian.org/unstable/admin/uswsusp.

Другие

Если вы знаете об обновленных пакетах для других дистрибутивов, пожалуйста, обновите эту статью или сообщите мне в список рассылки suspend-deve, чтобы мог обновить это.

Интеграция в другие проекты

openSUSE 10.2 / pm-utils

openSUSE 10.2 будет использовать окружение pm-utils, поэтому варианты конфигураций, описанные здесь, могут использоваться в опциях s2ram.

Powersave

s2ram входит в последнюю версию powersaved, имеются некоторые варинты конфигураци, которые позволяют выбрать вам режим работы, если ваша машина не входит в whitelist. Они описаны здесь.

SUSE 10.1

SUSE 10.1 использует powersaved, поэтому варианты конфигураций, описанные здесь, могут использоваться для определения режима работы.

Полезные штуки

Это только tips & tricks, которые я узнал, пытаясь заставить машины засыпать. Используйте их с осторожностью.

Intel Graphics Chipsets

Машины с Intel Graphics Chipsets часто работают с “_s2ram -f -a 3_“, используя фреймбуфер vesafb. Если “_s2ram -f -a 3_” не работает, часто работает хорошо “s2ram -f -p -m”.

Более новые драйвера Intel похоже имеют проблемы с “_-s_” (VBESAVE), таким образом, если это вообще возможно, надо использовать “-m_” (VBE_MODE). Смотрите https://bugzilla.novell.com/show_bug.cgi?id=229603. Вообще говоря, VBE_MODE предпочтительней, чем VBE_SAVE.

ATI Graphics Chipsets

В последнее время множество машин с ATI Graphics Chipsets, с которыми я столкнулся, вообще не работают с каким-либо фреймбуфером (часто они висели в BIOS, даже Caps Lock не работал). Часто они прекрасно работали с “_vga=0_” и “_s2ram -f -p -m_” или “_s2ram -f -p -s_“.

При проблемах с пробуждением s2ram у драйвера fglrx-driver-8.32.xx, обновите его до 8.34.хх.

NVidia Graphics Chipsets

После нескольких специфичных действий машина с картой NVidia заработала с “s2ram -f”. Смотрите подробную инструкцию здесь: NVidia Suspend Howto.

Проблемы APIC

Я видел много машин в последнее время, которые нуждались в выключении APIC в командной строке ядра с “noapic”, иначе они не просыпаются или начинаются вести себя странно после пробуждения (timer interrupts no longer working etc.) В этом нет необходимости с недавними ядрами, openSUSE 10.2 в этом уже не нуждается.

Машина сразу отключается после пробуждения

s2ram - первичный “низкоуровневый” системный инструмент. Чтобы использовать это в “реальном производстве”, вы должны включить это в вашу установку управления питанием, например, в ваш скрипт acpid (они могут вызвать suspend нажатием на кнопку, например). Если у вас дистрибутив, использующий powersave, пожалуйста, прочитайте Powersave_s2ram.

Это должно быть исправлено, по крайней мере с ядра 2.6.20, таким образом в режимах работы больше не будет необходимости.

Не бросайте!

Иногда, чтобы добиться работы suspend to RAM, приходится приложить много усилий. Если вы хотите почитать примеры того, что пришлось пройти людям, посмотрите здесь: the following report from Bugzilla. Winfried - мой герой! :) Также весьма важно знать, виснет ли машина после пробуждения целиком или только дисплей не работает. Смотрите статью, чтобы узнать, как это сделать.