Внес в него некоторые улучшения и адаптации под 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 |