1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-31 14:50:15 +03:00

Merge pull request #3987 from keszybz/console-color-setup

Rework console color setup
This commit is contained in:
Lennart Poettering 2016-08-19 19:36:09 +02:00 committed by GitHub
commit 16d901e251
3 changed files with 27 additions and 16 deletions

View File

@ -837,8 +837,10 @@
<varlistentry>
<term><varname>$SYSTEMD_COLORS</varname></term>
<listitem><para>Controls whether colorized output should be generated.
</para></listitem>
<listitem><para>The value must be a boolean. Controls whether colorized output should be
generated. This can be specified to override the decision that <command>systemd</command>
makes based on <varname>$TERM</varname> and what the console is connected to.</para>
</listitem>
</varlistentry>
<varlistentry>
@ -849,7 +851,7 @@
<listitem><para>Set by systemd for supervised processes during
socket-based activation. See
<citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for more information. </para></listitem>
for more information.</para></listitem>
</varlistentry>
<varlistentry>
@ -858,7 +860,7 @@
<listitem><para>Set by systemd for supervised processes for
status and start-up completion notification. See
<citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for more information. </para></listitem>
for more information.</para></listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@ -39,6 +39,7 @@
#include <unistd.h>
#include "alloc-util.h"
#include "env-util.h"
#include "fd-util.h"
#include "fileio.h"
#include "fs-util.h"
@ -1191,12 +1192,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,15 +1202,25 @@ 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;
if (_unlikely_(enabled < 0)) {
const char *colors;
int val;
colors = getenv("SYSTEMD_COLORS");
if (colors)
enabled = parse_boolean(colors) != 0;
val = getenv_bool("SYSTEMD_COLORS");
if (val >= 0)
enabled = val;
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();
}

View File

@ -1505,7 +1505,8 @@ int main(int argc, char *argv[]) {
if (getpid() == 1) {
/* Don't limit the core dump size, so that coredump handlers such as systemd-coredump (which honour the limit)
* will process core dumps for system services by default. */
(void) setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY));
if (setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY)) < 0)
log_warning_errno(errno, "Failed to set RLIMIT_CORE: %m");
/* But at the same time, turn off the core_pattern logic by default, so that no coredumps are stored
* until the systemd-coredump tool is enabled via sysctl. */
@ -2013,9 +2014,6 @@ finish:
log_error_errno(r, "Failed to switch root, trying to continue: %m");
}
/* Reopen the console */
(void) make_console_stdio();
args_size = MAX(6, argc+1);
args = newa(const char*, args_size);
@ -2063,6 +2061,9 @@ finish:
arg_serialization = safe_fclose(arg_serialization);
fds = fdset_free(fds);
/* Reopen the console */
(void) make_console_stdio();
for (j = 1, i = 1; j < (unsigned) argc; j++)
args[i++] = argv[j];
args[i++] = NULL;