LINUX.ORG.RU

Ответ на: комментарий от JB

Вряд ли, он только в активной сессии работает, иначе просит пароль.

Раньше был systemd-shutdownd.service, но его удалили в последнем релизе

Из состава systemd был исключён вспомогательный демон systemd-shutdownd, предназначавшийся для отложенного завершения работы в стиле shutdown(8). Теперь эта функциональность реализуется в systemd-logind. Интерфейс остался тем же — команда shutdown.(Если в вашей конфигурации systemd-logind не используется, отложенное завершение работы можно устроить с помощью systemd-run и таймерных юнитов — прим. пер.)

Сам пользуюсь самописным велосипедом по принципу sleep N && systemctl suspend, для показа времени до отключения и управления с геймпада.

disarmer ★★★
()
Последнее исправление: disarmer (всего исправлений: 2)

Чем вообще сейчас является shutdown в арче — нормальным способом выключения или костылем для совместимости?

Это обёртка из пакета systemd-sysvcompat, которая вызывает systemctl poweroff, так что скорее второе

disarmer ★★★
()
Ответ на: комментарий от disarmer

Интерфейс остался тем же — команда shutdown

скорее второе

Разве? Если shutdown — это рекомендуемый интерфейс?

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Klymedy

Вероятно речь о systemctl shutdown, а не shutdown из sysvcompat

«скорее второе» - это я к тому, что shutdown из sysvcompat скорее костыль для совместимости,

disarmer ★★★
()
Ответ на: комментарий от Klymedy

Видимо версия systemd меньше 219. Тогда либо обновить, либо использовать сервис systemd-shutdownd, который в 219 заменили на systemctl shutdown

disarmer ★★★
()

Можно .timer заюзать.

Medar ★★★★★
()
Ответ на: комментарий от disarmer
$ systemctl --version
systemd 219
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN
Klymedy ★★★★★
() автор топика

shutdown(8). Это нормальный способ. Он остался в наследство, да, но он не объявлялся устаревшим.

intelfx ★★★★★
()
Ответ на: комментарий от disarmer

Интерфейс остался тем же — команда shutdown.

Написал же специально. Команду shutdown(8) не трогали и трогать вроде как не собираются.

intelfx ★★★★★
()
Ответ на: комментарий от disarmer

Вероятно речь о systemctl shutdown

shutdown(8) я написал специально, чтобы понятно было, что речь о самостоятельной команде... Тем более, systemctl shutdown не существует.

intelfx ★★★★★
()
Ответ на: комментарий от JB

Тогда уж systemd-run --on-active="5min" systemctl poweroff.

Собственно, с версии 220, если собрано без logind, придётся делать именно так. Почему это не запилили как фоллбэк внутри реализации shutdown(8) — хороший вопрос.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от Klymedy

Так обычно указывают, в какой man-секции находится мануал. Я так пишу, когда хочу подчеркнуть, что речь идёт о конкретной команде, а не о псевдокоде.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

А есть ли способ (кроме костылей типа systemd-run --on-active="5min" systemctl poweroff) делать выключение в определенное время не от рута?

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Klymedy

А этот костыль тебе не особо поможет выключить систему не от рута. systemd-run --system требует рута, а systemd-run --user запустит команду вне контекста сессии, и polkit запретит непривилегированный шатдаун.

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

Так что способов, полагаю, нет пока что.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от intelfx

Это обёртка

Не-а.

По крайней мере до 219 /usr/bin/shutdown приходит из пакета systemd-sysvcompat, который содержит только симлинки:

  Файл: «/usr/bin/»
  Файл: «/usr/bin/halt» -> «systemctl»
  Файл: «/usr/bin/init» -> «../lib/systemd/systemd»
  Файл: «/usr/bin/poweroff» -> «systemctl»
  Файл: «/usr/bin/reboot» -> «systemctl»
  Файл: «/usr/bin/runlevel» -> «systemctl»
  Файл: «/usr/bin/shutdown» -> «systemctl»
  Файл: «/usr/bin/telinit» -> «systemctl»
При вызове systemctl проверяет $0 и из этого делает вывод, что запускать. Вполне себе обёртка же. А то что без systemd-sysvcompat легко можно обойтись делает его костылём для обратной совместимости.

disarmer ★★★
()
Ответ на: комментарий от disarmer

Это не обёртка для systemctl poweroff, это отдельное действие со своим механизмом.

И да, sysvcompat — это совместимость с устоявшимися командами, но не костыль. (Где «костыль» == нечто нежелательное, от чего собираются избавиться при первой возможности. Здесь это не так.)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.