LINUX.ORG.RU

Слетели настройки языка и шрифта

 , ,


2

1

Собственно, _внезапно_ случилось оно. Коснулось и консоли, и графической среды: http://rghost.ru/42179598

Если же подключаться напрямую (на скрине - по ssh), то видно, что вместо кошерного терминуса в консоли теперь нечто невнятное. В кедах язык самопроизвольно поменялся на английский с русского.

Куда копать?

UPD. Почему-то в выводе eselect locale list отсутствовала локаль, отмеченная звездочкой. Исправил, разумеется.

Но почему так произошло, вопрос открытый...минус в карму мейнтейнеров калькулятора :(

★★

Последнее исправление: yura_ts (всего исправлений: 2)

Ответ на: комментарий от Deleted

Обновляюсь иногда...только я балбес, не отследил, после какого из обновлений всё плохо стало.

yura_ts ★★
() автор топика
Ответ на: комментарий от Deleted

Ну да, сейчас все пакеты — последний stable, из ~arch только огнелис вроде...

yura_ts ★★
() автор топика

Так, консоль отдельно (это в смысле совсем без иксов), граф. среда отдельно.

Консоль.

Повторяй за мной и сравнивай результат (а лучше - выложи сюда):
(P. S. Не обращай внимания на строки с cp1251 - это я экспериментировал :) )

$ emerge -pv terminus-font

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] media-fonts/terminus-font-4.38  USE="X center-tilde pcf psf ru-g -a-like-o -distinct-l -quote -raw-font-data -ru-dv -ru-i -ru-k" 0 kB

$ cat /etc/conf.d/consolefont | grep -v "^#" | grep -v "^$"
consolefont="ter-u16b"

$ cat /etc/conf.d/keymaps | grep -v "^#" | grep -v "^$"
keymap="ruwin_alt-UTF-8"
windowkeys="no"
extended_keymaps=""
dumpkeys_charset=""
fix_euro="NO"

##### Главное - keymap . Главное - UTF-8

$ cat /etc/locale.gen  | grep -v "^#" | grep -v "^$"
C UTF-8
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
ru_RU.CP1251 CP1251

##### Главное, чтобы были те локали, которые упоминаются в выводе команды locale

