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