summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/kernel-command-line.xml17
-rw-r--r--man/systemd-backlight@.service.xml20
-rw-r--r--man/systemd-rfkill@.service.xml20
-rw-r--r--src/backlight/backlight.c3
-rw-r--r--src/rfkill/rfkill.c3
-rw-r--r--src/shared/util.c23
-rw-r--r--src/shared/util.h2
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.