sleep: implement suspend/hibernate as first class targets
This commit is contained in:
parent
4943c1c94b
commit
6edd7d0a09
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
|
/systemd-sleep
|
||||||
/systemd-inhibit
|
/systemd-inhibit
|
||||||
/systemd-remount-fs
|
/systemd-remount-fs
|
||||||
/build-aux
|
/build-aux
|
||||||
|
|
18
Makefile.am
18
Makefile.am
|
@ -67,6 +67,7 @@ usergeneratordir=$(pkglibexecdir)/user-generators
|
||||||
pkgincludedir=$(includedir)/systemd
|
pkgincludedir=$(includedir)/systemd
|
||||||
systemgeneratordir=$(rootlibexecdir)/system-generators
|
systemgeneratordir=$(rootlibexecdir)/system-generators
|
||||||
systemshutdowndir=$(rootlibexecdir)/system-shutdown
|
systemshutdowndir=$(rootlibexecdir)/system-shutdown
|
||||||
|
systemsleepdir=$(rootlibexecdir)/system-sleep
|
||||||
systemunitdir=$(rootprefix)/lib/systemd/system
|
systemunitdir=$(rootprefix)/lib/systemd/system
|
||||||
udevlibexecdir=$(rootprefix)/lib/udev
|
udevlibexecdir=$(rootprefix)/lib/udev
|
||||||
udevhomedir = $(libexecdir)/udev
|
udevhomedir = $(libexecdir)/udev
|
||||||
|
@ -117,6 +118,7 @@ AM_CPPFLAGS = \
|
||||||
-DSYSTEMD_CGROUP_AGENT_PATH=\"$(rootlibexecdir)/systemd-cgroups-agent\" \
|
-DSYSTEMD_CGROUP_AGENT_PATH=\"$(rootlibexecdir)/systemd-cgroups-agent\" \
|
||||||
-DSYSTEMD_BINARY_PATH=\"$(rootlibexecdir)/systemd\" \
|
-DSYSTEMD_BINARY_PATH=\"$(rootlibexecdir)/systemd\" \
|
||||||
-DSYSTEMD_SHUTDOWN_BINARY_PATH=\"$(rootlibexecdir)/systemd-shutdown\" \
|
-DSYSTEMD_SHUTDOWN_BINARY_PATH=\"$(rootlibexecdir)/systemd-shutdown\" \
|
||||||
|
-DSYSTEMD_SLEEP_BINARY_PATH=\"$(rootlibexecdir)/systemd-sleep\" \
|
||||||
-DSYSTEMCTL_BINARY_PATH=\"$(rootbindir)/systemctl\" \
|
-DSYSTEMCTL_BINARY_PATH=\"$(rootbindir)/systemctl\" \
|
||||||
-DSYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH=\"$(rootbindir)/systemd-tty-ask-password-agent\" \
|
-DSYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH=\"$(rootbindir)/systemd-tty-ask-password-agent\" \
|
||||||
-DSYSTEMD_STDIO_BRIDGE_BINARY_PATH=\"$(bindir)/systemd-stdio-bridge\" \
|
-DSYSTEMD_STDIO_BRIDGE_BINARY_PATH=\"$(bindir)/systemd-stdio-bridge\" \
|
||||||
|
@ -230,7 +232,8 @@ rootlibexec_PROGRAMS = \
|
||||||
systemd-fsck \
|
systemd-fsck \
|
||||||
systemd-timestamp \
|
systemd-timestamp \
|
||||||
systemd-ac-power \
|
systemd-ac-power \
|
||||||
systemd-sysctl
|
systemd-sysctl \
|
||||||
|
systemd-sleep
|
||||||
|
|
||||||
systemgenerator_PROGRAMS = \
|
systemgenerator_PROGRAMS = \
|
||||||
systemd-getty-generator
|
systemd-getty-generator
|
||||||
|
@ -266,6 +269,7 @@ dist_systemunit_DATA = \
|
||||||
units/nss-lookup.target \
|
units/nss-lookup.target \
|
||||||
units/nss-user-lookup.target \
|
units/nss-user-lookup.target \
|
||||||
units/mail-transfer-agent.target \
|
units/mail-transfer-agent.target \
|
||||||
|
units/hibernate.target \
|
||||||
units/http-daemon.target \
|
units/http-daemon.target \
|
||||||
units/poweroff.target \
|
units/poweroff.target \
|
||||||
units/reboot.target \
|
units/reboot.target \
|
||||||
|
@ -276,7 +280,9 @@ dist_systemunit_DATA = \
|
||||||
units/final.target \
|
units/final.target \
|
||||||
units/umount.target \
|
units/umount.target \
|
||||||
units/sigpwr.target \
|
units/sigpwr.target \
|
||||||
|
units/sleep.target \
|
||||||
units/sockets.target \
|
units/sockets.target \
|
||||||
|
units/suspend.target \
|
||||||
units/swap.target \
|
units/swap.target \
|
||||||
units/systemd-initctl.socket \
|
units/systemd-initctl.socket \
|
||||||
units/systemd-shutdownd.socket \
|
units/systemd-shutdownd.socket \
|
||||||
|
@ -318,12 +324,14 @@ nodist_systemunit_DATA = \
|
||||||
units/systemd-sysctl.service \
|
units/systemd-sysctl.service \
|
||||||
units/halt.service \
|
units/halt.service \
|
||||||
units/emergency.service \
|
units/emergency.service \
|
||||||
|
units/hibernate.service \
|
||||||
units/poweroff.service \
|
units/poweroff.service \
|
||||||
units/reboot.service \
|
units/reboot.service \
|
||||||
units/kexec.service \
|
units/kexec.service \
|
||||||
units/fsck@.service \
|
units/fsck@.service \
|
||||||
units/fsck-root.service \
|
units/fsck-root.service \
|
||||||
units/rescue.service \
|
units/rescue.service \
|
||||||
|
units/suspend.service \
|
||||||
units/user@.service \
|
units/user@.service \
|
||||||
units/systemd-udev.service \
|
units/systemd-udev.service \
|
||||||
units/systemd-udev-trigger.service \
|
units/systemd-udev-trigger.service \
|
||||||
|
@ -1062,6 +1070,13 @@ systemd_sysctl_SOURCES = \
|
||||||
systemd_sysctl_LDADD = \
|
systemd_sysctl_LDADD = \
|
||||||
libsystemd-shared.la
|
libsystemd-shared.la
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
systemd_sleep_SOURCES = \
|
||||||
|
src/sleep/sleep.c
|
||||||
|
|
||||||
|
systemd_sleep_LDADD = \
|
||||||
|
libsystemd-shared.la
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
systemd_fsck_SOURCES = \
|
systemd_fsck_SOURCES = \
|
||||||
src/fsck/fsck.c
|
src/fsck/fsck.c
|
||||||
|
@ -3027,6 +3042,7 @@ systemd-install-data-hook:
|
||||||
$(DESTDIR)$(prefix)/lib/sysctl.d \
|
$(DESTDIR)$(prefix)/lib/sysctl.d \
|
||||||
$(DESTDIR)$(sysconfdir)/sysctl.d \
|
$(DESTDIR)$(sysconfdir)/sysctl.d \
|
||||||
$(DESTDIR)$(systemshutdowndir) \
|
$(DESTDIR)$(systemshutdowndir) \
|
||||||
|
$(DESTDIR)$(systemsleepdir) \
|
||||||
$(DESTDIR)$(systemgeneratordir) \
|
$(DESTDIR)$(systemgeneratordir) \
|
||||||
$(DESTDIR)$(usergeneratordir)
|
$(DESTDIR)$(usergeneratordir)
|
||||||
$(MKDIR_P) -m 0755 \
|
$(MKDIR_P) -m 0755 \
|
||||||
|
|
5
TODO
5
TODO
|
@ -53,9 +53,6 @@ Features:
|
||||||
|
|
||||||
* ExecOnFailure=/usr/bin/foo
|
* ExecOnFailure=/usr/bin/foo
|
||||||
|
|
||||||
* logind: add "mode" flag to poweroff/suspend inhibit logic so that we can
|
|
||||||
support both "inhibit" and "delay" mode.
|
|
||||||
|
|
||||||
* fedora: make sshd and pam_loginuid work in nspawn containers
|
* fedora: make sshd and pam_loginuid work in nspawn containers
|
||||||
|
|
||||||
* fix utmp for console logins in containers
|
* fix utmp for console logins in containers
|
||||||
|
@ -72,8 +69,6 @@ Features:
|
||||||
|
|
||||||
* journald: allow forwarding of log data to specific TTY instea dof console
|
* journald: allow forwarding of log data to specific TTY instea dof console
|
||||||
|
|
||||||
* suspend/hibernate/hybrid support, auto-suspend logic with idle hint
|
|
||||||
|
|
||||||
* add RequiredBy to [Install]
|
* add RequiredBy to [Install]
|
||||||
|
|
||||||
* udev: move to LGPL
|
* udev: move to LGPL
|
||||||
|
|
|
@ -1149,6 +1149,16 @@
|
||||||
<option>--user</option> option) and
|
<option>--user</option> option) and
|
||||||
will fail otherwise.</para></listitem>
|
will fail otherwise.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><command>suspend</command></term>
|
||||||
|
|
||||||
|
<listitem><para>Suspend the system.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><command>hibernate</command></term>
|
||||||
|
|
||||||
|
<listitem><para>Hibernate the system.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
<filename>exit.service</filename>,
|
<filename>exit.service</filename>,
|
||||||
<filename>final.service</filename>,
|
<filename>final.service</filename>,
|
||||||
<filename>graphical.target</filename>,
|
<filename>graphical.target</filename>,
|
||||||
|
<filename>hibernate.target</filename>,
|
||||||
<filename>http-daemon.target</filename>,
|
<filename>http-daemon.target</filename>,
|
||||||
<filename>halt.target</filename>,
|
<filename>halt.target</filename>,
|
||||||
<filename>kbrequest.target</filename>,
|
<filename>kbrequest.target</filename>,
|
||||||
|
@ -80,7 +81,9 @@
|
||||||
<filename>runlevel5.target</filename>,
|
<filename>runlevel5.target</filename>,
|
||||||
<filename>shutdown.target</filename>,
|
<filename>shutdown.target</filename>,
|
||||||
<filename>sigpwr.target</filename>,
|
<filename>sigpwr.target</filename>,
|
||||||
|
<filename>sleep.target</filename>,
|
||||||
<filename>sockets.target</filename>,
|
<filename>sockets.target</filename>,
|
||||||
|
<filename>suspend.target</filename>,
|
||||||
<filename>swap.target</filename>,
|
<filename>swap.target</filename>,
|
||||||
<filename>sysinit.target</filename>,
|
<filename>sysinit.target</filename>,
|
||||||
<filename>syslog.service</filename>,
|
<filename>syslog.service</filename>,
|
||||||
|
@ -239,6 +242,15 @@
|
||||||
during installation.</para>
|
during installation.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><filename>hibernate.target</filename></term>
|
||||||
|
<listitem>
|
||||||
|
<para>A special target unit
|
||||||
|
for hibernating the
|
||||||
|
system. This pulls in
|
||||||
|
<filename>sleep.target</filename>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><filename>http-daemon.target</filename></term>
|
<term><filename>http-daemon.target</filename></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -590,6 +602,19 @@
|
||||||
power fails.</para>
|
power fails.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><filename>sleep.target</filename></term>
|
||||||
|
<listitem>
|
||||||
|
<para>A special target unit
|
||||||
|
that is pulled in by
|
||||||
|
<filename>suspend.target</filename>
|
||||||
|
and
|
||||||
|
<filename>hibernate.target</filename>
|
||||||
|
and may be used to hook units
|
||||||
|
into the sleep state
|
||||||
|
logic.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><filename>sockets.target</filename></term>
|
<term><filename>sockets.target</filename></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -604,6 +629,15 @@
|
||||||
during installation.</para>
|
during installation.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><filename>suspend.target</filename></term>
|
||||||
|
<listitem>
|
||||||
|
<para>A special target unit
|
||||||
|
for suspending the
|
||||||
|
system. This pulls in
|
||||||
|
<filename>sleep.target</filename>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><filename>swap.target</filename></term>
|
<term><filename>swap.target</filename></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
|
|
@ -309,6 +309,7 @@ int main(int argc, char *argv[]) {
|
||||||
unsigned retries;
|
unsigned retries;
|
||||||
bool need_umount = true, need_swapoff = true, need_loop_detach = true, need_dm_detach = true;
|
bool need_umount = true, need_swapoff = true, need_loop_detach = true, need_dm_detach = true;
|
||||||
bool killed_everbody = false, in_container, use_watchdog = false;
|
bool killed_everbody = false, in_container, use_watchdog = false;
|
||||||
|
char *arguments[3];
|
||||||
|
|
||||||
log_parse_environment();
|
log_parse_environment();
|
||||||
log_set_target(LOG_TARGET_CONSOLE); /* syslog will die if not gone yet */
|
log_set_target(LOG_TARGET_CONSOLE); /* syslog will die if not gone yet */
|
||||||
|
@ -442,7 +443,10 @@ int main(int argc, char *argv[]) {
|
||||||
if (retries >= FINALIZE_ATTEMPTS)
|
if (retries >= FINALIZE_ATTEMPTS)
|
||||||
log_error("Too many iterations, giving up.");
|
log_error("Too many iterations, giving up.");
|
||||||
|
|
||||||
execute_directory(SYSTEM_SHUTDOWN_PATH, NULL, NULL);
|
arguments[0] = NULL;
|
||||||
|
arguments[1] = argv[1];
|
||||||
|
arguments[2] = NULL;
|
||||||
|
execute_directory(SYSTEM_SHUTDOWN_PATH, NULL, arguments);
|
||||||
|
|
||||||
/* If we are in a container, just exit, this will kill our
|
/* If we are in a container, just exit, this will kill our
|
||||||
* container for good. */
|
* container for good. */
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
#define SPECIAL_REBOOT_TARGET "reboot.target"
|
#define SPECIAL_REBOOT_TARGET "reboot.target"
|
||||||
#define SPECIAL_KEXEC_TARGET "kexec.target"
|
#define SPECIAL_KEXEC_TARGET "kexec.target"
|
||||||
#define SPECIAL_EXIT_TARGET "exit.target"
|
#define SPECIAL_EXIT_TARGET "exit.target"
|
||||||
|
#define SPECIAL_SUSPEND_TARGET "suspend.target"
|
||||||
|
#define SPECIAL_HIBERNATE_TARGET "hibernate.target"
|
||||||
|
|
||||||
/* Special boot targets */
|
/* Special boot targets */
|
||||||
#define SPECIAL_RESCUE_TARGET "rescue.target"
|
#define SPECIAL_RESCUE_TARGET "rescue.target"
|
||||||
|
|
|
@ -4106,7 +4106,6 @@ void execute_directory(const char *directory, DIR *d, char *argv[]) {
|
||||||
_argv[1] = NULL;
|
_argv[1] = NULL;
|
||||||
argv = _argv;
|
argv = _argv;
|
||||||
} else
|
} else
|
||||||
if (!argv[0])
|
|
||||||
argv[0] = path;
|
argv[0] = path;
|
||||||
|
|
||||||
execv(path, argv);
|
execv(path, argv);
|
||||||
|
|
1
src/sleep/Makefile
Symbolic link
1
src/sleep/Makefile
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../Makefile
|
83
src/sleep/sleep.c
Normal file
83
src/sleep/sleep.c
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||||
|
|
||||||
|
/***
|
||||||
|
This file is part of systemd.
|
||||||
|
|
||||||
|
Copyright 2012 Lennart Poettering
|
||||||
|
|
||||||
|
systemd is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
systemd is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
***/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
const char *verb;
|
||||||
|
char* arguments[4];
|
||||||
|
int r;
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
log_set_target(LOG_TARGET_AUTO);
|
||||||
|
log_parse_environment();
|
||||||
|
log_open();
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
log_error("Invalid number of arguments.");
|
||||||
|
r = -EINVAL;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (streq(argv[1], "suspend"))
|
||||||
|
verb = "mem";
|
||||||
|
else if (streq(argv[1], "hibernate"))
|
||||||
|
verb = "disk";
|
||||||
|
else {
|
||||||
|
log_error("Unknown action '%s'.", argv[1]);
|
||||||
|
r = -EINVAL;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
f = fopen("/sys/power/state", "we");
|
||||||
|
if (!f) {
|
||||||
|
log_error("Failed to open /sys/power/state: %m");
|
||||||
|
r = -errno;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
arguments[0] = NULL;
|
||||||
|
arguments[1] = (char*) "pre";
|
||||||
|
arguments[2] = argv[1];
|
||||||
|
arguments[3] = NULL;
|
||||||
|
execute_directory(SYSTEMD_SLEEP_BINARY_PATH, NULL, arguments);
|
||||||
|
|
||||||
|
fputs(verb, f);
|
||||||
|
fputc('\n', f);
|
||||||
|
fflush(f);
|
||||||
|
|
||||||
|
r = ferror(f) ? -errno : 0;
|
||||||
|
|
||||||
|
arguments[1] = (char*) "post";
|
||||||
|
execute_directory(SYSTEMD_SLEEP_BINARY_PATH, NULL, arguments);
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
finish:
|
||||||
|
|
||||||
|
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||||
|
|
||||||
|
}
|
|
@ -97,6 +97,8 @@ static enum action {
|
||||||
ACTION_REBOOT,
|
ACTION_REBOOT,
|
||||||
ACTION_KEXEC,
|
ACTION_KEXEC,
|
||||||
ACTION_EXIT,
|
ACTION_EXIT,
|
||||||
|
ACTION_SUSPEND,
|
||||||
|
ACTION_HIBERNATE,
|
||||||
ACTION_RUNLEVEL2,
|
ACTION_RUNLEVEL2,
|
||||||
ACTION_RUNLEVEL3,
|
ACTION_RUNLEVEL3,
|
||||||
ACTION_RUNLEVEL4,
|
ACTION_RUNLEVEL4,
|
||||||
|
@ -1605,6 +1607,10 @@ static enum action verb_to_action(const char *verb) {
|
||||||
return ACTION_DEFAULT;
|
return ACTION_DEFAULT;
|
||||||
else if (streq(verb, "exit"))
|
else if (streq(verb, "exit"))
|
||||||
return ACTION_EXIT;
|
return ACTION_EXIT;
|
||||||
|
else if (streq(verb, "suspend"))
|
||||||
|
return ACTION_SUSPEND;
|
||||||
|
else if (streq(verb, "hibernate"))
|
||||||
|
return ACTION_HIBERNATE;
|
||||||
else
|
else
|
||||||
return ACTION_INVALID;
|
return ACTION_INVALID;
|
||||||
}
|
}
|
||||||
|
@ -1623,7 +1629,9 @@ static int start_unit(DBusConnection *bus, char **args) {
|
||||||
[ACTION_RESCUE] = SPECIAL_RESCUE_TARGET,
|
[ACTION_RESCUE] = SPECIAL_RESCUE_TARGET,
|
||||||
[ACTION_EMERGENCY] = SPECIAL_EMERGENCY_TARGET,
|
[ACTION_EMERGENCY] = SPECIAL_EMERGENCY_TARGET,
|
||||||
[ACTION_DEFAULT] = SPECIAL_DEFAULT_TARGET,
|
[ACTION_DEFAULT] = SPECIAL_DEFAULT_TARGET,
|
||||||
[ACTION_EXIT] = SPECIAL_EXIT_TARGET
|
[ACTION_EXIT] = SPECIAL_EXIT_TARGET,
|
||||||
|
[ACTION_SUSPEND] = SPECIAL_SUSPEND_TARGET,
|
||||||
|
[ACTION_HIBERNATE] = SPECIAL_HIBERNATE_TARGET
|
||||||
};
|
};
|
||||||
|
|
||||||
int r, ret = 0;
|
int r, ret = 0;
|
||||||
|
@ -4201,7 +4209,9 @@ static int systemctl_help(void) {
|
||||||
" poweroff Shut down and power-off the system\n"
|
" poweroff Shut down and power-off the system\n"
|
||||||
" reboot Shut down and reboot the system\n"
|
" reboot Shut down and reboot the system\n"
|
||||||
" kexec Shut down and reboot the system with kexec\n"
|
" kexec Shut down and reboot the system with kexec\n"
|
||||||
" exit Ask for user instance termination\n",
|
" exit Request user instance exit\n"
|
||||||
|
" suspend Suspend the system\n"
|
||||||
|
" hibernate Hibernate the system\n",
|
||||||
program_invocation_short_name);
|
program_invocation_short_name);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5135,6 +5145,8 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
|
||||||
{ "poweroff", EQUAL, 1, start_special },
|
{ "poweroff", EQUAL, 1, start_special },
|
||||||
{ "reboot", EQUAL, 1, start_special },
|
{ "reboot", EQUAL, 1, start_special },
|
||||||
{ "kexec", EQUAL, 1, start_special },
|
{ "kexec", EQUAL, 1, start_special },
|
||||||
|
{ "suspend", EQUAL, 1, start_special },
|
||||||
|
{ "hibernate", EQUAL, 1, start_special },
|
||||||
{ "default", EQUAL, 1, start_special },
|
{ "default", EQUAL, 1, start_special },
|
||||||
{ "rescue", EQUAL, 1, start_special },
|
{ "rescue", EQUAL, 1, start_special },
|
||||||
{ "emergency", EQUAL, 1, start_special },
|
{ "emergency", EQUAL, 1, start_special },
|
||||||
|
|
2
units/.gitignore
vendored
2
units/.gitignore
vendored
|
@ -1,3 +1,5 @@
|
||||||
|
/hibernate.service
|
||||||
|
/suspend.service
|
||||||
/console-getty.service
|
/console-getty.service
|
||||||
/systemd-journald.service
|
/systemd-journald.service
|
||||||
user@.service
|
user@.service
|
||||||
|
|
16
units/hibernate.service.in
Normal file
16
units/hibernate.service.in
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Hibernate
|
||||||
|
DefaultDependencies=no
|
||||||
|
Requires=sleep.target
|
||||||
|
After=sleep.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=@rootlibexecdir@/systemd-sleep hibernate
|
14
units/hibernate.target
Normal file
14
units/hibernate.target
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Hibernate
|
||||||
|
DefaultDependencies=no
|
||||||
|
BindTo=hibernate.service
|
||||||
|
After=hibernate.service
|
13
units/sleep.target
Normal file
13
units/sleep.target
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Sleep
|
||||||
|
DefaultDependencies=no
|
||||||
|
RefuseManualStart=yes
|
16
units/suspend.service.in
Normal file
16
units/suspend.service.in
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Suspend
|
||||||
|
DefaultDependencies=no
|
||||||
|
Requires=sleep.target
|
||||||
|
After=sleep.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=@rootlibexecdir@/systemd-sleep suspend
|
14
units/suspend.target
Normal file
14
units/suspend.target
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# See systemd.special(7) for details
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Suspend
|
||||||
|
DefaultDependencies=no
|
||||||
|
BindTo=suspend.service
|
||||||
|
After=suspend.service
|
Loading…
Reference in a new issue