瀏覽代碼

add CONFIG_VT_UNICODE

As of now, the kernel defaults to non-unicode and XLATE for the keyboard.
We've been changing this in Fedora, but that requires patching the defaults
in the kernel.

The attached introduces CONFIG_VT_UNICODE, which sets the console in
unicode mode by default on boot, including both the virtual terminal and
the keyboard driver.

Signed-off-by: Bill Nottingham <notting@redhat.com>
Cc: Samuel Thibault <samuel.thibault@ens-lyon.org>
Cc: Dmitry Torokhov <dtor@mail.ru>
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Bill Nottingham 17 年之前
父節點
當前提交
2e8ecb9db0
共有 6 個文件被更改,包括 27 次插入5 次删除
  1. 17 0
      drivers/char/Kconfig
  2. 1 1
      drivers/char/keyboard.c
  3. 2 2
      drivers/char/sysrq.c
  4. 5 1
      drivers/char/vt.c
  5. 1 1
      drivers/char/vt_ioctl.c
  6. 1 0
      include/linux/vt_kern.h

+ 17 - 0
drivers/char/Kconfig

@@ -36,6 +36,23 @@ config VT
 	  If unsure, say Y, or else you won't be able to do much with your new
 	  If unsure, say Y, or else you won't be able to do much with your new
 	  shiny Linux system :-)
 	  shiny Linux system :-)
 
 
+config VT_UNICODE
+	bool "Virtual console is Unicode by default"
+	depends on VT
+	default n
+	---help---
+	  If you say Y here, the virtual terminal will be in UTF-8 by default,
+	  and the keyboard will run in unicode mode.
+
+	  If you say N here, the virtual terminal will not be in UTF-8 by
+	  default, and the keyboard will run in XLATE mode.
+
+	  This can also be changed by passing 'default_utf8=<0|1>' on the
+	  kernel command line.
+
+	  Historically, the kernel has defaulted to non-UTF8 and XLATE mode.
+	  If unsure, say N here.
+
 config VT_CONSOLE
 config VT_CONSOLE
 	bool "Support for console on virtual terminal" if EMBEDDED
 	bool "Support for console on virtual terminal" if EMBEDDED
 	depends on VT
 	depends on VT

+ 1 - 1
drivers/char/keyboard.c

@@ -1381,7 +1381,7 @@ int __init kbd_init(void)
 		kbd_table[i].lockstate = KBD_DEFLOCK;
 		kbd_table[i].lockstate = KBD_DEFLOCK;
 		kbd_table[i].slockstate = 0;
 		kbd_table[i].slockstate = 0;
 		kbd_table[i].modeflags = KBD_DEFMODE;
 		kbd_table[i].modeflags = KBD_DEFMODE;
-		kbd_table[i].kbdmode = VC_XLATE;
+		kbd_table[i].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
 	}
 	}
 
 
 	error = input_register_handler(&kbd_handler);
 	error = input_register_handler(&kbd_handler);

+ 2 - 2
drivers/char/sysrq.c

@@ -108,12 +108,12 @@ static void sysrq_handle_unraw(int key, struct tty_struct *tty)
 	struct kbd_struct *kbd = &kbd_table[fg_console];
 	struct kbd_struct *kbd = &kbd_table[fg_console];
 
 
 	if (kbd)
 	if (kbd)
-		kbd->kbdmode = VC_XLATE;
+		kbd->kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
 }
 }
 static struct sysrq_key_op sysrq_unraw_op = {
 static struct sysrq_key_op sysrq_unraw_op = {
 	.handler	= sysrq_handle_unraw,
 	.handler	= sysrq_handle_unraw,
 	.help_msg	= "unRaw",
 	.help_msg	= "unRaw",
-	.action_msg	= "Keyboard mode set to XLATE",
+	.action_msg	= "Keyboard mode set to system default",
 	.enable_mask	= SYSRQ_ENABLE_KEYBOARD,
 	.enable_mask	= SYSRQ_ENABLE_KEYBOARD,
 };
 };
 #else
 #else

+ 5 - 1
drivers/char/vt.c

@@ -158,7 +158,11 @@ static void blank_screen_t(unsigned long dummy);
 static void set_palette(struct vc_data *vc);
 static void set_palette(struct vc_data *vc);
 
 
 static int printable;		/* Is console ready for printing? */
 static int printable;		/* Is console ready for printing? */
-static int default_utf8;
+#ifdef CONFIG_VT_UNICODE
+int default_utf8 = 1;
+#else
+int default_utf8;
+#endif
 module_param(default_utf8, int, S_IRUGO | S_IWUSR);
 module_param(default_utf8, int, S_IRUGO | S_IWUSR);
 
 
 /*
 /*

+ 1 - 1
drivers/char/vt_ioctl.c

@@ -1125,7 +1125,7 @@ int vt_waitactive(int vt)
 void reset_vc(struct vc_data *vc)
 void reset_vc(struct vc_data *vc)
 {
 {
 	vc->vc_mode = KD_TEXT;
 	vc->vc_mode = KD_TEXT;
-	kbd_table[vc->vc_num].kbdmode = VC_XLATE;
+	kbd_table[vc->vc_num].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
 	vc->vt_mode.mode = VT_AUTO;
 	vc->vt_mode.mode = VT_AUTO;
 	vc->vt_mode.waitv = 0;
 	vc->vt_mode.waitv = 0;
 	vc->vt_mode.relsig = 0;
 	vc->vt_mode.relsig = 0;

+ 1 - 0
include/linux/vt_kern.h

@@ -87,6 +87,7 @@ extern int unbind_con_driver(const struct consw *csw, int first, int last,
 extern char con_buf[CON_BUF_SIZE];
 extern char con_buf[CON_BUF_SIZE];
 extern struct mutex con_buf_mtx;
 extern struct mutex con_buf_mtx;
 extern char vt_dont_switch;
 extern char vt_dont_switch;
+extern int default_utf8;
 
 
 struct vt_spawn_console {
 struct vt_spawn_console {
 	spinlock_t lock;
 	spinlock_t lock;