Skip to content

Commit

Permalink
nspawn, vmspawn, run0: add env var for turning off background tinting
Browse files Browse the repository at this point in the history
Some people are just sad, sad lost souls who don't like even the tiniest
ray of color in their life. Let's add an env var knob for allowing them
to turn the background tinting off, to drive the last bit of color from
their life so that they can stay in their grey grey life.
  • Loading branch information
poettering authored and bluca committed May 2, 2024
1 parent 6162828 commit d4ffb37
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 3 deletions.
8 changes: 8 additions & 0 deletions docs/ENVIRONMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -705,3 +705,11 @@ Tools using the Varlink protocol (such as `varlinkctl`) or sd-bus (such as
placed in a trusted disk image directory (see above), or if suitable polkit
authentication was acquired. See `systemd.image-policy(7)` for the valid
syntax for image policy strings.

`systemd-run`, `run0`, `systemd-nspawn`, `systemd-vmspawn`:

* `$SYSTEMD_TINT_BACKGROUND` – Takes a boolean. When false the automatic
tinting of the background for containers, VMs, and interactive `systemd-run`
and `run0` invocations is turned off. Note that this environment variable has
no effect if the background color is explicitly selected via the relevant
`--background=` switch of the tool.
2 changes: 1 addition & 1 deletion src/nspawn/nspawn.c
Original file line number Diff line number Diff line change
Expand Up @@ -5556,7 +5556,7 @@ static int run_container(
arg_console_width,
arg_console_height);

if (!arg_background) {
if (!arg_background && shall_tint_background()) {
_cleanup_free_ char *bg = NULL;

r = terminal_tint_color(220 /* blue */, &bg);
Expand Down
2 changes: 1 addition & 1 deletion src/run/run.c
Original file line number Diff line number Diff line change
Expand Up @@ -963,7 +963,7 @@ static int parse_argv_sudo_mode(int argc, char *argv[]) {
if (strv_extend(&arg_property, "PAMName=systemd-run0") < 0)
return log_oom();

if (!arg_background && arg_stdio == ARG_STDIO_PTY) {
if (!arg_background && arg_stdio == ARG_STDIO_PTY && shall_tint_background()) {
double hue;

if (privileged_execution())
Expand Down
15 changes: 15 additions & 0 deletions src/shared/pretty-print.c
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,21 @@ int terminal_tint_color(double hue, char **ret) {
return 0;
}

bool shall_tint_background(void) {
static int cache = -1;

if (cache >= 0)
return cache;

cache = getenv_bool("SYSTEMD_TINT_BACKGROUND");
if (cache == -ENXIO)
return (cache = true);
if (cache < 0)
log_debug_errno(cache, "Failed to parse $SYSTEMD_TINT_BACKGROUND, leaving background tinting enabled: %m");

return cache != 0;
}

void draw_progress_bar(const char *prefix, double percentage) {

fputc('\r', stderr);
Expand Down
2 changes: 2 additions & 0 deletions src/shared/pretty-print.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,7 @@ static inline const char *green_check_mark_internal(char buffer[static GREEN_CHE

int terminal_tint_color(double hue, char **ret);

bool shall_tint_background(void);

void draw_progress_bar(const char *prefix, double percentage);
void clear_progress_bar(const char *prefix);
2 changes: 1 addition & 1 deletion src/vmspawn/vmspawn.c
Original file line number Diff line number Diff line change
Expand Up @@ -1977,7 +1977,7 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
if (r < 0)
return log_error_errno(r, "Failed to create PTY forwarder: %m");

if (!arg_background) {
if (!arg_background && shall_tint_background()) {
_cleanup_free_ char *bg = NULL;

r = terminal_tint_color(130 /* green */, &bg);
Expand Down

0 comments on commit d4ffb37

Please sign in to comment.