1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-25 18:50:18 +03:00

kerne-command-line: introduce option 'systemd.restore_state'

When set to 0 this will stop tools like the backlight and rfkill tools to
restore state from previous boot. This is useful in case the stored state
is bogus to the extent that it is preventing you from resetting it (e.g.,
the backlight settings cause the screen to be off on boot on a system where
the backlight can not be adjusted directly from the keyboard).
This commit is contained in:
Tom Gundersen 2013-10-19 00:46:07 +02:00
parent efc815a13d
commit 295edddf5a
7 changed files with 86 additions and 2 deletions

View File

@ -98,6 +98,21 @@
</listitem>
</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>
@ -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>

View File

@ -61,6 +61,26 @@
<filename>/var/lib/systemd/backlight/</filename>.</para>
</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>

View File

@ -61,6 +61,26 @@
<filename>/var/lib/systemd/rfkill/</filename>.</para>
</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>

View File

@ -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))

View File

@ -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);

View File

@ -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;
}

View File

@ -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.