diff options
-rw-r--r-- | man/kernel-command-line.xml | 17 | ||||
-rw-r--r-- | man/systemd-backlight@.service.xml | 20 | ||||
-rw-r--r-- | man/systemd-rfkill@.service.xml | 20 | ||||
-rw-r--r-- | src/backlight/backlight.c | 3 | ||||
-rw-r--r-- | src/rfkill/rfkill.c | 3 | ||||
-rw-r--r-- | src/shared/util.c | 23 | ||||
-rw-r--r-- | src/shared/util.h | 2 |
7 files changed, 86 insertions, 2 deletions
diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml index abe68e5496..612dc28cd5 100644 --- a/man/kernel-command-line.xml +++ b/man/kernel-command-line.xml @@ -99,6 +99,21 @@ </varlistentry> <varlistentry> + <term><varname>systemd.restore_state=</varname></term> + <listitem> + <para>Parameter understood by + several system tools to control + whether or not they should restore + system state from the previous boot. + For details, see + <citerefentry><refentrytitle>systemd-backlight@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> + and + <citerefentry><refentrytitle>systemd-rfkill@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>. + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><varname>quiet</varname></term> <listitem> <para>Parameter understood by @@ -307,6 +322,8 @@ <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> + <citerefentry><refentrytitle>systemd-backlight@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> + <citerefentry><refentrytitle>systemd-rfkill@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> </para> </refsect1> diff --git a/man/systemd-backlight@.service.xml b/man/systemd-backlight@.service.xml index 6d26d4b2ed..672fd05eb3 100644 --- a/man/systemd-backlight@.service.xml +++ b/man/systemd-backlight@.service.xml @@ -62,6 +62,26 @@ </refsect1> <refsect1> + <title>Kernel Command Line</title> + + <para><filename>systemd-backlight</filename> understands + the following kernel command line parameter:</para> + + <variablelist class='kernel-commandline-options'> + <varlistentry> + <term><varname>systemd.restore_state=</varname></term> + + <listitem><para>Takes a boolean + argument. Defaults to + <literal>1</literal>. If + <literal>0</literal>, does not restore + the backlight settings on boot. However, + settings will still be stored on shutdown. + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> <title>See Also</title> <para> <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> diff --git a/man/systemd-rfkill@.service.xml b/man/systemd-rfkill@.service.xml index b274cb818b..9ae834d5dd 100644 --- a/man/systemd-rfkill@.service.xml +++ b/man/systemd-rfkill@.service.xml @@ -62,6 +62,26 @@ </refsect1> <refsect1> + <title>Kernel Command Line</title> + + <para><filename>systemd-rfkill</filename> understands + the following kernel command line parameter:</para> + + <variablelist class='kernel-commandline-options'> + <varlistentry> + <term><varname>systemd.restore_state=</varname></term> + + <listitem><para>Takes a boolean + argument. Defaults to + <literal>1</literal>. If + <literal>0</literal>, does not restore + the rfkill settings on boot. However, + settings will still be stored on shutdown. + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> <title>See Also</title> <para> <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c index e8cdad61ed..6c00b00d82 100644 --- a/src/backlight/backlight.c +++ b/src/backlight/backlight.c @@ -24,6 +24,7 @@ #include "fileio.h" #include "libudev.h" #include "udev-util.h" +#include "util.h" static struct udev_device *find_pci_or_platform_parent(struct udev_device *device) { struct udev_device *parent; @@ -290,7 +291,7 @@ int main(int argc, char *argv[]) { * device probing should be complete), so that the validity * check at boot time doesn't have to be reliable. */ - if (streq(argv[1], "load")) { + if (streq(argv[1], "load") && restore_state()) { _cleanup_free_ char *value = NULL; if (!validate_device(udev, device)) diff --git a/src/rfkill/rfkill.c b/src/rfkill/rfkill.c index 812cf408fb..b814e5c5fc 100644 --- a/src/rfkill/rfkill.c +++ b/src/rfkill/rfkill.c @@ -24,6 +24,7 @@ #include "fileio.h" #include "libudev.h" #include "udev-util.h" +#include "utils.h" int main(int argc, char *argv[]) { _cleanup_udev_unref_ struct udev *udev = NULL; @@ -95,7 +96,7 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - if (streq(argv[1], "load")) { + if (streq(argv[1], "load") && restore_state()) { _cleanup_free_ char *value = NULL; r = read_one_line_file(saved, &value); diff --git a/src/shared/util.c b/src/shared/util.c index 1822770304..d086fac7f8 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -76,6 +76,7 @@ #include "device-nodes.h" #include "utf8.h" #include "gunicode.h" +#include "virt.h" int saved_argc = 0; char **saved_argv = NULL; @@ -5990,3 +5991,25 @@ int split_pair(const char *s, const char *sep, char **l, char **r) { return 0; } + +bool restore_state(void) { + _cleanup_free_ char *line; + char *w, *state; + int r; + size_t l; + + if (detect_container(NULL) > 0) + return true; + + r = read_one_line_file("/proc/cmdline", &line); + if (r < 0) { + log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); + return 0; + } + + FOREACH_WORD_QUOTED(w, l, line, state) + if (strneq(w, "systemd.restore_state=0", l)) + return false; + + return true; +} diff --git a/src/shared/util.h b/src/shared/util.h index 63cb4ac636..dc35b4d980 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -765,6 +765,8 @@ void parse_user_at_host(char *arg, char **user, char **host); int split_pair(const char *s, const char *sep, char **l, char **r); +bool restore_state(void); + /** * Normal qsort requires base to be nonnull. Here were require * that only if nmemb > 0. |