Определения языка пользователя linux

Локализация Ubuntu Server 18.04 LTS

Локаль (locale или локализация) в Linux определяет, какой язык и какой набор символов (кодировку), пользователь видит в терминале. Посмотрим, как проверить текущие настройки языка и кодировки, как получить список всех доступных локалей, как сменить язык и кодировку для текущей сессии или установить их постоянно.

Для тех, кому лень читать всю статью до конца — чаще всего для локализации консоли достаточно повторно сконфигурировать пакет locales :

$ sudo dpkg-reconfigure locales

Сначала будут созданы нужные локали (их выбрать на первом экране), потом установлена локаль по умолчанию (ее выбрать на втором экране).

Текущие настройки языка

Посмотрим информацию о текущем языковом окружении:

$ locale LANG=C.UTF-8 LANGUAGE= LC_CTYPE="C.UTF-8" LC_NUMERIC="C.UTF-8" LC_TIME="C.UTF-8" LC_COLLATE="C.UTF-8" LC_MONETARY="C.UTF-8" LC_MESSAGES="C.UTF-8" LC_PAPER="C.UTF-8" LC_NAME="C.UTF-8" LC_ADDRESS="C.UTF-8" LC_TELEPHONE="C.UTF-8" LC_MEASUREMENT="C.UTF-8" LC_IDENTIFICATION="C.UTF-8" LC_ALL=

Список доступных локалей

Теперь посмотрим список всех установленных языков и кодировок:

Есть только системная локаль C.UTF-8 , которая присутствует всегда. А нам надо добавить еще две локали — en_US.UTF-8 и ru_RU.UTF-8 .

Добавить новую локаль

Смотрим список всех поддерживаемых (доступных для установки) локалей:

# This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add # user defined locales to /usr/local/share/i18n/SUPPORTED. If you change # this file, you need to rerun locale-gen. # aa_DJ ISO-8859-1 # aa_DJ.UTF-8 UTF-8 # . # en_US.ISO-8859-15 ISO-8859-15 # en_US.UTF-8 UTF-8 # en_ZA ISO-8859-1 # . # ru_RU.KOI8-R KOI8-R # ru_RU.UTF-8 UTF-8 # ru_UA KOI8-U # . # zu_ZA ISO-8859-1 # zu_ZA.UTF-8 UTF-8

Устанавливаем нужные локали — en_US.UTF-8 и ru_RU.UTF-8 :

$ sudo locale-gen en_US.UTF-8 ru_RU.UTF-8 Generating locales (this might take a while). en_US.UTF-8. done ru_RU.UTF-8. done Generation complete.

Второй способ установить локали — расскомментровать нужные строки в файле /etc/locale.gen

# This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add # user defined locales to /usr/local/share/i18n/SUPPORTED. If you change # this file, you need to rerun locale-gen. # aa_DJ ISO-8859-1 # aa_DJ.UTF-8 UTF-8 # . # en_US.ISO-8859-15 ISO-8859-15 en_US.UTF-8 UTF-8 # en_ZA ISO-8859-1 # . # ru_RU.KOI8-R KOI8-R ru_RU.UTF-8 UTF-8 # ru_UA KOI8-U # . # zu_ZA ISO-8859-1 # zu_ZA.UTF-8 UTF-8

И просто выполнить команду locale-gen без указания локалей:

Читайте также:  Kali linux wallpaper android

Подробная информация о локалях

Более подробную информацию об установленных в системе локалях можно посмотреть так:

$ locale -a -v locale: en_US.utf8 archive: /usr/lib/locale/locale-archive ------------------------------------------------------------------------------- title | English locale for the USA source | Free Software Foundation, Inc. address | http://www.gnu.org/software/libc/ email | bug-glibc-locales@gnu.org language | American English territory | United States revision | 1.0 date | 2000-06-24 codeset | UTF-8 locale: ru_RU.utf8 archive: /usr/lib/locale/locale-archive ------------------------------------------------------------------------------- title | Russian locale for Russia source | RAP address | Sankt Jorgens Alle 8, DK-1615 Kobenhavn V, Danmark email | bug-glibc-locales@gnu.org language | Russian territory | Russia revision | 1.0 date | 2000-06-29 codeset | UTF-8 locale: ru_UA.utf8 archive: /usr/lib/locale/locale-archive ------------------------------------------------------------------------------- title | Russian locale for Ukraine source | RFC 2319 email | bug-glibc-locales@gnu.org language | Russian territory | Ukraine revision | 1.0 date | 2000-06-29 codeset | UTF-8 locale: C.UTF-8 directory: /usr/lib/locale/C.UTF-8 ------------------------------------------------------------------------------- title | C locale email | aurel32@debian.org language | C revision | 1.6 date | 2016-08-08 codeset | UTF-8

