return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
"Shell only supported on local machines.");
- /* Pass $TERM & Co. to shell session, if not explicitly specified. */
- FOREACH_STRING(v, "TERM=", "COLORTERM=", "NO_COLOR=") {
- if (strv_find_prefix(arg_setenv, v))
- continue;
+ if (terminal_is_dumb()) {
+ /* Set TERM=dumb if we are running on a dumb terminal or with a pipe.
+ * Otherwise, we will get unwanted OSC sequences. */
+ if (!strv_find_prefix(arg_setenv, "TERM="))
+ if (strv_extend(&arg_setenv, "TERM=dumb") < 0)
+ return log_oom();
+ } else
+ /* Pass $TERM & Co. to shell session, if not explicitly specified. */
+ FOREACH_STRING(v, "TERM=", "COLORTERM=", "NO_COLOR=") {
+ if (strv_find_prefix(arg_setenv, v))
+ continue;
- const char *t = strv_find_prefix(environ, v);
- if (!t)
- continue;
+ const char *t = strv_find_prefix(environ, v);
+ if (!t)
+ continue;
- if (strv_extend(&arg_setenv, t) < 0)
- return log_oom();
- }
+ if (strv_extend(&arg_setenv, t) < 0)
+ return log_oom();
+ }
(void) polkit_agent_open_if_enabled(arg_transport, arg_ask_password);