Полноценный спящий режим в CrunchBangLinux

Меня всегда напрягал тот факт, что в CrunchBangLinux есть ждущий режим, но нет спящего. Как было удобно на ноутбуке: захлопнул крышку и убрал ноутбук, а потом просто взял его, открыл крышку и работаешь дальше с того же места.

После того, как я поменял свой рабочий ноутбук на “большой” компьютер, этой возможности у меня не стало.

Сегодня я хочу поделиться решением, которое исправно позволяет переводить компьютер в спящий режим и всегда выводить из него.

Теория

Если дело касается теории, то лучше, чем Wikipedia о ней рассказать не сможет никто:

Спящий режим (hibernate)
энергосберегающий режим операционной системы компьютера, позволяющий сохранять содержимое оперативной памяти на энергонезависимое устройство хранения данных (жесткий диск) перед выключением питания;
охренительно удобная штука.

Последнего предложения почему-то нет в Wiki.

У меня установлена операционная система CrunchBangLinux, которая специально не использует у меня swap. Оперативной памяти в 8 Гб позволяет мне полностью отказаться от swap.

А спящий режим устроен так, что ОЗУ при выключении записывает как раз в swap. Придется возвращать его обратно в ОС.

Почему-то в Linux-системах исторически сложилось, что swap размещается на отдельном разделе. Сейчас все умные дядьки говорят, что никакого выигрыша размещать swap на отдельном разделе нет. Только одни неудобства. Точнее одно неудобство – сложность в дальнейшем увеличения/уменьшения размера подкачки.

Но решение есть – swap в файл.

Если у Вас отдельный раздел под swap, а не файл, то всё что написано ниже Вам так же подойдет.

Активируем спящий режим в CrunchBangLinux

Создаем swap-файл

Если swap в каком-нибудь виде у Вас уже есть, то можно этот пункт пропустить.

  1. Создадим файл с именем /swap в корневом разделе:
    sudo dd if=/dev/zero of=/swap bs=1M count=8500

    Размер нужно указать не меньше размера ОЗУ. Я взял чуть больше.
  2. Определяем его права и создаем область подкачки:
    sudo chmod 600 /swap && sudo mkswap /swap
  3. Рассказываем нашей ОС о файле подкачки:
    sudo swapon /swap

    Для того чтобы не вводить эту команду каждый раз после загрузки ОС, добавляем команду на его подключение в /etc/fstab:
    echo "/swap swap swap defaults 0 0"| sudo tee -a /etc/fstab

Добавляем спящий режим

Устанавливаем нужные пакеты:

sudo apt-get install hibernate pm-utils

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

Обучаем Grub загружать сохраненный образ

Если у Вас отдельный раздел под файл подкачки, то нужно узнать его UUID командой:

sudo blkid

Если Вы используете отдельный файл, размещенный в корне, как я, то команда:

mount | grep " / "

Так как файл подкачки у Вас занимает не весь раздел, то нужно определить его первый блок:

sudo swap-offset /swap

Для отдельного раздела под swap этого делать не нужно.

Далее по тексту будет приводиться параметр наша_строка, которая будет везде одинакова:

  • если у Вас отдельный файл swap:
    resume=UUID=раздел resume_offset=первый_блок_файла_подкачки
  • если у Вас отдельный раздел под swap:
    resume=UUID=раздел

В моем случае эта строка выглядит так:

resume=UUID=f8fbb754-a30d-4545-a484-ccf0143b3020 resume_offset=6520832

Редактируем конфиг initramfs:

echo "наша_строка" | sudo tee /etc/initramfs-tools/conf.d/resume

Редактируем конфиг GRUB:

sudo nano /etc/default/grub

Где параметру GRUB_CMDLINE_LINUX_DEFAULT нужно добавить нашу строку.

У меня это выглядит так:

GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=UUID=f8fbb754-a30d-4545-a484-ccf0143b3020 resume_offset=6520832"

После этого генерируем новые GRUB и initramfs:

sudo update-grub & sudo update-initramfs -u

Теперь если мы выполняем:

sudo pm-hibernate

или

sudo hibernate --force

Мы успешно усыпляем систему. Параметр _ —force_ нужен если у Вас видеокарта от Nvidia.

Это действие можно забиндить на какую-нибудь кнопку и радоваться жизни.

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

Для этого будем использовать /etc/sudoers. В самом конце этого файла нужно добавить (именно в самом конце):

имя_пользователя ALL = NOPASSWD: /usr/sbin/pm-hibernate
имя_пользователя ALL = NOPASSWD: /usr/sbin/hibernate

Теперь выполняя эту команду Вам не придется набирать пароль пользователя, от которого Вы работаете.

Меняем действие кнопки Suspend в CrunchBangLinux на спящий режим

Но максимально комфортно этим пользоваться можно только тогда, когда это полностью интегрируется в систему, а именно после замены действия стандартной для CrunchBangLinux кнопки Suspend в меню Exit.

CrunchBangLinux использует графическое окружение OpenBox, у которого нет своего диалогового окна выхода из системы. OpenBox использует маленькую стороннюю утилутку – /usr/bin/cb-exit. Стоит заметить, что CrunchBangLinux++ использует команду с немного измененным именем – /usr/bin/cbpp-exit. В этом файле нам нужно всего-лишь заменить команду запуска на свою для кнопки Suspend. В разделе описания действия этой кнопки нужно привести вот к такому виду:

        def suspend_action(self,btn):
                self.disable_buttons()
                self.status.set_label("Suspending, please standby...")
                #os.system("cb-lock")
                os.system("sudo hibernate --force")
                #os.system("dbus-send --system --print-reply --dest=\"org.freed$
                gtk.main_quit()

То есть закомментировать 2 строчки и добавить одну. Всё просто.

После этого наша идеальная операционная система CrunchBangLinux станет еще идеальнее.

P.S. Очень полезную статью написал коллега по цеху – OpenVPN – обьединяем сети в Debian через TUN для тех системных администраторов, которые трудятся в компаниях, где несколько офисов географически разнесенных между собой. Проблема объединения таких офисов в единую информационную систему – это первоочередная задача системного администратора.

Комментарии:

Имя
e-mail
Сайт
Текст комментария: