Некоторое несовпадение с локализацией

Стоит CLD достаточно давно. Ну прекратил собираться chromium - бывает, жаль что только весь процесс обновления не завершается. Но заинтересовало - ушел с cl-update на emerge -uDN --keep-going --fail-clean -autounmask-write system world посмотреть что будет

Угу - опять не собирается. Но вот что интересно - выдается два сообщения для начала:

setlocale: unsupported locale setting

setlocale: unsupported locale setting

Опаньки - лезу под root’ом в /etc/portage/make.conf/custom.cld на предмет того, что там я неправильно записал. Нет, там все правильно - LINGUAS=“en ru”, только вот русские комментарии в mc выглядят как-то странно: звездочки там и прочая псевдографика.

Если cat /etc/portage/make.conf/custom.cld, то все нормально - на экран выводится все что надо (в смысле на русском). В графической оболочке все нормально выглядит - кодировка правильная. Если запустить nano /etc/portage/make.conf/custom.cld - то кроме латиницы все остальное - несусветная хрень в файле.

И отсюда вопрос
Откуда предупреждения при запуске emerge? И как бы от этого избавиться? Локаль стоит нормальная (пробовал и из графической оболочки и из командной строки). Тогда откуда предупреждения возникли? И почему в редакторах, работающих в консоли вместо русских букв - нечто неудобочитаемое? Что читать и где искать? Куда идти кроме обычного в России направления?

У меня после обновления в nano тоже кракозяблы вместо кириллицы. В добавок интерфейс почти всех программ изменился на английский.

Ну то, что интерфейс сменился на английский - я отнес к тому, что KDE (а у меня KDE) просто плюнул на русскую локализацию - видимо нет желания или нет возможности делать русскую локализацию, в принципе нормально - особенно если делали не наши, а тут еще и всякие обострения с Россией… А вот с консолью - непонятно.

Не захотел я разбираться с локализацией, скачал последний образ CLD, установил, обновился - великий и могучий на месте :slight_smile:

