Учебники (How-To & F.A.Q)

Настройка гибернации на диск с полным отключением питания и немедленная гибернация без перезагрузки

дальнейшее развите кода тут github.com/berligostr/hiber2sd

когда это может понадобиться? Приведу пару сценариев:
— вы в секте отрицателей свапа и у вас его просто нет;
— у вас есть свап но он в рам или в чанках;
— у вас есть свап но его мало для гибернации;
далее, вы пооткрывали кучу редакторов, закладок в браузере и что то там делаете важное, и тут такая мама: сына, срочно сгоняй за хлебом…
или
вы трудились весь день на багамах без подключения к сети 220в. всё, акк сел и надо срочно сохранить все труды, что бы при появлении розетки всё открыть в том же месте и продолжить писать роман.
в общем вариантов тьма. далее я приведу скрипт, который позволяет сделать задуманное простым его запуском и БЕЗ ПЕРЕЗАГРУЗКИ вы получите гибернацию на диск с полным отключением питания (само собой скрипт надо запускать через sudo или от root:
#!/bin/bash
#
# История версий
# -------------------------------------------------------------------------------------------------------
# Версия 2.1 почищены комментарии, удалены отладочные заметки 
# Версия 2.2 Переписывает конфигурацию для гибернации даже если она уже существует
# Версия 2.3 Скрипт завершиться при ошибке в любой команде
# Версия 2.4 Произведена структуризация скрипта комментариями
# -------------------------------------------------------------------------------------------------------
# Конец истории версий
#
# введение и пояснения для юзера
# -------------------------------------------------------------------------------------------------------
set -e
echo "Если  на  комьпютере  файловая  система  ext4, то этот скрипт позволяет без"
echo "перезагрузки ввести систему в гибернацию на диск даже если она не настроена."
echo "Предварительно     необходимо   установить   пакет   uswsusp-git   из   AUR."
echo "Не  выходя  из  скрипта,  установи  этот  пакет  в новом окне терминала так:"
echo "------------------------>  pamac build uswsusp-git  <-----------------------"
echo "После  этого  скрипт  произведет  настройку  системы и предложит гибернацию."
echo "Существующие   настройки  swap не повредятся, только добавится  необходимое."
echo "Если  гибернация  более  не  нужна, скрипт  удалит  настройки  и  swap-файл."
# -------------------------------------------------------------------------------------------------------
# Разъяснения юзерам сделаны
#
# Удаление некоторых ненужных настроек гибернации в случае, если она больше не нужна
# -------------------------------------------------------------------------------------------------------
echo -e "\n"; read -n 1 -p "Удалить настройки гибернации? [y/N]: " delhib;
if [[ "$delhib" = [yYlLдД] ]]; then echo -e "\n"; 
  if [ -e /swapfile ]; then swapoff /swapfile ; rm -f /swapfile ; fi
  cp -v /etc/fstab /etc/fstab.backup
  if grep -q "swapfile none swap defaults' /etc/fstab; 
    then sed -i '/swapfile none swap defaults/d' /etc/fstab; 
  fi
  cp -v /etc/mkinitcpio.conf /etc/mkinitcpio.conf.backup
  if grep -q 'uresume' /etc/mkinitcpio.conf; 
    then sed -i 's!\(^HOOKS.*udev\) \(uresume\) \(.*filesystems.*\)!\1 \3!' /etc/mkinitcpio.conf; 
    else echo "/etc/mkinitcpio.conf уже не содержит хук uresume"; 
  fi
  cp -v /etc/suspend.conf /etc/suspend.conf.backup
  if grep -q 'resume device' /etc/suspend.conf; then sed -i '/resume device/d' /etc/suspend.conf; fi
  if grep -q 'resume offset' /etc/suspend.conf; then sed -i '/resume offset/d' /etc/suspend.conf; fi
  mkinitcpio -P
fi
# -------------------------------------------------------------------------------------------------------
# Конец процедуры удаления настроек гибернации
#
# Настройка гибернации в файл
# -------------------------------------------------------------------------------------------------------
echo -e "\n"; read -n 1 -p "Попытаться гибернизировать? [y/N]: " hib;
if [[ "$hib" = [yYlLдД] ]]; 
  then echo -e "\n"; 
# Скрипт работает только на ext4
  tipfs="$(df -Th | grep "$(df | grep '/$' | awk '{ print $1 }')" | awk '{ print $2 }')"
  if [[ ! $tipfs = ext4 ]]; 
    then echo "Ты странный какой-то, у тебя файловая система не ext4"; set +e ; sleep 10; exit; 
  fi
# для нормальной работы скрипта необходим пакет uswsusp-git
  package="uswsusp-git"; check="$(pacman -Qs --color always "${package}" | grep "local" | grep "${package}")";
  if [ -n "${check}" ] ; 
    then
# создание файла подкачки 
# -------------------------------------------------------------------------------------------------------
    if [ -e /swapfile ]; then swapoff /swapfile ; rm -f /swapfile ; fi
    ozu="$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 "K" }')"
    fallocate -l $ozu /swapfile ; chmod 600 /swapfile ; mkswap /swapfile ; 
# Определяем поддержку TRIM
    ssd="$(lsblk -D | grep $(lsblk -r | grep '/$' | awk '{ print $1 }') | awk '{ print $4 }')"; 
    if [[ "$ssd" = 0B ]]; then swapon /swapfile; else swapon --discard /swapfile; fi
    cp -v /etc/fstab /etc/fstab.backup
    if grep -q 'swapfile none swap' /etc/fstab; then sed -i '/swapfile none swap/d' /etc/fstab; fi
    if [[ "$ssd" = 0B ]]; 
      then echo "/swapfile none swap defaults 0 0" | tee -a /etc/fstab; 
      else echo "/swapfile none swap defaults,discard 0 0" | tee -a /etc/fstab; 
    fi
# -------------------------------------------------------------------------------------------------------
# файл подкачки создан
#
# Настройка initramfs
# -------------------------------------------------------------------------------------------------------
    cp -v /etc/mkinitcpio.conf /etc/mkinitcpio.conf.backup
    if grep -q 'uresume' /etc/mkinitcpio.conf; 
      then echo "/etc/mkinitcpio.conf уже содержит хук uresume"; 
      else sed -i 's!\(^HOOKS.*udev\) \(.*filesystems.*\)!\1 uresume \2!' /etc/mkinitcpio.conf; 
    fi
    cp -v /etc/suspend.conf /etc/suspend.conf.backup
    if grep -q 'resume device' /etc/suspend.conf; then sed -i '/resume device/d' /etc/suspend.conf; fi
    if grep -q 'resume offset' /etc/suspend.conf; then sed -i '/resume offset/d' /etc/suspend.conf; fi
    df /swapfile | grep dev | awk '{ print "resume device = " $1 }' | tee -a /etc/suspend.conf
    swap-offset /swapfile | tee -a /etc/suspend.conf
    mkinitcpio -P
# -------------------------------------------------------------------------------------------------------
# Настройка initramfs выполнена
#
# Настройка параметров гибернации пакета uswsusp-git
# -------------------------------------------------------------------------------------------------------
    if [ -f /etc/systemd/system/systemd-hibernate.service.d/override.conf ]; 
      then rm -f /etc/systemd/system/systemd-hibernate.service.d/override.conf ; 
    fi
    echo "[Service]" | tee -a /etc/systemd/system/systemd-hibernate.service.d/override.conf
    echo "ExecStart=" | tee -a /etc/systemd/system/systemd-hibernate.service.d/override.conf
    echo "ExecStartPre=-/usr/bin/run-parts -v -a pre /usr/lib/systemd/systemd-sleep" | tee -a /etc/systemd/system/systemd-hibernate.service.d/override.conf
    echo "ExecStart=/usr/bin/s2disk" | tee -a /etc/systemd/system/systemd-hibernate.service.d/override.conf
    echo "ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/systemd-sleep" | tee -a /etc/systemd/system/systemd-hibernate.service.d/override.conf
    echo " " | tee -a /etc/systemd/system/systemd-hibernate.service.d/override.conf
# Настройка параметра гибернации системы на диск с полным отключением питания
    if [ -f /etc/systemd/sleep.conf.d/hibernatemode.conf ]; 
      then rm -f /etc/systemd/sleep.conf.d/hibernatemode.conf ; 
    fi
    echo "[Sleep]" | tee -a /etc/systemd/sleep.conf.d/hibernatemode.conf
    echo "HibernateMode=shutdown" | tee -a /etc/systemd/sleep.conf.d/hibernatemode.conf
    echo " " | tee -a /etc/systemd/sleep.conf.d/hibernatemode.conf
# -------------------------------------------------------------------------------------------------------
# Настройка конфигов для гибернации на диск выполнена
#
# гибернация на диск
# -------------------------------------------------------------------------------------------------------
    echo -e "\n"; read -n 1 -p "Гибернизируемся? [y/N]: " hiber;
    if [[ "$hiber" = [yYlLдД] ]]; then echo -e "\n"; systemctl hibernate; fi
# -------------------------------------------------------------------------------------------------------
# гибернация на диск произведена
#
# Пост комментарии для юзера
# -------------------------------------------------------------------------------------------------------
# Пакет uswsusp-git из AUR не установлен, обработка для гибернации не сделана
  else then echo -e "\n"; echo "Для нормальной работы скрипта необходим пакет uswsusp-git из AUR! Установи его немедленно!"; then echo -e "\n";
  fi
  else then echo -e "\n"; echo "Ну на нет и суда нет! Если ошибся, то запусти скрипт снова!" ; then echo -e "\n"; 
# -------------------------------------------------------------------------------------------------------
# Окончание работы скрипта, восстановление стандартных параметров оболочки
#
fi
set +e 
Manjaro XFCE Edition

[РЕШЕНО] Гибернация на диск

XFCE. На ноуте настроена гибернация. При этом при выключении через меню «Выход из системы»
Manjaro XFCE Edition: Гибернация на диск
при нажатии на любую кнопку 1 «Сон» или 2 «Гибернация» происходила гибернация/сон в память.
По рекомендациям в арчвики настроил отключение ноута при гибернации. При этом удивительно то, что это выключение настроилось на кнопку 1 «Сон»
Как переназначить команды на кнопки пока не нашел. Может кто подскажет.
Решил назначить команду
systemctl hibernate

на комбинацию клавишь Fn+F1 (По умолчанию — сон). Сама команда отрабатывает правильно, ноут уходит в гибернацию на диск. Однако, при назначении этой команды на клавиши, и даже обличение ее в скрипт, с последующим назначении скрипта на клавиши (хотя скрипт сам по себе из терминала уводит в гибернацию на диск) не приводит к гибернации ноута на диск. Что я делаю не так?
Уголок новичка

Не могу настроить hibernate.

Пробовал по двум инструкциям. Во первых, редактировал /etc/default/grub, написал:
GRUB_CMDLINE_LINUX_DEFAULT=«quiet splash resume=/home/swapfile»
Обновил конфигурацию загрузчика:
sudo update-grub

Во вторых, редактировал /etc/mkinitcpio.conf и написал последнее слово в строке:
HOOKS=«base udev autodetect modconf block keyboard keymap filesystems resume»
Обновил файл:
sudo mkinitcpio -p linux58

Результат:
[ilya@G5-5590 ~]$ pm-hibernate
bash: pm-hibernate: команда не найдена
[ilya@G5-5590 ~]$ systemctl hibernate
Failed to hibernate system via logind: Not enough swap space for hibernation

Странно, что может не хватать места для гибернации, потому что у меня swapfile 4G, а используется памяти менее 1G.
Уголок новичка

Проблема с отключением кулеров

Не так давно перешел на manjaro. Все бы отлично, но один косяк исправить не могу: после выхода из спящего режима или режима ожидания кулера не запускаются. Ноут работает, но быстро нагревается и надо перезагружать. Что делать? Никаких решений в сети пока не нашел
Уголок новичка

Система криво восстанавливается после гибернации.

Установил Manjaro Kde 16.06: всё работает идеально, кроме гибернации. После включения система может загрузиться в черный экран с подчеркиванием в левом верхнем углу, может показать курсор, которым нельзя двигать, а может поначалу и восстановиться, но Читать дальше