Часть локалей размещена в архиве /usr/lib/locale/locale-archive , а часть — в директориях внутри /usr/lib/locale/ .

Локаль по-умолчанию

Хорошо, нужные локали у нас теперь есть, осталось только задать локаль по умолчанию:

$ sudo update-locale LANG=ru_RU.UTF-8

Эта команда запишет в файл /etc/default/locale строку:

После этого надо будет перезайти в систему. И проверяем информацию о языковом окружении:

$ locale LANG=ru_RU.UTF-8 LANGUAGE= LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL=

Теперь все правильно, так что запишем эту информацию в файл /etc/default/locale :

$ locale | sudo tee /etc/default/locale
LANG=ru_RU.UTF-8 LANGUAGE= LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL=

Переменная окружения LANG — это локаль по умолчанию. Локаль, установленная в этой переменной, используется в качестве значения для всех остальных переменных LC_XXXXX , которые не установлены явно. Переменная окружения LC_ALL переопределяет своим значением все переменные LC_XXXXX , включая LANG — независимо от того, установлены они или нет.

Быстрая локализация

До сих пор мы все делали ручками, но если лень — можно просто повторно сконфигурировать пакет locales . Сначала будут созданы нужные локали (их нужно выбрать на первом экране), потом установлена локаль по умолчанию (ее нужно выбрать на втором экране).

$ sudo dpkg-reconfigure locales

Удалить лишние локали

После установки (генерации) локали, она помещается в архив /usr/lib/locale/locale-archive . Файл архива — это файл, отображаемый в память, который содержит все локали системы; он используется всеми локализованными программами. Посмотреть список локалей в архиве можно с помощью команды:

$ localedef --list-archive en_US.utf8 ru_RU.utf8 ru_UA.utf8

Удалить заданную локаль из файла архива:

$ sudo localedef --delete-from-archive ru_UA.utf8

Обратите внимание на название локали — ru_UA.utf8 , а не ru_UA.UTF-8 . Если неправильно указать локаль — она не будет удалена из архива:

$ sudo localedef --delete-from-archive ru_UA.UTF-8 locale "ru_UA.UTF-8" not in archive

В случае, если утилита locale-gen была вызвана с опцией —no-archive , надо удалить соответствующую директорию в /usr/lib/locale :

$ cd /usr/lib/locale $ ls C.UTF-8 en_US.utf8 ru_RU.utf8 ru_UA.utf8 $ sudo rm -r ru_UA.utf8

Есть еще один способ удалить лишние локали — закомментровать в файле /etc/locale.gen строки локалей, которые больше не нужны — и запустить locale-gen без параметров.

Читайте также:  Radeon vega series linux

Переводы для системных программ

Локализация для основных системных программ, чтобы получать сообщения на русском языке:

$ sudo apt install language-pack-ru

Локализация для текущей сессии

Достаточно временно установить переменную окружения LANG в текущей сессии терминала:

$ export LANG=en_US.UTF-8 $ cat /etc/shadow cat: /etc/shadow: Permission denied
$ export LANG=ru_RU.UTF-8 $ cat /etc/shadow cat: /etc/shadow: Отказано в доступе

Или даже так — передать переменную LANG конкретной программе:

$ export LANG=en_US.UTF-8 $ cat /etc/shadow cat: /etc/shadow: Permission denied $ LANG=ru_RU.UTF-8 cat /etc/shadow cat: /etc/shadow: Отказано в доступе

Файлы конфигурации шрифта и клавиатуры

Настройки можно найти в файлах конфигурации /etc/default/console-setup и /etc/default/keyboard :

