Как стать автором
Обновить

Hibernate в Linux — сложно?

Приветствую тебя, хабраюзер! Как тебе, вероятно, известно, Hibernate/Suspend to RAM в Windows поддерживается, что называется, «искаропки». В Linux же с этим все обстоит несколько сложнее. Здесь это либо работает (привет, счастливые обладатели Ubuntu!), либо работает, но не так, как хотелось бы, либо система вообще не знает, что это такое. Мне, как не менее счастливому пользователю Gentoo, пришлось столкнуться с последним случаем. Но, как оказалось, не все так просто и ясно. Многочисленные маны и вики, разбросанные по Всемирной Паутине, к сожалению, не полны. И мне пришлось довольно долго побродить по Сети, чтобы получить то, что я изначально задумал. Обобщив всё найденное, дабы это не забыть, я и пишу сей пост.
Данное повествование призвано быть путеводителем для неискушенных пользователей по процессу «объяснения» системе, как ей входить в Hibernate/Suspend режимы.

Имеем:
  • Ноутбук (модель в данном случае значения не имеет)
  • Gentoo Linux с ядром 2.6.34
  • KDE 4.4.x

Требуется:
  • научить ноутбук «засыпать» и при этом ипользовать красивый графический интерфейс
  • научить KDE «усыплять» ноутбук стандартными средствами.
  • попутно настроить графический интерфейс загрузки/отключения системы (чтоб уж совсем красиво было)

Вступление



Ты, многоуважаемый, можешь резонно заметить, что в KDE эти самые стандартные средства есть в изобилии. Не могу не согласиться. Вот только в стандартной же комплектации эти самые средства либо не работают, либо… не буду повторяться.

При этом велосипедостроительством заниматься тоже не хотелось бы. Поэтому придется это «слепить» из того, что есть.

