Zbigniew Jędrzejewski-Szmek 696e2f
From 0da0a63dba426aa351d733292df6ec41603b39b6 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 696e2f
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 696e2f
Date: Thu, 18 Aug 2016 22:03:56 -0400
Zbigniew Jędrzejewski-Szmek 696e2f
Subject: [PATCH] systemd: ignore lack of tty when checking whether colors
Zbigniew Jędrzejewski-Szmek 696e2f
 should be enabled
Zbigniew Jędrzejewski-Szmek 696e2f
Zbigniew Jędrzejewski-Szmek 696e2f
When started by the kernel, we are connected to the console, and we'll set TERM
Zbigniew Jędrzejewski-Szmek 696e2f
properly to some value in fixup_environment(). We'll then enable or disable
Zbigniew Jędrzejewski-Szmek 696e2f
colors based on the value of $SYSTEMD_COLORS and $TERM.
Zbigniew Jędrzejewski-Szmek 696e2f
Zbigniew Jędrzejewski-Szmek 696e2f
When reexecuting, TERM should be already set, so we can use this value.
Zbigniew Jędrzejewski-Szmek 696e2f
Effectively, behaviour is the same as before affd7ed1a was reverted, but instead
Zbigniew Jędrzejewski-Szmek 696e2f
of reopening the console before configuring color output, we just ignore what
Zbigniew Jędrzejewski-Szmek 696e2f
stdout is connected to and decide based on the variables only.
Zbigniew Jędrzejewski-Szmek 696e2f
Zbigniew Jędrzejewski-Szmek 696e2f
(cherry picked from commit 158fbf7661912adf0f42c93155499119811dde82)
Zbigniew Jędrzejewski-Szmek 696e2f
---
Zbigniew Jędrzejewski-Szmek 696e2f
 src/basic/terminal-util.c | 15 +++++++++++----
Zbigniew Jędrzejewski-Szmek 696e2f
 1 file changed, 11 insertions(+), 4 deletions(-)
Zbigniew Jędrzejewski-Szmek 696e2f
Zbigniew Jędrzejewski-Szmek 696e2f
diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c
Zbigniew Jędrzejewski-Szmek 696e2f
index df56d85317..47d31ad4d7 100644
Zbigniew Jędrzejewski-Szmek 696e2f
--- a/src/basic/terminal-util.c
Zbigniew Jędrzejewski-Szmek 696e2f
+++ b/src/basic/terminal-util.c
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1191,12 +1191,9 @@ int open_terminal_in_namespace(pid_t pid, const char *name, int mode) {
Zbigniew Jędrzejewski-Szmek 696e2f
         return receive_one_fd(pair[0], 0);
Zbigniew Jędrzejewski-Szmek 696e2f
 }
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-bool terminal_is_dumb(void) {
Zbigniew Jędrzejewski-Szmek 696e2f
+static bool getenv_terminal_is_dumb(void) {
Zbigniew Jędrzejewski-Szmek 696e2f
         const char *e;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-        if (!on_tty())
Zbigniew Jędrzejewski-Szmek 696e2f
-                return true;
Zbigniew Jędrzejewski-Szmek 696e2f
-
Zbigniew Jędrzejewski-Szmek 696e2f
         e = getenv("TERM");
Zbigniew Jędrzejewski-Szmek 696e2f
         if (!e)
Zbigniew Jędrzejewski-Szmek 696e2f
                 return true;
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1204,6 +1201,13 @@ bool terminal_is_dumb(void) {
Zbigniew Jędrzejewski-Szmek 696e2f
         return streq(e, "dumb");
Zbigniew Jędrzejewski-Szmek 696e2f
 }
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
+bool terminal_is_dumb(void) {
Zbigniew Jędrzejewski-Szmek 696e2f
+        if (!on_tty())
Zbigniew Jędrzejewski-Szmek 696e2f
+                return true;
Zbigniew Jędrzejewski-Szmek 696e2f
+
Zbigniew Jędrzejewski-Szmek 696e2f
+        return getenv_terminal_is_dumb();
Zbigniew Jędrzejewski-Szmek 696e2f
+}
Zbigniew Jędrzejewski-Szmek 696e2f
+
Zbigniew Jędrzejewski-Szmek 696e2f
 bool colors_enabled(void) {
Zbigniew Jędrzejewski-Szmek 696e2f
         static int enabled = -1;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1213,6 +1217,9 @@ bool colors_enabled(void) {
Zbigniew Jędrzejewski-Szmek 696e2f
                 colors = getenv("SYSTEMD_COLORS");
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (colors)
Zbigniew Jędrzejewski-Szmek 696e2f
                         enabled = parse_boolean(colors) != 0;
Zbigniew Jędrzejewski-Szmek 696e2f
+                else if (getpid() == 1)
Zbigniew Jędrzejewski-Szmek 696e2f
+                        /* PID1 outputs to the console without holding it open all the time */
Zbigniew Jędrzejewski-Szmek 696e2f
+                        enabled = !getenv_terminal_is_dumb();
Zbigniew Jędrzejewski-Szmek 696e2f
                 else
Zbigniew Jędrzejewski-Szmek 696e2f
                         enabled = !terminal_is_dumb();
Zbigniew Jędrzejewski-Szmek 696e2f
         }