Показаны сообщения с ярлыком systemd. Показать все сообщения
Показаны сообщения с ярлыком systemd. Показать все сообщения

четверг, 2 февраля 2017 г.

Настройка suspend to hibernate в Debian Jessie

Ранее я уже писал про экономию заряда батареи ноутбука при использовании suspend to ram (S3). Такой режим называется suspend to hibernate и заключается в автоматическом переходе из S3 (suspend to ram) в S4 (suspend to disk) если пользователь не продолжит работу в течении заданного периода времени.

Прошлое решение базировалось на pm-utils, но с переходом jessie на systemd это перестало работать (#745848). До недавнего времени я пользовался jessie + sysv init и эта проблема меня не касалась, но последнее время все чаще сталкиваюсь с systemd и решил дать ему шанс на домашней системе. Наибольшей проблемой после перехода на systemd стал отвалившийся suspend-to-hibernate.

В wiki archlinux есть вариант для systemd. Пришлось немного доработать их вариант, чтобы он начал работать в debian jessie.

[Unit]
Description=Delayed hibernation trigger
Documentation=https://wiki.archlinux.org/index.php/Power_management
Before=suspend.target
Conflicts=hibernate.target hybrid-suspend.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm"
Environment="SLEEPLENGTH=+2hours"
ExecStart=-/bin/sh -c 'echo -n "alarm set for "; date +%%s -d$SLEEPLENGTH | tee $WAKEALARM'
ExecStop=-/bin/sh -c '\
  alarm=$(cat $WAKEALARM); \
  now=$(date +%%s); \
  if [ -z "$alarm" ] || [ "$now" -ge "$alarm" ]; then \
     echo "hibernate triggered"; \
     systemctl hibernate; \
  else \
     echo "normal wakeup"; \
  fi; \
  echo 0 > $WAKEALARM; \
'

[Install]
WantedBy=sleep.target

Этот сервис нужно сохранить в файле /etc/systemd/system/suspend-to-hibernate.service и добавить в suspend.target зависимость на suspend-to-hibernate.service. В противном случае suspend.target не будет дожидаться выполнения suspend-to-hibernate.service.

sudo cp /lib/systemd/system/suspend.target /etc/systemd/system/suspend.target
echo Requires=suspend-to-hibernate.service | sudo tee -a /etc/systemd/system/suspend.target
sudo systemctl enable suspend-to-hibernate.service
sudo systemctl daemon-reload

В будущем планирую интегрировать поддержку systemd в мой laptop-utils и собрать для него пакет.

понедельник, 16 ноября 2015 г.

Автологин в виртуальную консоль для systemd

Поскольку systemd не обрабатывает файл /etc/inittab, то нужно искать другой способ сделать автологин в виртуальную консоль. Нашел ответ тут.

Нужно создать файл /etc/systemd/system/getty@tty1.service.d/override.conf и прописать в него:

[Service]
Type=simple
ExecStart=
ExecStart=-/sbin/agetty --autologin username --noclear %I 38400 linux

Имя пользователя username нужно заменить на нужное.

среда, 1 апреля 2015 г.

Удаление systemd в Debian Jessie/Sid

В одном из контейнеров OpenVZ, недавно обновленном до Jessie, начались проблемы со временем захода в контейнер по SSH. Почитал логи и нашел:

$ egrep 'time.*out' /var/log/auth.log
Apr  1 09:49:27 debian8 sshd[16956]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 10:46:52 debian8 sshd[16986]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 10:46:52 debian8 systemd-logind[172]: Failed to start user service: Connection timed out
Apr  1 10:47:17 debian8 systemd-logind[172]: Failed to start session scope session-10.scope: Connection timed out (null)
Apr  1 11:03:19 debian8 sshd[16998]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 11:50:56 debian8 sshd[17019]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 11:51:13 debian8 sshd[17024]: pam_systemd(sshd:session): Failed to create session: Connection timed out

Началось после suspend'а контейнера. Скорее всего какая-то нестыковка OpenVZ и systemd, но разбираться в этих нюансах нету времени.

Тут нашлась инструкцию по удалению systemd из Jessie/Sid. На всякий случай задублирую ее себе:

Установить SysV init

$ sudo aptitude install --without-recommends sysvinit-core sysvinit sysvinit-utils

Теперь важно сначала перезагрузить систему, чтобы инициализация прошла через SysV init. Затем удалить пакет systemd и запретить его установку в будущем

$ sudo aptitude purge systemd
$ echo -e 'Package: systemd\nPin: origin ""\nPin-Priority: -1' | sudo tee /etc/apt/preferences.d/no-systemd

После удаления systemd контейнер пришел в норму.

UPDATE: Если попытаться удалить systemd из десктопной инсталляции, то по зависимостям предложит удалить много чего. Чтобы избежать этого нужно установить пакет sysvinit-core и перезагрузиться.

$ sudo apt-get install sysvinit-core
$ sudo reboot