Chapter 2. System Locale and Keyboard Configuration
Chapter 2. System Locale and Keyboard Configuration The system locale specifies the language settings of system services and user interfaces. The keyboard layout settings control the layout used on the text console and graphical user interfaces. These settings can be made by modifying the /etc/locale.conf configuration file or by using the localectl utility. Also, you can use the graphical user interface to perform the task; for a description of this method, see Red Hat Enterprise Linux 7 Installation Guide . 2.1. Setting the System Locale System-wide locale settings are stored in the /etc/locale.conf file, which is read at early boot by the systemd daemon. The locale settings configured in /etc/locale.conf are inherited by every service or user, unless individual programs or individual users override them. The basic file format of /etc/locale.conf is a newline-separated list of variable assignments. For example, German locale with English messages in /etc/locale.conf looks as follows: Here, the LC_MESSAGES option determines the locale used for diagnostic messages written to the standard error output. To further specify locale settings in /etc/locale.conf , you can use several other options, the most relevant are summarized in Table 2.1, "Options configurable in /etc/locale.conf" . See the locale(7) manual page for detailed information on these options. Note that the LC_ALL option, which represents all possible options, should not be configured in /etc/locale.conf . Table 2.1. Options configurable in /etc/locale.conf Option Description LANG Provides a default value for the system locale. LC_COLLATE Changes the behavior of functions which compare strings in the local alphabet. LC_CTYPE Changes the behavior of the character handling and classification functions and the multibyte character functions. LC_NUMERIC Describes the way numbers are usually printed, with details such as decimal point versus decimal comma. LC_TIME Changes the display of the current time, 24-hour versus 12-hour clock. LC_MESSAGES Determines the locale used for diagnostic messages written to the standard error output. 2.1.1. Displaying the Current Status The localectl command can be used to query and change the system locale and keyboard layout settings. To show the current settings, use the status option: Example 2.1. Displaying the Current Status The output of the command lists the currently set locale, keyboard layout configured for the console and for the X11 window system. 2.1.2. Listing Available Locales To list all locales available for your system, type: Example 2.2. Listing Locales Imagine you want to select a specific English locale, but you are not sure if it is available on the system. You can check that by listing all English locales with the following command: 2.1.3. Setting the Locale To set the default system locale, use the following command as root : Replace locale with the locale name, found with the localectl list-locales command. The above syntax can also be used to configure parameters from Table 2.1, "Options configurable in /etc/locale.conf" . Example 2.3. Changing the Default Locale For example, if you want to set British English as your default locale, first find the name of this locale by using list-locales . Then, as root , type the command in the following form: 2.1.4. Making System Locale Settings Permanent when Installing with Kickstart When Red Hat Enterprise Linux is installed with the Red Hat Kickstart installation method, setting of the system locales might not be persistent after an upgrade of the operating system. When the %packages section of the Kickstart file includes the --instLang option, the _install_langs RPM macro is set to the particular value for this installation, and the set of installed locales is adjusted accordingly. However, this adjustment affects only this installation, not subsequent upgrades. If an upgrade reinstalls the glibc package, the entire set of locales is upgraded instead of only the locales you requested during the installation. To avoid this, make the choice of locales permanent. You have these options: If you have not started the Kickstart installation, modify the Kickstart file to include instructions for setting RPM macros globally by applying this procedure: Setting RPM macros during the Kickstart installation If you have already installed the system, set RPM macros globally on the system by applying this procedure: Setting RPM macros globally Setting RPM macros during the Kickstart installation Modify the %post section of the Kickstart file: Modify the %packages section of the Kickstart file: Setting RPM macros globally Create the RPM configuration file at /etc/rpm/macros.language-conf with the following contents: LANG is the value of the instLang option. Update the /etc/yum.conf file with: 2.2. Changing the Keyboard Layout The keyboard layout settings enable the user to control the layout used on the text console and graphical user interfaces. 2.2.1. Displaying the Current Settings As mentioned before, you can check your current keyboard layout configuration with the following command: Example 2.4. Displaying the Keyboard Settings In the following output, you can see the keyboard layout configured for the virtual console and for the X11 window system. 2.2.2. Listing Available Keymaps To list all available keyboard layouts that can be configured on your system, type: Example 2.5. Searching for a Particular Keymap You can use grep to search the output of the command for a specific keymap name. There are often multiple keymaps compatible with your currently set locale. For example, to find available Czech keyboard layouts, type: 2.2.3. Setting the Keymap To set the default keyboard layout for your system, use the following command as root : Replace map with the name of the keymap taken from the output of the localectl list-keymaps command. Unless the --no-convert option is passed, the selected setting is also applied to the default keyboard mapping of the X11 window system, after converting it to the closest matching X11 keyboard mapping. This also applies in reverse, you can specify both keymaps with the following command as root : If you want your X11 layout to differ from the console layout, use the --no-convert option. With this option, the X11 keymap is specified without changing the console layout setting. Example 2.6. Setting the X11 Keymap Separately Imagine you want to use German keyboard layout in the graphical interface, but for console operations you want to retain the US keymap. To do so, type as root : Then you can verify if your setting was successful by checking the current status: Apart from keyboard layout ( map ), three other options can be specified: Replace model with the keyboard model name, variant and options with keyboard variant and option components, which can be used to enhance the keyboard behavior. These options are not set by default. For more information on X11 Model, X11 Variant, and X11 Options see the kbd(4) man page. 2.3. Additional Resources For more information on how to configure the keyboard layout on Red Hat Enterprise Linux, see the resources listed below: Installed Documentation localectl (1) - The manual page for the localectl command line utility documents how to use this tool to configure the system locale and keyboard layout. loadkeys (1) - The manual page for the loadkeys command provides more information on how to use this tool to change the keyboard layout in a virtual console. See Also Chapter 6, Gaining Privileges documents how to gain administrative privileges by using the su and sudo commands. Chapter 10, Managing Services with systemd provides more information on systemd and documents how to use the systemctl command to manage system services.
LANG=de_DE.UTF-8 LC_MESSAGES=C localectl status ~]USD localectl status System Locale: LANG=en_US.UTF-8 VC Keymap: us X11 Layout: n/a localectl list-locales ~]USD localectl list-locales | grep en_ en_AG en_AG.utf8 en_AU en_AU.iso88591 en_AU.utf8 en_BW en_BW.iso88591 en_BW.utf8 output truncated localectl set-locale LANG = locale ~]# localectl set-locale LANG= en_GB.utf8 LANG= en_US echo "%_install_langs USDLANG" > /etc/rpm/macros.language-conf yum-config-manager --setopt=override_install_langs=USDLANG --save %packages yum-utils* %end %_install_langs LANG override_install_langs= LANG localectl status ~]USD localectl status System Locale: LANG=en_US.utf8 VC Keymap: us X11 Layout: us localectl list-keymaps ~]USD localectl list-keymaps | grep cz cz cz-cp1250 cz-lat2 cz-lat2-prog cz-qwerty cz-us-qwertz sunt5-cz-us sunt5-us-cz localectl set-keymap map localectl set-x11-keymap map localectl --no-convert set-x11-keymap map ~]# localectl --no-convert set-x11-keymap de ~]USD localectl status System Locale: LANG=de_DE.UTF-8 VC Keymap: us X11 Layout: de localectl set-x11-keymap map model variant options