#2722: Mistake on the linux console page
----------------------+-----------------------------------------------------
 Reporter:  splotz90  |       Owner:  lfs-b...@…                   
     Type:  task      |      Status:  new                          
 Priority:  normal    |   Milestone:  6.7                          
Component:  Book      |     Version:  SVN                          
 Severity:  normal    |    Keywords:                               
----------------------+-----------------------------------------------------
 The book says:

 "'''''In UTF-8 mode, the kernel uses the application character map for
 conversion of composed 8-bit key codes in the keymap to UTF-8, and thus
 the argument of the "-m" parameter should be set to the encoding of the
 composed key codes in the keymap.'''''"

 That's wrong. The man page of setfont says:

 "'''''If the console is in utf8 mode (see unicode_start(1)) then the
 kernel expects that user program output is coded as UTF-8 (see utf-8(7)),
 and converts that to Unicode (ucs2). Otherwise, a translation table is
 used from the 8-bit program output  to 16-bit Unicode values. Such a
 translation table is called a Unicode console map.'''''"

 The console internal always uses unicode (regardless if we're using the
 unicode mode or not):
 http://www.mjmwired.net/kernel/Documentation/unicode.txt

 So this table is used to convert the output of programs, that are using
 "legacy charsets", to unicode. It '''doesn't''' convert the the key codes
 in the keymap. It also converts the input from the keyboard. Example:

 '''''program (8859-1 output) --> unicode console map (unicode output) -->
 font --> character on screen'''''

 and:

 '''''keyboard --> scancode --> kernel keymap (unicode output) --> unicode
 console map (8859-1 output) --> program'''''

 This conversion only takes place, if we're '''NOT''' in unicode mode. I've
 tested all these things ...

 ----

 Some comments on the examples in the book:

 {{{
 cat > /etc/sysconfig/console << "EOF"
 # Begin /etc/sysconfig/console

 KEYMAP="de-latin1"
 KEYMAP_CORRECTIONS="euro2"
 FONT="lat0-16 -m 8859-15"

 # End /etc/sysconfig/console
 EOF
 }}}

 '''''KEYMAP_CORRECTIONS="euro2"''''' is not necessary because de-latin1
 already includes euro2.map
 [[BR]]


 {{{
 cat > /etc/sysconfig/console << "EOF"
 # Begin /etc/sysconfig/console

 UNICODE="1"
 KEYMAP="de-latin1"
 KEYMAP_CORRECTIONS="euro2"
 LEGACY_CHARSET="iso-8859-15"
 FONT="LatArCyrHeb-16 -m 8859-15"

 # End /etc/sysconfig/console
 EOF
 }}}

 '''''KEYMAP_CORRECTIONS="euro2"''''' is not necessary because de-latin1
 already includes euro2.map[[BR]]

 '''''FONT="LatArCyrHeb-16 -m 8859-15"''''' --> "'''''-m 8859-15'''''" is
 not meaningful because the kernel doesn't use this translation table in
 unicode mode.

 '''''LEGACY_CHARSET="iso-8859-15"''''' is not necessary because the de-
 latin1 keymap doesn't contain any charset specific character code values.
 The symbolic values will be converted into unicode in the right way
 (without help of this conversion). See src/ksyms.c in the kbd source.

 The dumpkeys man page says:

 '''''-ccharset --charset=charset
 This instructs dumpkeys to interpret character code values according to
 the specified character set. This affects only the translation of
 character code values to symbolic names. Valid values for charset
 currently are iso-8859-X, Where X is a digit in 1-9. If no charset is
 specified, iso-8859-1 is used as a default. This option produces an output
 line 'charset "iso-8859-X"', telling loadkeys how to interpret the keymap.
 (For example, "division" is 0xf7 in iso-8859-1 but 0xba in
 iso-8859-8.)'''''

 ----

 I suggest that we're adding the following examples for a german LFS into
 the book:

 For a system with programs that uses "legacy charsets":


 {{{
 cat > /etc/sysconfig/console << "EOF"
 # Begin /etc/sysconfig/console

 KEYMAP="de-latin1"
 FONT="lat0-16 -m 8859-15"

 # End /etc/sysconfig/console
 EOF
 }}}

 For a system with no "legacy software" (only UTF-8 compatible programs):


 {{{
 cat > /etc/sysconfig/console << "EOF"
 # Begin /etc/sysconfig/console

 UNICODE="1"
 KEYMAP="de-latin1"
 FONT="lat0-16"

 # End /etc/sysconfig/console
 EOF
 }}}

 It should be pointed out that the "-m $charset" option is only meaningful
 if "legacy software" with old charsets needs to be supported.

 ----

 Finally, some references:

 http://linux.die.net/man/1/dumpkeys

 http://linux.die.net/man/8/setfont

 http://www.mjmwired.net/kernel/Documentation/unicode.txt

 http://gunnarwrobel.de/wiki/Linux-and-the-keyboard.html

 http://freeworld.thc.org/papers/writing-linux-kernel-keylogger.txt

-- 
Ticket URL: <http://wiki.linuxfromscratch.org/lfs/ticket/2722>
LFS Trac <http://wiki.linuxfromscratch.org/lfs/>
Linux From Scratch: Your Distro, Your Rules.
-- 
http://linuxfromscratch.org/mailman/listinfo/lfs-book
FAQ: http://www.linuxfromscratch.org/lfs/faq.html
Unsubscribe: See the above information page

Reply via email to