LINUX.ORG.RU

Универсальный способ выключения системы

 , , ,


0

2

Здравствуйте. Возник такой вопрос при разработке окружения рабочего стола. У меня до текущего момента кнопки выключения и перезагрузки запускали systemctl poweroff и systemctl reboot соответственно. Но как быть с системами без systemd? Я нашел способ, который работает в Artix Linux, можно прописать loginctl poweroff. Но, насколько я понял, это работает только с elogind (потому что loginctl в Арче сказал, что не знает такой команды - poweroff). Есть какой-то универсальный способ, который будет работать везде, чтобы не городить костыли?



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

а при установке polkit автоматом не требуется уже рут для выполнения?

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

отвечу сам, на свой же вопрос.

в System Bus есть сервис org.freedesktop.login1. По пути /org/freedesktop/login1 в интерфейсе org.freedesktop.login1.Manager есть метод Suspend

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

ну, я так понял, была поправка, что просто лучше 0 вместо now использовать, ну, как вы и написали, тогда лучше shutdown -P 0

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

Это что-то из времён 90-х, как в 98-й винде «Теперь питание компьютера можно отключить»?

Просто сколько не делал, на всех машинах именно выключало, а не просто останавливало процессы.

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

Тема вышвыривания системника с балкона не раскрыта.

Печаль светла, но нет императива…
Чего свистишь, уже написан «Капитал»!
Швырять столы в окно, конечно, некрасиво,
Но я швырнул — так, чтобы наповал!

hobbit ★★★★★
()

Универсальный способ выключения системы

Выдернуть шнур, выдавить стекло

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

Нет, ты спрашивал про универсальный. Всякие dbus и тем более freedesktop.org таковыми точно не являются. Универсального скорее всего нет.

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

Где now не работает? Не помню.

А вот -h много где не работает. В freebsd надо shutdown -p now, в openbsd надо shutdown -h -p now, а solaris вообще другая команда.

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

Где now не работает? Не помню.

Честно говоря, я тоже не помню, но помню, что раньше юзал now, потом где-то не сработало, и стал юзать 0 с тех пор.

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

Универсальный для люникса:

echo 1 > /proc/sys/kernel/sysrq
echo s > /proc/sysrq-trigger  # sync дисков, можно пропустить
echo u > /proc/sysrq-trigger  # umount, можно пропустить
echo o > /proc/sysrq-trigger  # выключение

Естественно, требует рута.

Суспенд делается через запись в /sys/power/state. Поддерживаемые режимы можно прочитать из этого же файла.

UPD: перечитал пост. ТС, сделай опцию в конфиге и не насилуй людям разум. Всё равно же не угадаешь.

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

Сам не помню точно, у меня вроде в старых версиях Antix'а не срабатывало.

В Опёнке вроде тоже shutdown -p now, по крайней мере в мане написано, что он передаёт флаг -p команде halt.

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

ну, D-Bus и так, и так у меня в проекте используется :) Что касается стандарта freedesktop, ну тут зависит от того, что его реализует. у меня на основной машине lightdm, но потом чекну, работает ли это с sddm

thm
() автор топика

способ, который будет работать везде, чтобы не городить костыли

Аппаратная кнопка жи есть, нажать и подержать.

Nervous ★★★★★
()

А просто /usr/bin/poweroff и reboot не универсальны, даже если это симлинк?

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

Суспенд делается через запись в /sys/power/state

Это ядерный suspend, а вокруг него ещё юзерспейсные хуки обычно есть, хотя я никогда не вдавался в их суть.

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

Вероятно чтоб он команду halt вообще запустил - надо передать ещё и -h. Просто -p у меня не работал несколько лет назад.

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

ну, при том, что помимо дисплейного менеджера, у нее есть менеджер входа в систему и гритер, так что она может сессиями управлять

UPD хотя к сессии это вроде отношения и не имеет, но тогда почему есть пункт Suspend рядом с той же блокировкой сессии, это вопрос

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

Единственный правильный ответ на вопрос из шапки. Бесполезный, конечно, но остальные-то и не пытались.

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

сделай опцию в конфиге

Спасибо, понял, сделаю.

thm
() автор топика

Но как быть с системами без systemd?

Никак. Пусть их разработчики думают и пишут тебе свои предложения, если их что-то не устраивает.

MoldAndLimeHoney
()

У тебя есть 2 опции, считать стандартом паверофф через дбас или напилить свой рутовый демон который через сокет будет запускать shutdown -h now.

ya-betmen ★★★★★
()
Ответ на: комментарий от MoldAndLimeHoney

Тогда надо на страничке этого «легковесного DE на Qt и Python» на очень видном месте написать что поддерживаются только системы с systemd. Но тогда у ТС и вопроса бы не было, ибо systemctl poweroff и всё.

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

на очень видном месте написать что поддерживаются только системы с systemd

Зачем? Это сейчас дефолт везде, кроме совсем уж дикой маргинальщины.

MoldAndLimeHoney
()
Ответ на: комментарий от Gentooshnik

Python используется только для вспомогательных скриптов (например, генерация или обновление конфигов). По всем тестам DE действительно легковесное, и сетап с OpenBox потребляет примерно столько же, сколько i3wm + i3status

P.S. от Python планирую избавиться в следующем релизе

thm
() автор топика
Последнее исправление: thm (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.