提交 2e8ecb9d 编写于 作者: B Bill Nottingham 提交者: Linus Torvalds

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: NBill 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: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 430d275a
...@@ -36,6 +36,23 @@ config VT ...@@ -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
......
...@@ -1381,7 +1381,7 @@ int __init kbd_init(void) ...@@ -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);
......
...@@ -108,12 +108,12 @@ static void sysrq_handle_unraw(int key, struct tty_struct *tty) ...@@ -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
......
...@@ -158,7 +158,11 @@ static void blank_screen_t(unsigned long dummy); ...@@ -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);
/* /*
......
...@@ -1125,7 +1125,7 @@ int vt_waitactive(int vt) ...@@ -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;
......
...@@ -87,6 +87,7 @@ extern int unbind_con_driver(const struct consw *csw, int first, int last, ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册