terminal-util: explicitly reset cursor

Apparently there are terminals where our usual reset is not enough to
turn the cursor back on. Hence do so explicitly.

Fixes: #22168
This commit is contained in:
Lennart Poettering
2025-05-15 18:46:06 +02:00
committed by Yu Watanabe
parent 96b9d4162f
commit b177095bfa

View File

@@ -55,6 +55,11 @@
#include "user-util.h"
#include "utf8.h"
#define ANSI_RESET_CURSOR \
"\033?25h" /* turn on cursor */ \
"\033?12l" /* reset cursor blinking */ \
"\033 1q" /* reset cursor style */
static volatile unsigned cached_columns = 0;
static volatile unsigned cached_lines = 0;
@@ -856,6 +861,7 @@ int vt_disallocate(const char *tty_path) {
return fd2;
return loop_write_full(fd2,
ANSI_RESET_CURSOR
"\033[r" /* clear scrolling region */
"\033[H" /* move home */
"\033[3J" /* clear screen including scrollback, requires Linux 2.6.40 */
@@ -972,6 +978,7 @@ static int terminal_reset_ansi_seq(int fd) {
return log_debug_errno(r, "Failed to set terminal to non-blocking mode: %m");
k = loop_write_full(fd,
ANSI_RESET_CURSOR
"\033[!p" /* soft terminal reset */
"\033]104\007" /* reset colors */
"\033[?7h" /* enable line-wrapping */