Ну я наверное тоже к этому в конце концов приду, но пока выяснил, что в “обычной” консоли (которая по Ctrl+Alt+F"номерот 1 до 5" никаких глюков и косяков нет - все работает. Крякозябры только в “консоли из-под KDE”. Так что конфиги правлю в “честной” консоли и там же собираю. Но интересно

Сергей Казаков wrote:

Ну я наверное тоже к этому в конце концов приду, но пока выяснил, что в “обычной” консоли (которая по Ctrl+Alt+F"номерот 1 до 5" никаких глюков и косяков нет - все работает. Крякозябры только в “консоли из-под KDE”. Так что конфиги правлю в “честной” консоли и там же собираю. Но интересно

Господа - по Ctrl+Alt+F"номерот 1 до 5 - это типа консоль ядра. даже не консоль а вывод tty.

"Крякозябры только в “консоли из-под KDE” - это эмуляция терминала tty в определенной DE, которая едет через прослойку.
То-есть разные вещи. Вот Вам для размышления https://habr.com/company/neobit/blog/330764/
БЕЗ обид.

Я, конечно, чертовски извиняюсь за неправильую терминологию. Но не подскажет ли уважаемый “граммар-наци” в чем проблема и как ее (проблему) разрешить, раз уж он так снисходительно снизошел до указания на ошибки в терминологии? БЕЗ ОБИД - тем более как я понимаю, описание ошибки приведено мной достаточно доходчиво.

Вообще-то в приведенной мной ссылки все хорошо и подробно расписано и описано.
Без перехода на личности - прошу прощения, прошлый пост писал в запарке (борьба с 1С доведет до белого каления любого)

Если в кратце (с небольшими неточностями).
В так называемой консоли ядра (не совсем правильно название но назовем ее так) русификация зависит от одних пакетов русификации (например в debian от пакета console-cyrillic и пакетов шрифтов для консоли ядра, которые русифицирует только консоль-tty и не затрагивает DE). В графической оболочке используются в основном эмуляторы терминала (в XFCE "Терминал XFCE) и у них другие пакеты русификации не зависимые от русификаторов консоли ядра.
Возможны варианты с кривыми пакетами шрифтов.
Простой пример (в кальке не встречал такого под XFCE)
В Debian частенько отваливаются шрифты в ядерной консоли и весь русский язык - это кракозябры. Но если зайти по ssh с другой машины через эмулятор терминала - то все окей.

Вывод - ройте в сторону эмулятора терминала в KDE, может с шрифтами поиграться.

Сергей, представьте пожалуйста вывод следующих команд: equery u nano; equry u ncurses; grep -Ev “^#|^$” /etc/locale.gen; locale -a | grep -i ru; grep -Ev “^#|^$” /etc/env.d/02locale; grep -Ev “^#|^$” /etc/portage/make.conf/custom.cldc.

Команда:
equery u nano

Вывод:

Legend : U - final flag setting for installation]
[ : I - package is installed with flag ]
[ Colors : set, unset ]
* Found these USE flags for app-editors/nano-2.9.8:
U I

    • debug : Enable debug messages and assert warnings. Note that these will
      all be sent straight to stderr rather than some logging
      facility.
    • justify : Enable justify/unjustify functions for text formatting.
    • magic : Add magic file support (sys-apps/file) to automatically detect
      appropriate syntax highlighting
    • minimal : Disable all fancy features, including ones that otherwise have a
      dedicated USE flag (such as spelling).
    • ncurses : Add ncurses support (console display library)
    • nls : Add Native Language Support (using gettext - GNU locale
      utilities)
    • slang : Add support for the slang text display library (it’s like
      ncurses, but different)
    • spell : Add dictionary support
    • static : !!do not set this during bootstrap!! Causes binaries to be
      statically linked instead of dynamically
    • unicode : Add support for Unicode

Команда:

equry u ncurses

Вывод:
Legend : U - final flag setting for installation]
[ : I - package is installed with flag ]
[ Colors : set, unset ]
* Found these USE flags for sys-libs/ncurses-6.1-r2:
U I

    • abi_x86_32 : 32-bit (x86) libraries
    • ada : Add bindings for the ADA programming language
    • cxx : Build support for C** (bindings, extra libraries, code
      generation, …)
    • gpm : Add support for sys-libs/gpm (Console-based mouse driver)
    • minimal : Install a very minimal build (disables, for example,
      plugins, fonts, most drivers, non-critical features)
    • profile : Add support for software performance analysis (will likely
      vary from ebuild to ebuild)
    • static-libs : Build static versions of dynamic libraries as well
    • test : Enable dependencies and/or preparations necessary to run
      tests (usually controlled by FEATURES=test but can be
      toggled independently)
    • threads : Add threads support for various packages. Usually pthreads
    • tinfo : Build curses library (libncurses) sep from the low-level
      terminfo library (libtinfo) – usually needed only for
      binary packages – but it is binary compatible in either
      mode
    • trace : Enable test trace() support in ncurses calls
    • unicode : Add support for Unicode

Команда:
grep -Ev “#|$” /etc/locale.gen
Вывод: ничего (CR/LF)

Примечание: в файле /etc/locale.gen записано (cat /etc/locale.gen)

#------------------------------------------------------------------------------
# Modified Calculate Utilities 3.6.1.14
# Processed template files:
# /var/lib/layman/calculate/profiles/templates/3.6/2_ac_install_merge/sys-libs/glibc/locale.gen
# /var/lib/layman/calculate/profiles/templates/3.6/3_ac_install_live/1-merge/sys-libs/glibc/locale.gen
# For modify this file, create /etc/locale.gen.clt template.
#------------------------------------------------------------------------------

en_US.utf8 UTF-8
ru_RU.utf8 UTF-8

Команда:
locale -a | grep -i ru

Вывод:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
ru_RU.utf8

Команда:
grep -Ev “#|$” /etc/env.d/02locale

Вывод:ничего (CR/LF)

Примечание: в файле /etc/locale.gen записано (/etc/env.d/02locale):
#------------------------------------------------------------------------------
# Modified Calculate Utilities 3.6.1.14
# Processed template files:
# /var/lib/layman/calculate/profiles/templates/3.6/3_ac_install_live/1-merge/sys-apps/openrc/env.d/02locale
# For modify this file, create /etc/env.d/02locale.clt template.
#------------------------------------------------------------------------------

LANG=“ru_RU.utf8”
LC_NUMERIC=POSIX

Команда:
grep -Ev “#|$” /etc/portage/make.conf/custom.cldc

Вывод:grep: /etc/portage/make.conf/custom.cldc: No such file or directory

Примечание - файл /etc/portage/make.conf/custom.cldc не существует. Вместо него присутствует файл /etc/portage/make.conf/custom.cld Поэтому для этого файла команда:

grep -Ev “#|$” /etc/portage/make.conf/custom.cld

Вывод:ничего (CR/LF)

Сергей, по этим сообщениям очевидны проблемы с локалью:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
ru_RU.utf8

Выполните следующие:
locale-gen

И представьте пожалуйста вывод следующих команд.
Обращаю внимание, что я в прошлый раз ошибся с синтаксисом команды grep.
grep -Ev “^#|^$” /etc/locale.gen
grep -Ev “^#|^$” /etc/env.d/02locale
grep -Ev “^#|^$” /etc/portage/make.conf/custom.cld
eselect locale list
eselect profile list | grep \\*
locale -a | grep -i ru
Пояснение. Конструкция grep -Ev “^#|^$” <имя файла> показывает текстовый файл без пустых строк, и строк начинающихся с символа #.

Приведу, вывод этих команд у меня (с русификацией у меня все в порядке):

grep -Ev “^#|^$” /etc/locale.gen
en_US.utf8 UTF-8
ru_RU.utf8 UTF-8

grep -Ev “^#|^$” /etc/env.d/02locale
LANG=“ru_RU.utf8”
LC_NUMERIC=POSIX

eselect locale list
Available targets for the LANG variable:
[1] C
[2] en_US.utf8
[3] POSIX
[4] ru_RU.utf8 *
[ ] (free form)

eselect profile list | grep \\*
[49] distros:CLDC/amd64 (stable) *

locale -a | grep -i ru
ru_RU.utf8

grep -Ev “^#|^$” /etc/portage/make.conf/custom.cldc
MAKEOPTS="-j5"
Примечание: У меня профиль distros:CLDC/amd64, посему файл называется custom.cldc, a не custom.cld

Так же обращаю Ваше внимание, что в профилях calculate переменная LINGUAS по умолчанию не используется (вчера обнаружил!):
emerge --info | grep LINGUAS
Unset: CC, CPPFLAGS, CTARGET, CXX, LC_ALL, LINGUAS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

Вместо неё используется переменная L10N
emerge --info | grep L10N
L10N=“en be bg bs cs da de de-1901 es es-AR es-ES es-MX et fi fr fr-CA hr hu it kk lt lv nl pl pt pt-BR pt-PT ro ru sk sl sr sq sv uk”
(вывод команды приведен в сокращённом виде)

Ну-с, начну по порядку.
Для команд:
grep -Ev “#|$” /etc/locale.gen
grep -Ev “#|$” /etc/env.d/02locale
grep -Ev “#|$” /etc/portage/make.conf/custom.cld

Вывод один и тот же - пустая строка. Я прекрасно понимаю, что в выводе должно быть для

/etc/locale.gen:

n_US.utf8 UTF-8
ru_RU.utf8 UTF-8

Для /etc/env.d/02locale

LANG=“ru_RU.utf8”
LC_NUMERIC=POSIX

И много чего интересного для /etc/portage/make.conf/custom.cld - по крайней мере в tty1-6 это я могу видеть в mc и nano

Однако вывод команды grep в эмулированной консоли в KDE- пустая строка, т.е. утилита grep “не видит” в этих файлах ничего. Я в курсе возможностей grep, хотя конечно уже достаточно сильно подзабыл синтаксис команды, надо будет “перекурить” man’, да и просто найти приемлемое описание и перечитать (но все равно - огромное спасибо за детальное “разжевывание”, без дураков очень благодарен, особенно как это ни прискорбно - “за то, что думать не надо”).

Команда eselect locale list дает вывод:

/usr/bin/locale: Cannot set LC_CTYPE to default locale: No such file or directory
/usr/bin/locale: Cannot set LC_MESSAGES to default locale: No such file or directory
/usr/bin/locale: Cannot set LC_COLLATE to default locale: No such file or directory
Available targets for the LANG variable:
[1] C
[2] POSIX
[3] en_US.utf8
[4] ru_RU.utf8 *
[ ] (free form)

Команда eselect profile list | grep \\* дает вывод:

[48] distros:CLD/amd64 (stable) *

Команда locale -a | grep -i ru дает вывод:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
ru_RU.utf8

Ну и наконец команда emerge --info | grep LINGUAS для меня дает вывод:

setlocale: unsupported locale setting
setlocale: unsupported locale setting
LINGUAS=“en ru”

Опять же emerge --info | grep L10N выдает

setlocale: unsupported locale setting
setlocale: unsupported locale setting
L10N="en be bg bs cs da de de-1901 es es-AR es-ES es-MX et fi fr fr-CA hr hu it kk lt lv nl pl pt pt-BR pt-PT ro ru sk sl sr sq sv uk

Попробовал переопределить L10N через /etc/portage/make.conf/custom.cld - там было тупо прописано LINUGUAS=“en ru”. Закомментарил LINGUAS= и добавил L10N=“en ru”

Не изменилось ничего, в том смысле, что сообщение:“setlocale: unsupported locale setting” в консоли так и осталось, ну разве что теперь при команде:

emerge --info | grep LINGUAS

Вывод такой:

setlocale: unsupported locale setting
setlocale: unsupported locale setting
Unset: CC, CPPFLAGS, CTARGET, CXX, LC_ALL, LINGUAS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

Ну и конечно L10N=“en ru” теперь.

Похоже, буду готовиться к переустановке с флешки :frowning:

Сергей, вики-движок “срезал” синтаксис моей команды (чего я на заметил), поэтому вывод строк у Вас пустой. В конструкции grep перед символами # и $ должен стоять символ ^ (крышка).

Мне не понятно, выполняли ли Вы команду locale-gen,
поэтому еще раз ВЫПОЛНИТЕ КОМАНДЫ (ПОРЯДОК ВАЖЕН):
locale-gen
locale -a
Мне нужен вывод этих команд, а также содержимое файлов locale.gen, 02locale, custom.cld без комментариев и пустых срок.
Самое главное это locale-gen. Если после этого locale -a не выдаст ошибок, значит локаль Вы “починили”.

Команда locale-gen

Вывод

* Generating 2 locales (this might take a while) with 8 jobs

* (2/2) Generating ru_RU.UTF-8 … [ ok ]

* (1/2) Generating en_US.UTF-8 … [ ok ]

* Generation complete

* Adding locales to archive … [ ok ]

Файлы настроек просто приаттачил к сообщению

Команда locale -a

Вывод:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
en_US.utf8
ru_RU.utf8

custom.cld (3.21 KB)
02locale (437 Bytes)
locale.gen (523 Bytes)
custom.cld (3.21 KB)

Сергей, я предполагаю у Вас проблему с библиотекой glibc.
Сделайте резервную копию файла custom.cld.
Затем в нем оставьте только строку MAKEOPTS="-j8".
emerge -pek glibc (нужно чтобы эти пакеты обязательно поставились из бинарников)
eselect locale list
eselect locale set <номер локали с ru_RU.utf8> (скорее всего 4)
locale-gen (файл locale.gen должен быть таким, каким Вы мне его переслали)
Потом перешлите вывод этих команд:
locale
locale -a
Удачи!

Я ошибся в строке emerge -pek glibc
Правильно emerge -ek glibc

Ну - провел все, что нужно
Результат.

Команда locale (выполняется в консоли, эмулирующейся терминалом в KDE)

Вывод:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=cv_RU.UTF-8
LC_CTYPE=“cv_RU.UTF-8”
LC_NUMERIC=POSIX
LC_TIME=“cv_RU.UTF-8”
LC_COLLATE=“cv_RU.UTF-8”
LC_MONETARY=“cv_RU.UTF-8”
LC_MESSAGES=“cv_RU.UTF-8”
LC_PAPER=“cv_RU.UTF-8”
LC_NAME=“cv_RU.UTF-8”
LC_ADDRESS=“cv_RU.UTF-8”
LC_TELEPHONE=“cv_RU.UTF-8”
LC_MEASUREMENT=“cv_RU.UTF-8”
LC_IDENTIFICATION=“cv_RU.UTF-8”
LC_ALL=

Команда locale (выполняется в tty2 - “консоль по Ctrl+Alt+2”)

Вывод:

LANG=cv_RU.UTF-8
LC_CTYPE=“cv_RU.UTF-8”
LC_NUMERIC=POSIX
LC_TIME=“cv_RU.UTF-8”
LC_COLLATE=“cv_RU.UTF-8”
LC_MONETARY=“cv_RU.UTF-8”
LC_MESSAGES=“cv_RU.UTF-8”
LC_PAPER=“cv_RU.UTF-8”
LC_NAME=“cv_RU.UTF-8”
LC_ADDRESS=“cv_RU.UTF-8”
LC_TELEPHONE=“cv_RU.UTF-8”
LC_MEASUREMENT=“cv_RU.UTF-8”
LC_IDENTIFICATION=“cv_RU.UTF-8”
LC_ALL=

Команда locale -a (выполняется в консоли, эмулирующейся терминалом в KDE)

Вывод:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
en_US.utf8
ru_RU.utf8

Команда locale a (выполняется в tty2 “консоль по Ctrl+Alt+2”)

Вывод:

C
POSIX
en_US.utf8
ru_RU.utf8

Похоже, что Тимофей Захарчук высказал правильное предположение - проблема не в настройках Calculate, проблема в эмуляторе терминала в KDE (как вариант - в глюках, которые возникли при сборке эмулятора терминала с моими ключами компиляции). Попробую пересобрать все пакеты - точнее забрать их в бинарном виде уже готовые. Потом посмотрю что изменится.

Сергей, проблема не в эмуляторе терминала. Проблема в том, что системные переменные выдают cv_RU.UTF-8. А должны выдавать ru_RU.UTF-8 (кроме LC_NUMERIC=POSIX).
В консоле tty (Ctrl + Alt + F<1-6>) выполните:
locale
echo ‘LANG=“ru_RU.utf8”’ > /etc/env.d/02locale
echo ‘LC_NUMERIC=POSIX’ >> /etc/env.d/02locale
env-update && source /etc/profile
locale
Выдаст ли после этого cv_RU.UTF-8 (вместо ru_RU.UTF-8)?

Если не поможет, то:
export LANG=“ru_RU.utf8”
export LC_CTYPE=“ru_RU.utf8”
export LC_NUMERIC=“POSIX”
export LC_TIME=“ru_RU.utf8”
export LC_COLLATE=“ru_RU.utf8”
export LC_MONETARY=“ru_RU.utf8”
export LC_MESSAGES=“ru_RU.utf8”
export LC_PAPER=“ru_RU.utf8”
export LC_NAME=“ru_RU.utf8”
export LC_ADDRESS=“ru_RU.utf8”
export LC_TELEPHONE=“ru_RU.utf8”
export LC_MEASUREMENT=“ru_RU.utf8”
export LC_IDENTIFICATION=“ru_RU.utf8”
locale
Выдаст ли после этого cv_RU.UTF-8 (вместо ru_RU.UTF-8)?

Виноват - ввел в заблуждение, лень было перенаправлять вывод в файл и извлекать из файла вывод команды для tty2, поэтому не присматривался и просто взял с вывода эмуляции терминала в KDE. На самом деле было не так.

Команда locale (выполняется в консоли, эмулирующейся терминалом в KDE)

Вывод:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=cv_RU.UTF-8
LC_CTYPE=“cv_RU.UTF-8”
LC_NUMERIC=POSIX
LC_TIME=“cv_RU.UTF-8”
LC_COLLATE=“cv_RU.UTF-8”
LC_MONETARY=“cv_RU.UTF-8”
LC_MESSAGES=“cv_RU.UTF-8”
LC_PAPER=“cv_RU.UTF-8”
LC_NAME=“cv_RU.UTF-8”
LC_ADDRESS=“cv_RU.UTF-8”
LC_TELEPHONE=“cv_RU.UTF-8”
LC_MEASUREMENT=“cv_RU.UTF-8”
LC_IDENTIFICATION=“cv_RU.UTF-8”
LC_ALL=

Команда locale (выполняется в tty2 - “консоль по Ctrl+Alt+2”)

Вывод:

LANG=ru_RU.utf8
LC_CTYPE=“ru_RU.utf8”
LC_NUMERIC=POSIX
LC_TIME=“ru_RU.utf8”
LC_COLLATE=“ru_RU.utf8”
LC_MONETARY=“ru_RU.utf8”
LC_MESSAGES=“ru_RU.utf8”
LC_PAPER=“ru_RU.utf8”
LC_NAME=“ru_RU.utf8”
LC_ADDRESS=“ru_RU.utf8”
LC_TELEPHONE=“ru_RU.utf8”
LC_MEASUREMENT=“ru_RU.utf8”
LC_IDENTIFICATION=“ru_RU.utf8”
LC_ALL=

Команда locale -a (выполняется в консоли, эмулирующейся терминалом в KDE)

Вывод:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
en_US.utf8
ru_RU.utf8

Команда locale a (выполняется в tty2 “консоль по Ctrl+Alt+2”)

Вывод:
C
en_US.utf8
POSIX
ru_RU.utf8

Так что еще раз извиняюсь за неправильность предыдущего сообщения. Все же проблема похоже в эмуляторе.

Как называется эмулятор терминала? Попробуйте стереть его дефолтные конфиги в каталоге пользователя и root.