$ locale-gen
 * Generating 4 locales (this might take a while) with 1 jobs
 *  (1/4) Generating C.UTF-8 ...cannot open locale definition file `C': No such file or directory
 [ !! ]
 *  (2/4) Generating en_US.UTF-8 ... [ ok ]
 *  (3/4) Generating ru_RU.UTF-8 ... [ ok ]
 *  (4/4) Generating ru_RU.CP1251 ... [ ok ]
 * Generation complete

##### По-хорошему это должно было быть сделано изначально. Из разряда "не повредит"

$ cat /etc/env.d/02locale
LANG="en_US.UTF-8"
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="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=""

##### У тебя может быть везде ru_RU, у меня просто интерфейс на английском, мне так больше нравится

$ eselect locale list
Available targets for the LANG variable:
  [1]   C
  [2]   en_US.utf8
  [3]   POSIX
  [4]   ru_RU.cp1251
  [5]   ru_RU.utf8
  [6]   en_US.UTF-8 *
  [ ]   (free form)

##### Конфиг подтягивается из /etc/env.d/02locale ; просто проверка

$ cat /etc/rc.conf | grep unicode
# Set unicode to YES to turn on unicode support for keyboards and screens.
unicode="YES"

##### Переменная - маленькими буквами

$ emerge -pv bash

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] app-shells/bash-4.2_p39  USE="net nls (readline) -afs -bashlogger -examples -mem-scramble -plugins -vanilla" 0 kB

##### Флаг nls

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz

Большое спасибо за подробное объяснение.
См. стартовый пост.
Я поступил проще — eselect locale set N...

yura_ts ★★
() автор топика
Ответ на: комментарий от Kroz

grep -v «^#» | grep -v «^$»

Можно короче: grep «^[^#]»

/etc/env.d/02locale
LC_ALL=«»

Вот это сомнительно. Я когда смотрел насчёт установки LC_TIME отличного от LANG, где-то то ли в расширении хандбука, то ли в «большой книге генты» упоминалось, что установки LC_ALL надо избегать и использовать LANG.

emerge -pv bash

`equery u bash` было бы нагляднее.

Deleted
()
Ответ на: комментарий от Deleted

Вот это сомнительно. Я когда смотрел насчёт установки LC_TIME отличного от LANG, где-то то ли в расширении хандбука, то ли в «большой книге генты» упоминалось, что установки LC_ALL надо избегать и использовать LANG.

Как это аргументировалось? Интересно.

yura_ts ★★
() автор топика
Ответ на: комментарий от yura_ts

Написано было смотреть пояснения в мануале по локалям GNU. А там говорится, что LC_ALL это не переменная среды, а макрос для переназначения всех LC_* и LANG. Но он видимо не обладает функцией сброса локали в дефолт, если ему ничего не указано. На счастье таким вот умникам.

Deleted
()
Ответ на: комментарий от Deleted

The reason for why a Linux distribution should set LANG in /etc/profile is that this makes it most easy for user to override that system default using the individual LC_* variables. If LC_ALL is set, then this selective override functionality would not be available to users.

For example, I like to use LANG=en_GB.UTF-8 LC_COLLATE=C, because I do not like it if ls sorts filenames «properly». I want the broken^H^H^H^H^H^Htraditional binary sorting order that lists uppercase letters before lowercase ones.

LC_ALL is most useful to switch off any i18n-environment-variable dependent behaviour with LC_ALL=C. Programs (such as all known Linux releases of acroread) with loads of problems in their locale handling are best called with LC_ALL=C.

LC_ALL is best thought of as some kind of emergency override.

По идее, использование LC_ALL предназначено для «местной анастезии», т. е. для вызова вместе с программой, которая в текущей локали работает плохо или вообще никак. В противном случае, использованная глобально, LC_ALL делает невозможным переопределение LC_* переменных пользователем.

Deleted
()
Ответ на: комментарий от Deleted

Можно короче: grep «^[^#]»

Сейчас нет bash/grep под рукой, но, думаю, эта конструкция не отфильтрует пустые строки.

Вот это сомнительно. Я когда смотрел насчёт установки LC_TIME отличного от LANG, где-то то ли в расширении хандбука, то ли в «большой книге генты» упоминалось, что установки LC_ALL надо избегать и использовать LANG.

Не понял поста, но LC_ALL устанавливать нельзя, по крайней мере глобально. Нужно задавать LC_* переменные. LC_ALL - только индивидуально для программ, например:
$ LC_ALL=«ru_RU.cp1251» wine someprogram.exe

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Сейчас нет bash/grep под рукой, но, думаю, эта конструкция не отфильтрует пустые строки.

Отфильтрует. man -P «less +/'\s+Character Classes'» grep

Не понял поста, но LC_ALL устанавливать нельзя, по крайней мере глобально.

Если нельзя, тогда что она у тебя делает в 02locale в таком случае?

Deleted
()
Ответ на: комментарий от Deleted

Отфильтрует. man -P «less +/'\s+Character Classes'» grep

Ок, дома посмотрю, спасибо.

Если нельзя, тогда что она у тебя делает в 02locale в таком случае?

Она пустая. Явно указано что ее не использовать.

Kroz ★★★★★
()
Ответ на: комментарий от Deleted

Так. Ты на Gentoo? Тогда вот:
http://www.gentoo.org/doc/en/guide-localization.xml
«LC_ALL A special variable for overriding all other settings.»

Не на Gentoo? Тогда вот:
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ib...
«Overrides the value of the LANG environment variable and the values of any other LC_* environment variables.»

Или вот:
http://www.google.ru/search?&q=LC_ALL использование

То есть LC_ALL имеет приоритет над LC_*. У меня все LC_* работают, значит LC_ALL игнорится. ЧЯНТД?

Kroz ★★★★★
()
Ответ на: комментарий от Deleted

Вопрос ТС решен. Мой пост содержал правильный ответ (хотя ТС раньше его сам нашел).

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

Извини, но я все делаю правильно.

</thread>

Kroz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.