Поиск по сайту:

Как перевести Linux в спящий или спящий режим из командной строки


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

Гибернация и сон в Linux

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

Когда дело доходит до перевода экземпляра Linux в спящий режим с помощью командной строки, возникает одна проблема: вам потребуется пространство подкачки, достаточно большое для инкапсуляции всего объема ОЗУ, и, возможно, дополнительное пространство для нормального одновременного использования подкачки приложениями. Таким образом, если в вашей системе 8 ГБ оперативной памяти, вы можете выделить 16-20 ГБ пространства подкачки, чтобы обеспечить достаточное количество. Если вы хотите узнать, как это сделать, ознакомьтесь с нашим руководством «Как создать и включить файл подкачки в командной строке Linux».

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

Доступ к BIOS вашего компьютера обычно можно получить во время запуска вашего компьютера, при условии, что он не был переведен в режим гибернации или сна, а фактически полностью выключился, когда вы в последний раз использовали его. Часто к нему можно получить доступ, нажав клавишу, например, F2 или DEL (или любую другую клавишу, отображаемую на экране или доступную в руководстве производителя вашей материнской платы) во время раннего запуска вашей системы (как только какой-либо текст отображается на экране после нажатия кнопку питания).

Обычно в Linux доступны три уровня приостановки энергосбережения на основе ядра, предоставляемые операционной системой (или, точнее, ядром).

Эти уровни встроены в ядро, и их доступность зависит от используемой операционной системы. Уровни: Suspend-To-Idle (подходящее название s2idle или freeze), Suspend-To-Memory (mem или правильнее deep) и Suspend-To-Disk (disk). Ваша система также может поддерживать режим ожидания (ожидание или shallow). Вскоре мы узнаем больше о том, как узнать, какие уровни доступны в вашей системе, и как ими управлять!

Десктопы не могут перейти в режим гибернации или сна?

Интересно, что, хотя обычно приостановка в памяти и приостановка на диск предоставляются ядром и поддерживаются системой, операционная система, работающая поверх ядра, с некоторой регулярностью не может представить эти параметры в Графический интерфейс/рабочий стол.

Например, в недавней установке Mint 20 (современная операционная система на основе Ubuntu), клонированной в современную систему, при нажатии кнопки питания в графическом интерфейсе пользователя/рабочем столе xcfe были доступны следующие параметры:

Выйдите из системы, перезапустите, выключите и переключите пользователя, но не в спящий режим, ожидание и не в спящий режим! Таким образом, возможность по-прежнему приостанавливать эту систему в памяти или на диске была бы большим шагом вперед, даже если для этого нам придется вызывать терминал. В следующем разделе объясняется, как это сделать, но давайте сначала рассмотрим параметры, доступные в вашей системе, и их значение.

Если вы выполните cat /sys/power/state в своей командной строке, вы увидите что-то похожее на следующее:

В этой конкретной системе поддерживаются три основных варианта (замораживание, память и диск). Вы также можете увидеть ожидание или вашу систему.

Опция freeze, если она установлена, инициирует облегченное состояние сна только на основе программного обеспечения для вашей системы. Пользовательское пространство Linux будет заморожено (отсюда и термин), а все устройства ввода-вывода будут переведены в режим пониженного энергопотребления. Хотя этот параметр и состояние всегда поддерживаются и ограничивают потребление энергии, это самая легкая форма остановки вашей машины. Если у вас нет других вариантов, это все равно может сэкономить на счетах за электроэнергию, хотя и не так сильно, как отключение системы.

Таким образом, вопрос для этой опции/состояния становится вопросом совести (оставить систему в состоянии готовности к использованию и в состоянии «как выключено» и немного сэкономить по сравнению с выключением, но с необходимостью повторно открывать приложения и сохранять больше). Надеюсь, ваша операционная система и оборудование поддерживают и другие состояния. Если это не так, подумайте об обновлении или смене операционной системы и/или обновлении прошивки BIOS и других аппаратных устройств до их последних версий. Изменение параметров питания в BIOS также может помочь.

Опция mem, если она установлена, инициирует либо приостановку в режиме ожидания, что идентично опции замораживание, либо выполнение приостановки в ОЗУ, где она все в системе переведено в состояние пониженного энергопотребления, кроме памяти. Какой вариант используется (Suspend-To-Idle или Suspend-To-RAM) зависит от настройки файла /sys/power/mem_sleep. Вы можете изучить различные режимы этого файла, просто выполнив cat /sys/power/mem_sleep в командной строке терминала.

Вообще говоря, я ожидаю, что этот параметр будет установлен по умолчанию на deep по умолчанию (как указано [code]) во всех операционных системах Linux, просто потому, что при установке /sys/power/state в mem, можно было бы ожидать, что система запишет содержимое в память (т. е. Suspend-To-RAM, которая устанавливается с помощью deep в /sys/power/mem_sleep), а не в режиме Suspend-To-Idle, обозначенном s2idle.

Также обратите внимание, что таким образом можно использовать два разных способа приостановки работы в режиме ожидания: либо путем записи freeze в /sys/power/state, либо путем записи s2idle в /sys/power/mem_sleep с последующей записью mem в /sys/power/state.

Как видите, используемая терминология немного запутана и смешана из-за наличия файла /sys/power/mem_sleep. Более простой способ сделать что-то и, предположительно, способ по умолчанию во всех современных операционных системах Linux — просто оставить для /sys/power/mem_sleep значение deep и написать заморозить в /sys/power/state для Suspend-To-Idle и записать mem в /sys/power/state в Suspend-To-RAM.

