Полноценный спящий режим в Ubuntu
Меня всегда напрягал тот факт, что в CrunchBangLinux есть ждущий режим, но нет спящего. Как было удобно на ноутбуке: захлопнул крышку и убрал ноутбук, а потом просто взял его, открыл крышку и работаешь дальше с того же места.
После того, как я поменял свой рабочий ноутбук на «большой» компьютер, этой возможности у меня не стало.
Сегодня я хочу поделиться решением, которое исправно позволяет переводить компьютер в спящий режим и всегда выводить из него.
Теория
Если дело касается теории, то лучше, чем Wikipedia о ней рассказать не сможет никто:
Спящий режим (hibernate) — энергосберегающий режим операционной системы компьютера, позволяющий сохранять содержимое оперативной памяти на энергонезависимое устройство хранения данных (жесткий диск) перед выключением питания.
У меня установлена операционная система CrunchBangLinux, которая специально не использует у меня swap. Оперативной памяти в 8 Гб позволяет мне полностью отказаться от swap.
А спящий режим устроен так, что ОЗУ при выключении записывает как раз в swap. Придется возвращать его обратно в ОС.
Почему-то в Linux-системах исторически сложилось, что swap размещается на отдельном разделе. Сейчас все умные дядьки говорят, что никакого выигрыша размещать swap на отдельном разделе нет. Только одни неудобства. Точнее одно неудобство – сложность в дальнейшем увеличения/уменьшения размера подкачки.
Но решение есть – swap в файл.
Если у Вас отдельный раздел под swap, а не файл, то всё что написано ниже Вам так же подойдет.
Активируем спящий режим в CrunchBangLinux
Создаем swap-файл
Если swap в каком-нибудь виде у Вас уже есть, то можно этот пункт пропустить.
Создадим файл с именем /swap в корневом разделе:
dd if=/dev/zero of=/swap bs=1M count=8500
Размер нужно указать не меньше размера ОЗУ. Я взял чуть больше.
Определяем его права и создаем область подкачки:
chmod 600 /swap
mkswap /swap
Рассказываем нашей ОС о файле подкачки:
swapon /swap
Для того чтобы не вводить эту команду каждый раз после загрузки ОС, добавляем команду на его подключение в /etc/fstab
:
echo "/swap swap swap defaults 0 0" | sudo tee -a /etc/fstab
Добавляем спящий режим
Устанавливаем нужные пакеты:
apt-get install hibernate pm-utils
По ходу установки запуститься псевдографический конфигуратор. Отвечаем на вопросы. Сложного там ничего нет.
Обучаем Grub загружать сохраненный образ
Если у Вас отдельный раздел под файл подкачки, то нужно узнать его UUID командой:
blkid
Если Вы используете отдельный файл, размещенный в корне, как я, то команда:
mount | grep " / "
Так как файл подкачки у Вас занимает не весь раздел, то нужно определить его первый блок:
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:
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:
update-grub
update-initramfs -ut
Теперь если мы выполняем:
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 станет еще идеальнее.
Теги: