]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
terminal reset should honour default_utf8 kernel setting (#6606)
authorg0tar <gotar@polanet.pl>
Wed, 30 Aug 2017 08:00:44 +0000 (10:00 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 30 Aug 2017 08:00:44 +0000 (10:00 +0200)
terminal reset should honour default_utf8 kernel setting

src/basic/terminal-util.c
src/login/logind-session.c

index d665a181bc938a4bd967ae144beac334c8b11ff8..0a1638bd0c6fd5da014afc0d7c405c29fc4c421b 100644 (file)
@@ -245,6 +245,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 */
@@ -262,8 +264,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;
index 3778bb7d7057d3ec1bc7323d11b9ae67bdf186b9..c345b1ca44bc2d8630ecc435aea25fb863e79986 100644 (file)
@@ -1156,10 +1156,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);