]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
getty-generator: add kernel cmdline and env vars to disable it
authorLuca Boccassi <luca.boccassi@microsoft.com>
Wed, 17 Nov 2021 17:28:54 +0000 (17:28 +0000)
committerLuca Boccassi <luca.boccassi@gmail.com>
Thu, 18 Nov 2021 10:38:48 +0000 (10:38 +0000)
systemd.getty_auto/rd.systemd.getty_auto/SYSTEMD_GETTY_AUTO can be used
to disable the generator. Enabled by default.

man/systemd-getty-generator.xml
src/getty-generator/getty-generator.c

index 507a001ca592e2c03ce739c657995437eddcb847..aac2e95f3a40d2ae422b4cb5a1166d8d45f5162b 100644 (file)
     Elsewhere)</ulink>.</para>
   </refsect1>
 
+  <refsect1>
+    <title>Kernel Command Line</title>
+
+    <para><filename>systemd-getty-generator</filename> understands the following
+    <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+    parameters:</para>
+
+    <variablelist class='kernel-commandline-options'>
+      <varlistentry>
+        <term><varname>systemd.getty_auto=</varname></term>
+
+        <listitem><para>this options take an optional boolean argument, and default to yes.
+        The generator is enabled by default, and a false value may be used to disable it.
+        </para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Environment</title>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$SYSTEMD_GETTY_AUTO</varname></term>
+
+        <listitem><para>This variable takes an optional boolean argument, and default to yes.
+        The generator is enabled by default, and a false value may be used to disable it.
+        </para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
   <refsect1>
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>agetty</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
index b4d4952f9992ef692d3cbef8e2551aea36541648..59bdfc496b6b45e1a5cb0b0572d9dee908b67c27 100644 (file)
 #include "generator.h"
 #include "log.h"
 #include "mkdir-label.h"
+#include "parse-util.h"
 #include "path-util.h"
 #include "process-util.h"
+#include "proc-cmdline.h"
 #include "strv.h"
 #include "terminal-util.h"
 #include "unit-name.h"
@@ -20,6 +22,7 @@
 #include "virt.h"
 
 static const char *arg_dest = NULL;
+static bool arg_enabled = true;
 
 static int add_symlink(const char *fservice, const char *tservice) {
         char *from, *to;
@@ -139,11 +142,48 @@ static int run_container(void) {
         }
 }
 
+static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
+        int r;
+
+        assert(key);
+
+        if (proc_cmdline_key_streq(key, "systemd.getty_auto")) {
+                r = value ? parse_boolean(value) : 1;
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse getty_auto switch \"%s\", ignoring: %m", value);
+                else
+                        arg_enabled = r;
+        }
+
+        return 0;
+}
+
 static int run(const char *dest, const char *dest_early, const char *dest_late) {
+        _cleanup_free_ char *getty_auto = NULL;
         int r;
 
         assert_se(arg_dest = dest);
 
+        r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
+        if (r < 0)
+                log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
+
+        r = getenv_for_pid(1, "SYSTEMD_GETTY_AUTO", &getty_auto);
+        if (r < 0)
+                log_warning_errno(r, "Failed to parse $SYSTEMD_GETTY_AUTO environment variable, ignoring: %m");
+        else if (r > 0) {
+                r = parse_boolean(getty_auto);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to parse $SYSTEMD_GETTY_AUTO value \"%s\", ignoring: %m", getty_auto);
+                else
+                        arg_enabled = r;
+        }
+
+        if (!arg_enabled) {
+                log_debug("Disabled, exiting.");
+                return 0;
+        }
+
         if (detect_container() > 0)
                 /* Add console shell and look at $container_ttys, but don't do add any
                  * further magic if we are in a container. */