63 lines
2.2 KiB
Diff
63 lines
2.2 KiB
Diff
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();
|
|
}
|