From ca9cb19a170921a17fa175ed68b8eb36f05ec4ed Mon Sep 17 00:00:00 2001 From: g0tar Date: Wed, 30 Aug 2017 10:00:44 +0200 Subject: [PATCH] terminal reset should honour default_utf8 kernel setting (#6606) terminal reset should honour default_utf8 kernel setting (cherry picked from commit 73e669e0fde6b9aabec48327d95c875a70555d34) --- src/basic/terminal-util.c | 10 ++++++++-- src/login/logind-session.c | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 9a8ef825c5..2b6aa6400a 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -244,6 +244,8 @@ int ask_string(char **ret, const char *text, ...) { int reset_terminal_fd(int fd, bool switch_to_text) { struct termios termios; + _cleanup_free_ char *utf8 = NULL; + int kb; int r = 0; /* Set terminal to some sane defaults */ @@ -261,8 +263,12 @@ int reset_terminal_fd(int fd, bool switch_to_text) { if (switch_to_text) (void) ioctl(fd, KDSETMODE, KD_TEXT); - /* Enable console unicode mode */ - (void) ioctl(fd, KDSKBMODE, K_UNICODE); + /* Set default keyboard mode */ + if (read_one_line_file("/sys/module/vt/parameters/default_utf8", &utf8) >= 0 && parse_boolean(utf8) == 0) + kb = K_XLATE; + else + kb = K_UNICODE; + (void) ioctl(fd, KDSKBMODE, kb); if (tcgetattr(fd, &termios) < 0) { r = -errno; diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 42dfecaffb..66c27d4fb4 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -1155,10 +1155,10 @@ void session_restore_vt(Session *s) { (void) ioctl(vt, KDSETMODE, KD_TEXT); - if (read_one_line_file("/sys/module/vt/parameters/default_utf8", &utf8) >= 0 && *utf8 == '1') - kb = K_UNICODE; - else + if (read_one_line_file("/sys/module/vt/parameters/default_utf8", &utf8) >= 0 && parse_boolean(utf8) == 0) kb = K_XLATE; + else + kb = K_UNICODE; (void) ioctl(vt, KDSKBMODE, kb);