Внес в него некоторые улучшения и адаптации под ubuntu 24.
Скрипт создает swap файл, достаточного размера, что бы в него целиком поместилось содержимое оперативной памяти. После этого заработает режим гибернации, именно сохранения состояния и полного выключения ноутбука.
Сделано и проверено на одном конкретном ноутбуке, потому используйте на свой страх и риск.
| Код |
|---|
#!/bin/bash
# Этот скрипт настраивает режимы сна и гибернации в Ubuntu 24.04
# Он проверяет достаточность пространства подкачки (swap) и настраивает GRUB для правильной работы гибернации
# Проверка, что скрипт запускается с правами root или с использованием sudo
if [ "$(id -u)" -ne 0 ]; then
echo "Этот скрипт должен быть запущен от имени root или с использованием sudo."
exit 1
fi
# Функция для проверки и корректировки размера swap
adjust_swap() {
# Получаем размер оперативной памяти (в мегабайтах)
local RAM_SIZE=$(free -m | awk '/^Mem:/{print $2}')
# Получаем текущий размер swap (в мегабайтах)
local SWAP_SIZE=$(free -m | awk '/^Swap:/{print $2}')
# Путь к файлу swap
local SWAP_FILE="/swapfile"
echo "Размер RAM: ${RAM_SIZE}MB"
echo "Текущий размер swap: ${SWAP_SIZE}MB"
# Если размер swap меньше размера RAM, то увеличиваем swap
if [ "$SWAP_SIZE" -lt "$RAM_SIZE" ]; then
echo "Размер swap меньше размера RAM. Выполняется настройка swap..."
# Выключаем текущий swap и удаляем файл swap, если он существует
swapoff -a
[ -f $SWAP_FILE ] && rm -f $SWAP_FILE
# Создаем новый swap файл, размер которого равен размеру RAM
fallocate -l ${RAM_SIZE}M $SWAP_FILE
chmod 600 $SWAP_FILE
mkswap $SWAP_FILE
swapon $SWAP_FILE
# Добавляем запись для swap в файл /etc/fstab, если ее нет
if ! grep -q "$SWAP_FILE" /etc/fstab; then
echo "$SWAP_FILE none swap sw 0 0" | tee -a /etc/fstab
fi
echo "Размер swap был установлен на ${RAM_SIZE}MB."
else
echo "Текущий размер swap достаточен."
fi
}
# Функция для настройки GRUB для использования гибернации
configure_grub_for_hibernation() {
# Проверяем, установлен ли пакет filefrag (необходим для получения смещения в swap-файле)
if ! command -v filefrag &> /dev/null; then
echo "Утилита filefrag не найдена, устанавливаем ее..."
apt install -y e2fsprogs
fi
# Проверяем, является ли swap файлом
if [ -f /swapfile ]; then
# Получаем полный путь к файлу swap
local RESUME_FILE=$(readlink -f /swapfile)
# Получаем смещение в файле swap (для правильной работы гибернации)
local RESUME_OFFSET=$(filefrag -v $RESUME_FILE | awk '/^ *0:/{print $4}' | sed 's/\..*//')
local SWAP_UUID=""
echo "Настроим GRUB для гибернации с использованием смещения $RESUME_OFFSET"
# Обновляем конфигурацию GRUB (добавляем параметры для гибернации)
sed -i.bak -r "s|^(GRUB_CMDLINE_LINUX_DEFAULT=).*|\1\"quiet splash resume=offset=$RESUME_OFFSET\"|" /etc/default/grub
# Обновляем конфигурацию GRUB
update-grub
echo "Конфигурация GRUB обновлена. Пожалуйста, проверьте настройки и перезагрузитесь, если необходимо."
else
echo "Файл swap не найден. Пропускаем настройку GRUB для гибернации."
fi
}
# Обновляем и устанавливаем необходимые пакеты
apt update && apt upgrade -y
# Устанавливаем необходимые пакеты, если они еще не установлены
apt install -y pm-utils
# Включаем режим сна при закрытии крышки ноутбука (для ноутбуков)
gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action 'suspend'
gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action 'suspend'
# Настроим тайм-ауты для режима сна
# Спящий режим через 15 минут на батарее
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'suspend'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 900
# Спящий режим через 30 минут при подключении к сети
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 1800
# Обеспечиваем достаточное пространство для swap
adjust_swap
# Настраиваем GRUB для гибернации
configure_grub_for_hibernation
# Опционально: Устанавливаем и настраиваем TLP для дополнительного управления питанием (для ноутбуков)
apt install -y tlp tlp-rdw
systemctl enable tlp
systemctl start tlp
# Подтверждаем завершение изменений
echo "Настройка режима сна и гибернации завершена. Пожалуйста, проверьте настройки."
# Опционально: Перезагружаем систему для применения изменений
# Раскомментируйте следующую строку, если хотите автоматически перезагрузить систему
# sudo reboot
exit 0
|