Dark_SS 04.08.2012 15:36
Tips & tricks — Корректное завершение работы компьютера через терминал
Многим известны команды shutdown, halt, reboot, но у них есть как минимум два недостатка:- для запуска требуются административные привилегии (можно решить через sudoers);
- хотя для железа завершение работы компьютера происходит вполне корректно, этого нельзя сказать о пользовательских программах: все программы, сохраняющие информацию при выходе из них (например, плееры), скорее всего, потеряют все изменения при таком выключении.
К счастью, мы живём в просвещённый век D-Bus, где это уже решено.
KDE
Среда KDE тесно интегрирована с этой системой и предоставляет метод org.kde.KSMServerInterface.logout для корректного завершения работы компьютера:
1 |
|
Рассмотрим параметры, которые передаются методу. Для начала, -1 передаёт значение по умолчанию.
Первый параметр называется confirm и отвечает за подтверждение завершения работы. 0 приводит к непосредственному выключению, а 1 вызывает всем известное окошко с 30 секундной задержкой.
Второй параметр — sdtype — выбирает тип завершения работы:
- 0 — не завершать работу (у меня идентичен 3);
- 1 — перезагрузка;
- 2 — выключение;
- 3 — завершение сеанса.
Третий параметр — sdmode — выбирает режим завершения работы:
- 0 — отложить завершение до того, как будут закрыты все активные сессии;
- 1 — завершить сейчас, если нет активных сессий, иначе ничего не делать;
- 2 — закрыть все сессии и завершить работу
- 3 — если есть активные сессии, спросить у пользователя, как поступить.
Общий случай
Также можно воспользоваться ConsoleKit и UPower:- выключение:
1
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
- перезагрузка:
1
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
- ждущий режим:
1
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
- спящий режим:
1
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Ещё больше удобства
Чтобы не запоминать все эти простыни, можно добавить соответствующие алиасы в конфиг вашего шелла. Например, я добавил в ~/.zshrcCredits

+ 0 -
Как задать права на выполнение этих действий?
В КДЕ должно работать, наверно, в любом случае. Для общего случая нужен консолькит и упауэр, также нужно иметь права на управление дбасом, т.е. быть в соответствующей группе.
В dbus или консолькит и упауэр нету разделения прав по действиям по обращениям к демонам, программам, и если в курсе сейчас dbus умеет работать по сети?
В Fedora 17 restart и halt не работают, а suspend норм.
а права на выпонение этих действий задаются в /etc/polkit-1/localauthority/50-local.d/your-file-with-permissions.pkla (я назвал "20-org-freedesktop-shutdown.pkla")
Интересно, у меня только такое есть:
%cat /etc/polkit-1/localauthority.conf.d/50-localauthority.conf
# Configuration file for the PolicyKit Local Authority.
#
# DO NOT EDIT THIS FILE, it will be overwritten on update.
#
# See the pklocalauthority(8) man page for more information
# about configuring the Local Authority.
#
[Configuration]
AdminIdentities=unix-user:0
# Configuration file for the PolicyKit Local Authority.
#
# DO NOT EDIT THIS FILE, it will be overwritten on update.
#
# See the pklocalauthority(8) man page for more information
# about configuring the Local Authority.
#
[Configuration]
AdminIdentities=unix-user:0
/etc/polkit-1/localauthority/50-local.d/
vs
/etc/polkit-1/localauthority.conf.d/
Я уже не помню, почему именно, я создал файл именно в этой папке. Наверное, можно и в той и в другой. Что я точно знаю, что добавлять пермишны в /etc/polkit-1/localauthority.conf.d/50-localauthority.conf не стоит, он действительно перетирается с каждым апгрейдом КонсолеКита.
vs
/etc/polkit-1/localauthority.conf.d/
Я уже не помню, почему именно, я создал файл именно в этой папке. Наверное, можно и в той и в другой. Что я точно знаю, что добавлять пермишны в /etc/polkit-1/localauthority.conf.d/50-localauthority.conf не стоит, он действительно перетирается с каждым апгрейдом КонсолеКита.
%ls -l /etc/polkit-1/
итого 8
drwxr-xr-x 2 root root 4096 дек. 8 2011 localauthority.conf.d
drwxr-xr-x 2 root root 4096 дек. 8 2011 nullbackend.conf.d
итого 8
drwxr-xr-x 2 root root 4096 дек. 8 2011 localauthority.conf.d
drwxr-xr-x 2 root root 4096 дек. 8 2011 nullbackend.conf.d
С помощью systemd
(не обновлял тело, чтобы не нервировать подписчиков rss)
Вы можете использовать следующую команду:
Для остановки системы, не выключая питания, воспользуйтесь:
Если Вы находитесь в сессии локального пользователя и при этом никакого другого активного сеанса нет, то вышеприведенные команды будут работать без привилегий суперпользователя.
(не обновлял тело, чтобы не нервировать подписчиков rss)
Вы можете использовать следующую команду:
1 |
|
1 |
|
Арчевики полущ.
Завершить работу и перезагрузить компьютер:
Завершить работу и выключить компьютер:
Завершить работу и остановить(без выключения питания?) компьютер:
Перевести систему в состояние ожидания:
Перевести систему в состояние гибернации: systemctl hibernate
Завершить работу и перезагрузить компьютер:
1 |
|
1 |
|
1 |
|
1 |
|
Не понятно что мешает плеерам сохранять состояние по sigterm кроме кривых рук их кодера.