Для реализации задуманного нам понадобится, собственно, ядро. Я на данный момент пользуюсь версией 2.6.34. На ее примере и буду рассказывать. А поскольку хочу статью сделать полезной не только для Gentoo`шников, но и для всех, всех, всех, инструкции и ссылки: где, что, как достать для ручной сборки, так же будут представлены, где это необходимо. А чтобы не запутаться, они будут немного сдвинуты относительно остального текста.

Хочу сразу предупредить, что все нижеописанное каждый выполняет на свой страх и риск. Сломал что-то — сам виноват! Так что не помешает сделать бэкап.

1. Установка исходного кода и настройка ядра



Вместо стандартных gentoo-sources нам понадобится патченное ядро sys-kernel/tuxonice-sources. Ставим ядро:
# emerge sys-kernel/tuxonice-sources

  • Пользователям других дистрибутивов придется получить исходники ядра способом, специфичным для него, а так же, возможно, вручную наложить необходимые патчи. В общем случае нужно скачать актуальную версию ядра с официального сайта.

    Распаковываем архив (исходники ядра принято хранить в /usr/src):
    # tar -xzvpf linux-2.6.34.tar.gz -C /usr/src

    И для единообразия создаем симлинк:
    # ln -sf /usr/src/linux-2.6.34 /usr/src/linux

    Теперь нужно скачать патч TuxOnIce.

    Переходим в каталог с ядром:
    # cd /usr/src/linux

    Накладываем патч (я для определенности буду считать, что патч лежит в /usr/src):
    # bzcat /usr/src/tuxonice-3.1.1.1-for-2.6.34.patch.bz2 | patch -p1

    Ядро готово к конфигурированию.


Зависимостями вместе с ядром будет установлено еще несколько пакетов:
  • sys-apps/tuxonice-userui
  • sys-power/hibernate-script


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

Переходим в /usr/src/linux:

# cd /usr/src/linux

Запускаем конфигуратор ядра:

# make menuconfig

Настраиваем ядро:

General setup  --->
	[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
	(/usr/src/linux/usr/initramfs_data.cpio.gz) Initramfs source file(s) 
		Built-in initramfs compression mode (None)  --->

 Device Drivers --->
	Graphics support --->
		Console display driver support --->
			<*> Framebuffer Console support
			<*> Support for the framebuffer splash
			[  ]   Support for the Framebuffer Console Decorations
		[ ] Bootup logo  --->


Чтобы обзавестись еще и красивым оформлением консоли, можно включить Support for the Framebuffer Console Decorations

Power management and ACPI options  ---> 
	[*] Power Management support
	[*] Suspend to RAM and standby 
	[*] Hibernation (aka 'suspend to disk')
	(/dev/sda8) Default resume partition
	<*>   Enhanced Hibernation (TuxOnIce)  ---> 
		<*>   File Allocator
    		<*>   Swap Allocator
    		<*>   Compression support
    		<*>   Userspace User Interface support
    		[ ]   Allow Keep Image Mode
    		[*]   Replace swsusp by default
    		< >   Cluster support  --->
    		[*]   Checksum pageset2
    		(25)  Default waiting time for emergency boot messages
    		< >   Test pageflags
	CPU Frequency scaling  --->
		-*-   'performance' governor 
		<*>   'powersave' governor
		<*>   'userspace' governor for userspace frequency scaling
		<*>   'ondemand' cpufreq policy governor


Default resume partition — раздел по умолчанию, где ядро ожидает обнаружить образ системы. Это должен быть любой (если их несколько) swap-раздел жесткого диска достаточной емкости. То есть SWAP >= RAM.
CPU Frequency scaling — поддержка снижения частоты процессора для экономии батареи. Пригодится, поэтому тоже включаем.

Кроме того не помешает включить DMA для жесткого диска, если поддержка DMA еще не включена.

Device Drivers  --->
	DMA Engine support  --->
		[*] Support for DMA engines


А так же нам потребуется поддержа LZO/LZF алгоритмов сжатия, что значительно увеличит скорость засыпания и сэкономит место на жестком диске.

Cryptographic API  --->
	<*>   LZO compression algorithm
	<*>   LZF compression algorithm


Включить их надо обязательно монолитно. Иначе могут возникнуть проблемы с пробуждением.

Ядро сконфигурировано. Сохраняем настройки, компилируем и устанавливем ядро:

# make modules modules_install bzImage
# mount /boot/
# cp arch/x86/boot/bzImage /boot/kernel-tuxonice-2.6.34


2. Установка и настройка дополнительных утилит



Так же нам понадобятся слелующие пакеты:
  • sys-apps/tuxonice-userui
  • sys-power/hibernate-script
  • media-gfx/splashutils
  • sys-power/pm-utils
  • kde-base/powerdevil


PowerDevil нужен больше для удобства. Соответствующие кнопки будут работать и без него. Так что можно его не устанавливать.

# emerge sys-apps/tuxonice-userui sys-power/hibernate-script media-gfx/splashutils sys-power/pm-utils kde-base/powerdevil

Пользователям других дистрибутивов придется воспользоваться соответствующими пакетными менеджерами. Это я оставляю как домашнее задание.

2.1 Настройка splash


В каталоге /etc/splash находятся темы для splash-utils — та самая графика, которая будет отображаться при загрузке/выключении/засыпании/пробуждении. Вы можете установить дополнительные пакеты с темами, можете создать свою. Я же воспользуюсь одной из стандартных тем для Gentoo: natural_gentoo.

Я предпочитаю все редкоизменяемые вещи монолитно компилировать в ядро. Противники этого метода могут ознакомиться с мануалами по созданию initrd. Это выходит за рамки данного поста.

Создаем образ initramfs с нашей темой:

# splash_geninitramfs -v -g /usr/src/linux/usr/initramfs_data.cpio.gz -r 1280x800 natural_gentoo

Здесь 1280x800 разрешение экрана ноутбука. Доступные разрешения можно увидеть в папке с темой. Ну а natural_gentoo — название темы.

2.2 Настройка TuxOnIce


Здесь все сводится к созданию симлинка на нужную тему. Снова используем natural_gentoo:

# ln -sfn /etc/splash/natural_gentoo /etc/splash/tuxonice

2.3 Настройка pm-utils


По умолчанию для перехода в спящий/ждущий режим pm-utils использует собственный модуль, который у меня напрочь отказался работать. К тому же он не обеспечивает необходимого нам функционала. А именно — графики. Поэтому заставляем pm-utils работать через tuxonice. Для этого в /etc/pm/conf.d/gentoo (в вашем дистрибутиве имя файла может быть иным) следующую строчку:

SLEEP_MODULE="tuxonice"

Мой ноутбук подключен к Интернет через ADSL модем. Поэтому при пробуждении необходимо переподключаться. Чтобы автоматизировать этот процесс создаем скрипт /etc/pm/sleep.d/50-net.sh следующего содержания:

#!/bin/sh

. "${PM_FUNCTIONS}"

#Disconnect from Internet
net_down()
{
    stopservice "net.ppp0"
}

net_up()
{
    restartservice "net.ppp0"
}

case $1 in
    suspend|hibernate) net_down ;;
    resume|thaw) net_up ;;
esac


Не забываем сделать его исполняемым:

# chmod +x /etc/pm/sleep.d/50-net.sh

2.4 Настройка PowerDevil


Создайте удобные для вас профили PowerDevil. Конфигуратор можно найти тут:
Параметры системы → Дополнительно → Управление питанием

3. Настройка GRUB



После того, как все установлено и настроено, нужно сконфигурировать загрузчик, чтобы наконец увидеть красивую графику.

Если /boot/ у Вас находится на отдельном разделе, обычно он не монтируется при загрузке системы. Если вы не сделали этого раньше, то сейчас самое время:

# mount /boot/

Редактируем /boot/grub/grub.conf. Используйте для этого Ваш любимый текстовый редактор. Я же предпочитаю:

# vim /boot/grub/grub.conf

В результате должно получиться что-то такое:

default 0
timeout 30

title TuxOnIce-Kernel-2.6.34
root (hd0,0)
kernel /boot/kernel-tuxonice-2.6.34 root=/dev/sda3 resume=swap:/dev/sda8 splash=silent,fadein,theme:natural_gentoo video=vesa:1280x800-32@60,mtrr:3,ywrap quiet CONSOLE=/dev/tty1


Пробежимся по некоторым параметрам ядра:

root=/dev/sda3 путь к корневому разделу /

resume=swap:/dev/sda8 указывает на swap-раздел, на котором хранятся данные для восстановления состояния системы.

splash=silent,fadein,theme:natural_gentoo говорит ядру использовать при загрузке тему natural_gentoo

video=vesa:1280x800-32@60,mtrr:3,ywrap — а здесь мы указываем видеорежим, в котором будет отображаться графика и используемый драйвер (в данном случае vesa)

В последний раз напоминаю про бэкап!

4. Проверка результатов.



Ну вот. Наконец все установлено, настроено. Осталось только проверить, как оно будет работать.

Перезагружаемся…

Если все сделано верно, Вы увидите красивую (или не очень) заставку при загрузке системы, после которой сразу приглашение Вашего DM (KDM например).
При переключении в консоль (Alt + Ctrl + F1-F6) Ваше внима
В меню завершения работы KDE теперь доступны 2 новые кнопки: Спящий режим и Ждущий режим.
Пришло время проверить их работу. В частности нас интересует режим спящий, т. к. переход в него должен сопровождаться все той же (или другой) графической заставкой.

Если все заработало, а я уверен, что иначе и быть не может, поздравляю!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.