Committed Alexander's i18n patch

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@3489 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
This commit is contained in:
Zack Winkles 2004-05-06 16:22:04 +00:00
parent 4dc8dc63ee
commit b32e803309
9 changed files with 333 additions and 59 deletions

View File

@ -111,6 +111,25 @@ localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP</userinput></screen>
<para>In fact, some locales installed by the
<command>make localedata/install-locales</command>
command above are not properly
supported by some applications that are in LFS and BLFS books. Because
of various problems that arise
due to application programmers making
assumptions that break in such locales, LFS <emphasis>should not</emphasis>
be used in locales that utilize
multibyte character sets (including UTF-8) or
right-to-left writing order.
Numerous unofficial and unstable patches are required to fix these problems,
and it has been decided not to support such complex locales.
This applies to the ja_JP and fa_IR locales as well:
they have been installed only
for gcc and gettext tests to pass, and e.g. <application>vim</application>
compiled according to this book doesn't work properly in them.
Various attempts to circumvent these
restrictions are documented in internationalization-related hints.</para>
<para>Finally, build the linuxthreads man pages, which are a great reference
on the threading API (applicable to NPTL as well):</para>

View File

@ -36,41 +36,8 @@ Diffutils, Flex, GCC, Gettext, Glibc, Grep, Gzip, M4, Make, Sed.</para>
</sect2>
<sect2 id="conf-kbd"><title>Configuring your keyboard</title>
<indexterm zone="conf-kbd">
<primary sortas="a-Kbd">Kbd</primary>
<secondary>configuring</secondary></indexterm>
<para>Few things are more annoying than using Linux while a wrong keymap
for your keyboard is loaded. If you have a standard US keyboard, however, you
can skip this section, as the US keymap is the default as long as you don't
change it.</para>
<para>To change the default keymap, create the
<filename class="symlink">/usr/share/kbd/keymaps/defkeymap.map.gz</filename>
symlink by running the following command:</para>
<screen><userinput>ln -s path/to/keymap /usr/share/kbd/keymaps/defkeymap.map.gz</userinput></screen>
<para>Of course, replace <filename>path/to/keymap</filename> with the path and
name of your keyboard's map file. For example, if you have a Dutch keyboard,
you would use <filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename>.</para>
<para>Another way to set your keyboard's layout is to compile the keymap
into the kernel. This ensures that your keyboard will always work as expected,
even when you boot into maintenance mode (by passing `init=/bin/sh' to the
kernel), as then the bootscript that normally sets up your keymap isn't run.</para>
<para>When in <xref linkend="chapter-bootable"/> you're ready to compile the
kernel, run the following command to patch the current default keymap into the
source (you will have to repeat this command whenever you unpack a new
kernel):</para>
<screen><userinput>loadkeys -m /usr/share/kbd/keymaps/defkeymap.map.gz &gt; \
/usr/src/linux-&linux-version;/drivers/char/defkeymap.c</userinput></screen>
</sect2>
<!-- The "Configuring your keyboard" section has been moved to
Chapter 7 and renamed to "Configuring Linux console" -->
<sect2 id="contents-kbd"><title>Contents of Kbd</title>
@ -163,11 +130,12 @@ ASCII codes of the keys pressed on the keyboard.</para>
<indexterm zone="ch-system-kbd unicode_start"><primary sortas="b-unicode_start">unicode_start</primary></indexterm>
<para id="unicode_start"><command>unicode_start</command> puts the keyboard and console in
unicode mode.</para>
UNICODE mode. Never use it on LFS, because applications are not
configured to support UNICODE.</para>
<indexterm zone="ch-system-kbd unicode_stop"><primary sortas="b-unicode_stop">unicode_stop</primary></indexterm>
<para id="unicode_stop"><command>unicode_stop</command> reverts keyboard and console from
unicode mode.</para>
UNICODE mode.</para>
</sect2>

View File

@ -73,6 +73,35 @@ configuration file in the <filename>/etc</filename> directory.</para></listitem>
<filename>man.conf</filename> file and add the <emphasis>-c</emphasis> switch
to NROFF.</para></note>
<para>If your character set uses 8-bit characters, search for the line
beginning with "NROFF" in /etc/man.conf, and verify that it coincides
with the following:</para>
<screen>NROFF /usr/bin/nroff -Tlatin1 -mandoc</screen>
<para>Note that you should use "latin1" even if it is not the character set
of your locale. The reason is that,
according to the specification, <application>groff</application> has
no means of typesetting characters outside ISO-8859-1
without some strange escape codes, and localized manual
pages are therefore really a hack. When formatting manual pages,
<application>groff</application> thinks that they are in the ISO-8859-1
encoding and this <emphasis>-Tlatin1</emphasis> switch tells
<application>groff</application> to use the same encoding for output.
Since <application>groff</application> does no recoding of input characters,
the formatted result is really in the same encoding as input (although
<application>groff</application> doesn't know that it is not ISO-8859-1)
and therefore it is usable as the input for a pager.</para>
<para>Of course, this hack does not solve the problem of non-working
<command>man2dvi</command> program for localized manual
pages in non-ISO-8859-1 locales.
Also, it does not work at all with multibyte character sets.
The first problem does not have a solution currently. The second
one is not of a concern because the LFS installation does not support
multibyte character sets properly anyway. You may want to look at
internationalization related hints, though.</para>
<para>You may want to also take a look at the BLFS page at
<ulink url="&blfs-root;view/cvs/postlfs/compressdoc.html"/> which deals with
formatting and compression issues for man pages.</para>

View File

@ -74,16 +74,26 @@ ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
1:2345:respawn:/sbin/agetty -I '\033(K' tty1 9600
2:2345:respawn:/sbin/agetty -I '\033(K' tty2 9600
3:2345:respawn:/sbin/agetty -I '\033(K' tty3 9600
4:2345:respawn:/sbin/agetty -I '\033(K' tty4 9600
5:2345:respawn:/sbin/agetty -I '\033(K' tty5 9600
6:2345:respawn:/sbin/agetty -I '\033(K' tty6 9600
# End /etc/inittab
<userinput>EOF</userinput></screen>
<para> The -I '\033(K' switch tells agetty to send this escape sequence to
the terminal before doing anything else. This escape sequence switches the
console character set to a user-defined one, which can be modified by
running the <command>setfont</command> program.
Actually, the <command>console</command> initscript from the LFS-Bootscripts
package calls the <command>setfont</command> program during system
startup. Sending this escape sequence is necessary for
people who use non-ISO-8859-1 screen font, but does not hurt native English
speakers.</para>
</sect2>

View File

@ -30,8 +30,10 @@
<sect2 id="contents-bootscripts"><title>Contents of LFS-bootscripts</title>
<para><emphasis>Installed scripts</emphasis>: checkfs, cleanfs, functions,
halt, ifdown, ifup, loadkeys, localnet, mountfs, mountkernfs, network, rc,
<para><emphasis>Installed scripts</emphasis>: checkfs, cleanfs,
console,
functions, halt, ifdown, ifup,
localnet, mountfs, mountkernfs, network, rc,
reboot, sendsignals, setclock, static, swap, sysklogd and template</para>
</sect2>
@ -51,6 +53,12 @@ preserved between reboots, such as those in <filename>/var/run/</filename> and
and removes the possibly present <filename>/etc/nologin</filename>,
<filename>/fastboot</filename> and <filename>/forcefsck</filename> files.</para>
<indexterm zone="ch-scripts-bootscripts console-bootscripts"><primary sortas="d-console">console</primary></indexterm>
<para id="console-bootscripts">The <command>console</command> script
loads the keymap table you
specified as proper for your keyboard layout.
It also sets the screen font.</para>
<indexterm zone="ch-scripts-bootscripts functions-bootscripts"><primary sortas="d-functions">functions</primary></indexterm>
<para id="functions-bootscripts">The <command>functions</command> script contains functions shared among
different scripts, such as error and status checking.</para>
@ -62,10 +70,6 @@ different scripts, such as error and status checking.</para>
<para id="ifdown-bootscripts">The <command>ifdown</command> and <command>ifup</command> scripts assist
the network script with network devices.</para>
<indexterm zone="ch-scripts-bootscripts loadkeys-bootscripts"><primary sortas="d-loadkeys">loadkeys</primary></indexterm>
<para id="loadkeys-bootscripts">The <command>loadkeys</command> script loads the keymap table you
specified as proper for your keyboard layout.</para>
<indexterm zone="ch-scripts-bootscripts localnet-bootscripts"><primary sortas="d-localnet">localnet</primary></indexterm>
<para id="localnet-bootscripts">The <command>localnet</command> script sets up the system's hostname and
local loopback device.</para>

View File

@ -13,6 +13,8 @@
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="usage.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="setclock.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="console.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="inputrc.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="profile.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="sysklogd.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="hostname.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="hosts.xml"/>

View File

@ -4,22 +4,92 @@
%general-entities;
]>
<sect1 id="ch-scripts-console">
<title>Do I need the console script?</title>
<title>Configuring the Linux console</title>
<?dbhtml filename="console.html"?>
<indexterm zone="ch-scripts-console">
<primary sortas="d-console">console</primary>
<secondary>configuring</secondary></indexterm>
<para>If you plan to compile the keymap directly in the kernel during <xref
linkend="chapter-bootable"/> (see <xref linkend="ch-system-kbd"/>), then strictly
speaking you don't need to run this loadkeys script, since the kernel will set
up the keymap for you. If you wish, you can still run the script, it isn't going
to hurt you. Keeping it could even be beneficial, in case you run a lot of
different kernels and can't be sure that the keymap is compiled into every one
of them.</para>
<para>In this section we will configure the <command>console</command>
initscript that sets up the keyboard
map and the console font. If you are a native English speaker so that you
don't need to use any non-ASCII characters, and your keyboard is a US one,
skip this section. Without the configuration file,
the <command>console</command> initscript will do nothing.</para>
<para>If you decided you don't need or don't want to use the console script,
remove the <filename class="symlink">/etc/rc.d/rcsysinit.d/S70console</filename> symlink.</para>
<para>The <command>console</command> script uses the
<filename>/etc/sysconfig/console</filename>
as a configuration file. You need to decide which keymap and screen font you
will use. The language-specific HOWTO can help you.
In the future releases of LFS-Bootscripts, there will be a pre-made
<filename>/etc/sysconfig/console</filename> file with known
good settings for several countries, and you will just have to uncomment
the relevant section.
If still in doubt,
look into <filename class="directory">/usr/share/kbd</filename>
for valid keymaps and screen fonts. Then read the <command>loadkeys</command>
and <command>setfont</command> manual pages and figure out the correct
arguments for these programs.
Once you decided, create the
configuration file with the following command:</para>
<screen><userinput>cat &gt;/etc/sysconfig/console &lt;&lt;"EOF"</userinput>
KEYMAP="<emphasis>arguments for loadkeys</emphasis>"
FONT="<emphasis>arguments for setfont</emphasis>"
<userinput>EOF</userinput></screen>
<para>E.g., for Spanish users who also want to use the Euro character
(accessible by pressing Alt+E),
the following settings are correct:</para>
<screen><userinput>cat &gt;/etc/sysconfig/console &lt;&lt;"EOF"</userinput>
KEYMAP="es euro"
FONT="lat9-16 -u iso01"
<userinput>EOF</userinput></screen>
<para>If the KEYMAP or FONT variable is not set, the console initscript
will not run the corresponding program.</para>
<para>In some keymaps, the Backspace and Delete keys send characters
different form ones in the default keymap built into the kernel.
This confuses some applications, e.g. <application>Emacs</application>
displays its help (instead of erasing the character before the cursor)
when you press Backspace. To check if your keymap is affected (this works
only for i386 keymaps):</para>
<screen><userinput>zgrep '\W14\W' <emphasis>/path/to/your/keymap</emphasis></userinput></screen>
<para>If you see that keycode 14 is Backspace and not Delete,
create the following keymap snippet to fix this issue:</para>
<screen><userinput>mkdir -p /etc/kbd &amp; &amp; cat &gt;/etc/kbd/bs-sends-del &lt;&lt;"EOF"</userinput>
keycode 14 = Delete Delete Delete Delete
alt keycode 14 = Meta_Delete
altgr alt keycode 14 = Meta_Delete
keycode 111 = Remove
altgr control keycode 111 = Boot
control alt keycode 111 = Boot
altgr control alt keycode 111 = Boot
<userinput>EOF</userinput></screen>
<para>Then tell the <command>console</command> script to load this snippet
after the main keymap:</para>
<screen><userinput>cat &gt;&gt;/etc/sysconfig/console &lt;&lt;EOF</userinput>
KEYMAP_CORRECTION="/etc/kbd/bs-sends-del"
<userinput>EOF</userinput></screen>
<para>If back in <xref linkend="chapter-building-system"/> you decided to go
compile your keymap directly into the kernel (later on in <xref
linkend="chapter-bootable"/>), then strictly speaking you don't need to run the
loadkeys program, since the kernel will set up the keymap for you,
and thus you may omit the KEYMAP variable from the
<filename>/etc/sysconfig/console</filename>
configuration file. If you wish,
you can still have it, this isn't going to hurt you. Keeping it could even
be beneficial, in case you run a lot of different kernels and can't be sure
that the keymap is compiled into every one of them.</para>
</sect1>

94
chapter07/inputrc.xml Normal file
View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-inputrc">
<title>Creating the /etc/inputrc file</title>
<?dbhtml filename="inputrc.html"?>
<para><filename>Inputrc</filename> deals with the mapping of the keyboard for
certain situations. This file is the start-up file used by
<application>readline</application> - the input related library used by
<application>Bash</application> and most other shells.</para>
<para>For more information see <command>info bash</command> -- <emphasis
role="strong">Node: Readline Init</emphasis> file as well as
<command>info readline</command>. There is a lot that can be done with this
one rc file.</para>
<para>Global values are set in <filename>/etc/inputrc</filename>.
Personal user values are set in <filename>~/.inputrc</filename>. The
<filename>~/.inputrc</filename> file will override the global settings
file. A later page sets up <application>Bash</application> to use
<filename>/etc/inputrc</filename> if there is no
<filename>.inputrc</filename> for a user when
<filename>/etc/profile</filename> is read (usually at login). If you
want your system to use both, or don't want <emphasis>global</emphasis>
keyboard handling, it is a good idea to place a default
<filename>.inputrc</filename> into the <filename>/etc/skel</filename>
directory for use with new users.</para>
<para>
Below is a base <filename>/etc/inputrc</filename> along with
comments to explain what the various options do. Note that comments
can <emphasis>not</emphasis> be on the same line as commands.
</para>
<para>If you will create an <filename>.inputrc</filename> in
<filename>/etc/skel</filename> using the command below, change the
command's output to <filename>/etc/skel/.inputrc</filename> and be
sure to check/set permissions afterward. Then you can just copy that
file to <filename>/etc/inputrc</filename> and the home directory
of any user already existing in the system, including root, that needs
a private version of the file. Be sure to use the <option>-p</option> parameter
of <command>cp</command> to maintain permissions and be sure to change owner and group
appropriately.
</para>
<screen><userinput>cat &gt; /etc/inputrc &lt;&lt; "EOF"</userinput>
# Begin /etc/inputrc
# Make sure we don't output everything on the 1 line
set horizontal-scroll-mode Off
# Enable 8bit input
set meta-flag On
set input-meta On
# Turns off 8th bit stripping
set convert-meta Off
# Keep the 8th bit for display
set output-meta On
# none, visible or audible
set bell-style none
# All of the following map the escape sequence of the
# value contained inside the 1st argument to the
# readline specific functions
"\eOd": backward-word
"\eOc": forward-word
# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line
# End /etc/inputrc
<userinput>EOF</userinput></screen>
</sect1>

78
chapter07/profile.xml Normal file
View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-profile">
<title>The Bash Shell Startup Files</title>
<?dbhtml filename="profile.html"?>
<para>The shell program <filename>/bin/bash</filename> (hereafter
referred to as just "the shell") uses a collection of startup files to
help create an environment to run in. Each file has a specific use and
may affect login and interactive environments differently. The files in
the <filename class="directory">/etc</filename> directory generally provide global
settings. If an equivalent file exists in your home directory it may
override the global settings.
</para>
<para>An interactive login shell is started after a successful login, using
<filename>/bin/login</filename>, by reading the
<filename>/etc/passwd</filename> file. An
interactive non-login shell is started at the command-line (e.g.
<prompt>[prompt]$</prompt><command>/bin/bash</command>). A non-interactive
shell is usually present when a shell script is running. It is non-interactive
because it is processing a script and not waiting for user input between
commands.</para>
<para>For more information see <command>info bash</command> --
<emphasis role="strong">Nodes: Bash Startup Files and Interactive
Shells.</emphasis></para>
<para>The files <filename>/etc/profile</filename> and
<filename>~/.bash_profile</filename> are read when the shell is invoked
as an interactive login shell.</para>
<para>A base <filename>/etc/profile</filename> created below only sets some
environment variables necessary for Bash to accept keystrokes properly,
even in non-English locale. Replace "ll" with the
two-letter code for your language (e.g. "en") and
"CC" with the two-letter code for your country
(e.g. "GB"). Also you may need to specify
(and this is actually the preferred form) your
character encoding (e.g. "iso8859-1") after a dot (so that the result
is "en_GB.iso8859-1").
Issue the following command for more information:</para>
<screen><userinput>man 3 setlocale</userinput></screen>
<para>The list of all locales supported by glibc can be obtained by running
the following command:</para>
<screen><userinput>locale -a</userinput></screen>
<para>Now, when you are sure about your locale settings, create the
<filename>/etc/profile</filename> file:</para>
<screen><userinput>cat &gt; /etc/profile &lt;&lt; "EOF"
# Begin /etc/profile
# Written for Linux From Scratch
# by Alexander E. Patrakov
export LC_ALL=ll_CC
export LANG=ll_CC
export INPUTRC=/etc/inputrc
# End /etc/profile
EOF</userinput></screen>
<para>Setting the keyboard layout,
the screen font and the locale-related environment variables
are the only internationalization steps needed to support
locales that use ordinary single-byte encodings and left-to-right
writing direction. More complex cases (including UTF-8 based locales)
require additional steps and additional patches because many applications
tend to break in such conditions. Because of too little educational
value for a typical reader, these steps and patches are not included
in the LFS book and such locales are not supported by LFS in any way.
</para>
</sect1>