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>
This commit is contained in:
Bill Nottingham 2007-10-16 23:29:38 -07:00 committed by Linus Torvalds
parent 430d275a39
commit 2e8ecb9db0
6 changed files with 27 additions and 5 deletions

View file

@ -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

View file

@ -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);

View file

@ -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

View file

@ -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);
/* /*

View file

@ -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;

View file

@ -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;