Наконец, у нас есть последний вариант (при условии, что в вашей системе нет параметра standby, который представляет собой параметр Power-On-Suspend, когда ЦП поддерживает питание), и это disk. Эта опция позволяет нам Suspend-To-Disk. По сути, это вариант Hibernate, который мы описали ранее, тогда как Suspend-To-Idle или Suspend-To-RAM можно считать спящими режимами. В этом режиме все данные в памяти записываются на диск, так что сама память тоже может быть освобождена от питания: полное отключение.

Таким образом, самый простой способ выбрать любой из трех основных параметров приостановки питания — установить (или оставить) для /sys/power/mem_sleep значение deep, игнорировать этот файл , а затем выберите наши режимы приостановки питания, используя только /sys/power/state, и написав freeze (Suspend-To-Idle), mem (Suspend-To-RAM) или disk (Suspend-To-Disk) в этот файл. Давайте посмотрим, как это сделать безопасно.

Как перейти в спящий режим, спать или заморозить

Мы хотим иметь скрипт, который будет безопасно переводить в спящий режим, спать или замораживать наш компьютер. Почему упоминание о безопасности? Хорошо, подумайте, как запись freeze в /sys/power/state немедленно заморозит систему и восстановит ее в точно такое же состояние при нажатии клавиши или мыши. нажимается (в зависимости от того, включены ли такие параметры в настройках BIOS). Ваш рабочий стол, разблокированный, все еще разблокирован!

Таким образом, нам нужен скрипт, который будет не только переводить в спящий режим, спать или замораживать нашу машину, но также и тот, который заблокирует для нас наш рабочий стол. Реализация этого будет зависеть от операционной системы, а также от выбранного рабочего стола/графического интерфейса.

Быстрый поиск в вашей любимой поисковой системе [экран] блокирует графический интерфейс дистрибутива Linux из командной строки, где экран — это необязательное слово/термин поиска, дистрибутив Linux — это имя вашего дистрибутива Linux, а GUI — это имя вашего графического интерфейса (например, xcfe), которое покажет один или несколько способов блокировки вашего терминала из командной строки. В этом руководстве мы будем использовать Linux Mint 20 с запущенным xcfe.

Мы определяем наш скрипт hibernate.sh следующим образом:

sudo sleep 0.1  # To get auth
xflock4
sleep 3
echo disk | sudo tee /sys/power/state  # Requires sufficient swap space

В первой строке мы вызываем sudo, чтобы включить аутентификацию на уровне пользователя root/super. Мы просто выставляем счет sleep 0.1 как фиктивную команду. Единственная цель здесь состоит в том, чтобы последующие команды sudo (например, последняя) не требовали от нас ввода аутентификации, так как довольно сложно ввести пароль в терминал, когда ваш экран уже заблокирован;)

После этого мы вызываем операционную систему и выбираем специальную команду блокировки для рабочего стола/графического интерфейса/оконного менеджера, например xflock4 для xcfe в Linux Mint 20. Затем мы спим в течение 3 секунд, используя sleep 3.

Наконец, мы записываем (используя echo) слово disk в /sys/power/state, используя tee (см. man tee для получения дополнительной информации, если это представляет интерес, в основном tee читает из стандартного ввода и записывает в файл здесь) и sudo. Это переведет нашу систему в спящий режим на диск (и выключит компьютер) при условии наличия достаточного пространства подкачки, как описано ранее в этом руководстве.

Изменить этот скрипт на Suspend-To-RAM/Memory теперь легко: просто замените слово disk на mem.

Мы определяем наш скрипт sleep.sh следующим образом:

sudo sleep 0.1  # To get auth
xflock4
sleep 3
echo deep | sudo tee /sys/power/mem_sleep
echo mem | sudo tee /sys/power/state

Мы предприняли дополнительный шаг, записав deep в /sys/power/mem_sleep, чтобы обеспечить экономию энергии и избежать Idle-To-Suspend. Это будет работать только в том случае, если deep является фактическим вариантом в вашей системе (не забудьте запустить cat /sys/power/mem_sleep, чтобы обнаружить спящие режимы памяти, и убедитесь, что deep — один из них). Если deep уже выбран в качестве текущего по умолчанию, он будет отображаться как [deep].

Наконец, мы также можем создать скрипт freeze следующим образом:

sudo sleep 0.1  # To get auth
xflock4
sleep 3
echo freeze | sudo tee /sys/power/state

Обратите внимание, что дополнительная запись s2idle в /sys/power/mem_sleep не требуется, поскольку freeze записывает в /sys/power /state автоматически использует s2idle (Suspend-To-Idle). Как описано ранее, мы могли бы записать s2idle в /sys/power/mem_sleep, а затем записать mem в /sys/power/. state для достижения того же результата, но это может показаться более запутанным способом.

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

Также следует отметить, что только функция Suspend-To-Disk (disk) обеспечивает уверенность в том, что если каким-либо образом упадет питание вашей системы, это не повлияет на ваше сохраненное состояние, и компьютер сможет возобновить работу с того момента, на котором вы остановились. выключенный. Тем не менее, он также является самым медленным, поскольку дисковый ввод-вывод — для размера вашей памяти — необходим.

Подведение итогов

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

Компьютер можно перевести в режим ожидания (s2idle), в память (mem) и на диск (disk). В этом руководстве описаны различные способы сделать это, а также то, как это связано с базовым оборудованием. Обычные операционные системы, хотя и поддерживают гибернацию и спящий режим, не всегда рекламируют или отображают эти параметры в своем графическом интерфейсе рабочего стола.

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

Отказ от ответственности: в различных экспериментах, проведенных для этого руководства, компьютеры не пострадали :)