diff --git a/chapter09/chapter09.xml b/chapter09/chapter09.xml
index 1f6dda19c..3f4db0d6b 100644
--- a/chapter09/chapter09.xml
+++ b/chapter09/chapter09.xml
@@ -26,14 +26,13 @@
-
-
+
diff --git a/chapter09/locale.xml b/chapter09/locale.xml
index fa8508828..803978267 100644
--- a/chapter09/locale.xml
+++ b/chapter09/locale.xml
@@ -5,18 +5,25 @@
%general-entities;
]>
-
+
Configuring the System Locale
- /etc/locale.conf
+ /etc/profile
- The /etc/locale.conf file below sets some
- environment variables necessary for native language support. Setting
- them properly results in:
+
+ /etc/locale.conf
+
+
+ The /etc/locale.conf file
+ below sets some environment variables necessary for native language
+ support. Setting them properly results in:
+
+ Some environment variables are necessary for native language
+ support. Setting them properly results in:
@@ -97,30 +104,103 @@ LC_ALL=<locale name> locale int_prefix
In those cases, investigating how other Linux distributions support your locale
might provide some useful information.
- Once the proper locale settings have been determined, create the
- /etc/locale.conf file:
+ Once the proper locale settings have been
+ determined, create the /etc/locale.conf file:
-cat > /etc/locale.conf << "EOF"
+cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
EOF
- Note that you can modify /etc/locale.conf with the
+ The shell program /bin/bash (here after referred
+ as the shell
) uses a collection of startup files to help
+ create the environment to run in. Each file has a specific use and may
+ affect login and interactive environments differently. The files in the
+ /etc directory provide global
+ settings. If equivalent files exist in the home directory, they
+ may override the global settings.
+
+ An interactive login shell is started after a successful login,
+ using /bin/login, by reading the
+ /etc/passwd file. An interactive non-login shell is
+ started at the command-line (e.g.
+ [prompt]$/bin/bash). 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.
+
+ The login shells are often unaffected by
+ the settings in /etc/locale.conf. Create the
+ /etc/profile
+ once the proper locale settings have been
+ determined to set the desired localeto read the locale settings from
+ /etc/locale.conf and export them,
+ but set the C locale instead if running in the Linux
+ console (to prevent programs from outputting characters that the Linux
+ console is unable to render):
+
+cat > /etc/profile << "EOF"
+# Begin /etc/profile
+
+for i in $(locale); do
+ unset ${i%=*}
+done
+
+if [[ "$TERM" = linux ]]; then
+ export LANG=C
+else
+ source /etc/locale.conf
+
+ for i in $(locale); do
+ key=${i%=*}
+ if [[ -v $key ]]; then
+ export $key
+ fi
+ done
+fi
+
+# End /etc/profile
+EOF
+
+cat > /etc/profile << "EOF"
+# Begin /etc/profile
+
+for i in $(locale); do
+ unset ${i%=*}
+done
+
+if [[ "$TERM" = linux ]]; then
+ for i in $(locale); do
+ unset ${i%=*}
+ done
+
+ export LANG=C
+else
+ export LANG=<ll>_<CC>.<charmap><@modifiers>
+fi
+
+# End /etc/profile
+EOF
+
+ Note that you can modify /etc/locale.conf with the
systemd localectl utility. To use
localectl for the example above, run:
-localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"
+localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"
- You can also specify other language specific environment variables such
- as LANG, LC_CTYPE, LC_NUMERIC or
- any other environment variable from locale output. Just
- separate them with a space. An example where LANG is set as
+ You can also specify other language specific
+ environment variables such as LANG,
+ LC_CTYPE, LC_NUMERIC or any other
+ environment variable from locale output. Just separate
+ them with a space. An example where LANG is set as
en_US.UTF-8 but LC_CTYPE is set as just en_US is:
-localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
+localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
- Please note that the localectl command
- doesn't work in the chroot environment. It can only
- be used after the LFS system is booted with systemd.
+ Please note that the
+ localectl command doesn't work in the chroot
+ environment. It can only be used after the LFS system is booted with
+ systemd.
The C (default) and en_US
(the recommended one for United States English users) locales are
@@ -134,10 +214,4 @@ EOF
use the C locale only
if you are certain that you will never need 8-bit characters.
-
-
diff --git a/chapter09/profile.xml b/chapter09/profile.xml
deleted file mode 100644
index 55cc5dbb0..000000000
--- a/chapter09/profile.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-
-
- %general-entities;
-]>
-
-
-
-
- The Bash Shell Startup Files
-
-
- /etc/profile
-
-
- The shell program /bin/bash (hereafter referred to
- as the shell
) uses a collection of startup files to help
- create the environment to run in. Each file has a specific use and may affect
- login and interactive environments differently. The files in the /etc directory provide global settings. If
- equivalent files exist in the home directory, they may override the global
- settings.
-
- An interactive login shell is started after a successful login, using
- /bin/login, by reading the /etc/passwd
- file. An interactive non-login shell is started at the command-line (e.g.,
- [prompt]$/bin/bash). 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.
-
-For more information, see the Bash Startup Files and
- Interactive Shells sections in the Bash
- Features chapter of the Bash info pages (info bash).
-
- The files /etc/profile and
- ~/.bash_profile are read when the shell is
- invoked as an interactive login shell.
-
- The base /etc/profile below sets some
- environment variables necessary for native language support. Setting
- them properly results in:
-
-
-
- The output of programs translated into the native language
-
-
- Correct classification of characters into letters, digits and other
- classes. This is necessary for bash to properly accept
- non-ASCII characters in command lines in non-English locales
-
-
- The correct alphabetical sorting order for the country
-
-
- Appropriate default paper size
-
-
- Correct formatting of monetary, time, and date values
-
-
-
- Replace <ll> below with the two-letter code
- for the desired language (e.g., en
) and
- <CC> with the two-letter code for the appropriate
- country (e.g., GB
). <charmap> should
- be replaced with the canonical charmap for your chosen locale. Optional
- modifiers such as @euro
may also be present.
-
- The list of all locales supported by Glibc can be obtained by running
- the following command:
-
-locale -a
-
- Charmaps can have a number of aliases, e.g., ISO-8859-1
- is also referred to as iso8859-1
and iso88591.
- Some applications cannot handle the various synonyms correctly (e.g., require
- that UTF-8
is written as UTF-8, not
- utf8), so it is safest in most
- cases to choose the canonical name for a particular locale. To determine
- the canonical name, run the following command, where <locale
- name> is the output given by locale -a for
- your preferred locale (en_GB.iso88591
in our example).
-
-LC_ALL=<locale name> locale charmap
-
- For the en_GB.iso88591
locale, the above command
- will print:
-
-ISO-8859-1
-
- This results in a final locale setting of en_GB.ISO-8859-1.
- It is important that the locale found using the heuristic above is tested before
- it is added to the Bash startup files:
-
-LC_ALL=<locale name> locale language
-LC_ALL=<locale name> locale charmap
-LC_ALL=<locale name> locale int_curr_symbol
-LC_ALL=<locale name> locale int_prefix
-
- The above commands should print the language name, the character
- encoding used by the locale, the local currency, and the prefix to dial
- before the telephone number in order to get into the country. If any of the
- commands above fail with a message similar to the one shown below, this means
- that your locale was either not installed in
- or is not supported by the default installation of Glibc.
-
-locale: Cannot set LC_* to default locale: No such file or directory
-
- If this happens, you should either install the desired locale using the
- localedef command, or consider choosing a different locale.
- Further instructions assume that there are no such error messages from
- Glibc.
-
- Other packages may also function incorrectly (but will not necessarily
- display any error messages) if the locale name does not meet their expectations.
- In such cases, investigating how other Linux distributions support your locale
- might provide some useful information.
-
- Once the proper locale settings have been determined, create the
- /etc/profile file:
-
-cat > /etc/profile << "EOF"
-# Begin /etc/profile
-
-export LANG=<ll>_<CC>.<charmap><@modifiers>
-
-# End /etc/profile
-EOF
-
- The C
(default) and en_US.utf8
(the recommended
- one for United States English users) locales are different. C
- uses the US-ASCII 7-bit character set, and treats bytes with the high-order bit set
- on
as invalid characters. That's why, e.g., the ls command
- displays them as question marks in that locale. Also, an attempt to send
- mail with such characters from Mutt or Pine results in non-RFC-conforming
- messages being sent (the charset in the outgoing mail is indicated as unknown
- 8-bit
). So you can only use the C
locale if you are sure
- you will never need 8-bit characters.
-
- UTF-8 based locales are not supported well by some programs.
- Work is in progress to document and, if possible, fix such problems. See
- .
-
-