Blob Blame History Raw
From ca9cb19a170921a17fa175ed68b8eb36f05ec4ed Mon Sep 17 00:00:00 2001
From: g0tar <gotar@polanet.pl>
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);