$ cat /etc/default/console-setup
# Consult the console-setup(5) manual page. ACTIVE_CONSOLES="/dev/tty4" CHARMAP="UTF-8" CODESET="CyrSlav" FONTFACE="Fixed" FONTSIZE="8x16" VIDEOMODE=
# Consult the keyboard(5) manual page. XKBMODEL="pc105" XKBLAYOUT="us,ru" XKBVARIANT="," XKBOPTIONS="grp:alt_shift_toggle,grp_led:scroll" BACKSPACE="guess"

Это системные настройки, пользователь может создать свои в файлах ~/.console-setup и ~/.keyboard .

Настройка шрифта и клавиатуры

Чтобы сформировать файлы конфигурации /etc/default/console-setup и /etc/default/keyboard можно использовать команды:

$ sudo dpkg-reconfigure console-setup

$ sudo dpkg-reconfigure keyboard-configuration

После того, как файлы конфигурации будут сформированы, нужно выполнить команду setupcon без аргументов или перезагрузить систему.

Console-cyrillic — это пакет для руссификации консоли (поддержки кириллицы в терминале), старый и известный пакет. Но в новых версиях операционных систем с системой инициализации systemd он считается устаревшим, поскольку у systemd есть нативные средства локализации консоли и наличие console-cyrillic там не только не требуется, но и не рекомендуется.

Команда localectl предоставляет возможности для централизованного управления языковыми и региональными параметрами.

$ localectl --help localectl [OPTIONS. ] COMMAND . Query or change system locale and keyboard settings. Commands: status Show current locale settings set-locale LOCALE. Set system locale list-locales Show known locales set-keymap MAP [MAP] Set console and X11 keyboard mappings list-keymaps Show known virtual console keyboard mappings set-x11-keymap LAYOUT [MODEL [VARIANT [OPTIONS]]] Set X11 and console keyboard mappings list-x11-keymap-models Show known X11 keyboard mapping models list-x11-keymap-layouts Show known X11 keyboard mapping layouts list-x11-keymap-variants [LAYOUT] Show known X11 keyboard mapping variants list-x11-keymap-options Show known X11 keyboard mapping options Options: -h --help Show this help --version Show package version --no-pager Do not pipe output into a pager --no-ask-password Do not prompt for password -H --host=[USER@]HOST Operate on remote host -M --machine=CONTAINER Operate on local container --no-convert Don't convert keyboard mappings See the localectl(1) man page for details.
$ localectl status System Locale: LANG=ru_RU.UTF-8 VC Keymap: n/a X11 Layout: us,ru X11 Model: pc105 X11 Variant: , X11 Options: grp:alt_shift_toggle
$ localectl list-locales C.UTF-8 en_US.UTF-8 ru_RU.UTF-8 ru_UA.UTF-8

Источник

Читайте также:  Run source code linux

Как определить язык ввода в консоли?

Всем привет. Хотелось бы вывести на панельку статуса tmux инфу о том, какой язык ввода используется, каким образом это можно сделать? Где хранится инфа об используемом языке?

gentoo 3.17, keymap ruwin_alt_sh-UTF-8, tmux 1.9a, agetty

(2 языка ввода, переключение настроено через alt+shift, никакие леды не подсвечиваются, т.е. по ним определить не получится)

xset это чтото из Xorga? Мне бы в чистой консоли.

Можно рисовать раскладку, только если используешь tmux на локальной машине (например вместо вкладок терминала). Тут уж точно xset есть, так как переключение раскладки настроено очевидно в xorg.

На удалённых машинах нельзя, так как раскладка меняется локально и удалённая машина о ней не знает.

Не подходит индикатор раскладки в трее? Чтото вроде xxkb/kbdd

В иксах хватает индикатора в трее. Как сделать определение без иксов. Нет никаких xsel и тому подобных, только agetty в ней запускается какимто образом расскладка из /etc/conf.d/keymaps, возможно какимто драйвером клавиатуры типа kbd. Если keymaps настроен на переключение языка с подсветкой леда, к примеру на caps lock, то теоретически можно попробовать узнать язык ввода по индикатору капс, поэкспериментировав с командой kbdinfo gkbled, но при alt+shift никакой индикации при переключении языка нет. Каким еще образом можно определить язык?

Ядерный модуль с выводом в /proc/mydriver

поэкспериментировав с командой kbdinfo gkbled, но при alt+shift никакой индикации при переключении языка нет

См. как определяется статус индикатора в my_timer_func

Источник

Оцените статью
Adblock
detector