Назад | Перейти на главную страницу

Настройки локали Debian Squeeze

У меня проблема со слегка настроенным образом Debian, над которым я пытаюсь работать без головы. Проблема в том, что список установленных локалей был сокращен до следующего:

C
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
POSIX

Однако когда я вхожу в систему как root (с профилем как ванильный), я обнаруживаю следующее:

~# set | grep LC_
LC_CTYPE=en_US.UTF-8

Это единственный набор переменных среды LC_, и, предположительно, это означает, что он явно где-то установлен (и, учитывая, что / etc / default / locale содержит только LANG = en_GB, я не вижу другой альтернативы). Однако я не вижу, где он устанавливается, и тот факт, что это неправильно, мешает, например, установке postgresql-8.4. Я знаю, что могу

LC_CTYPE=en_GB apt-get install postgresql-8.4

чтобы обойти это, но мне бы очень хотелось понять, откуда взялся этот параметр, и я действительно не нравится идея установки ненужного в противном случае языкового стандарта, чтобы избавиться от этого. Итак: откуда взялась эта настройка LC_CTYPE и как ее убрать?

Для справки в будущем я обнаружил проблему, и она не имеет ничего общего с Bash.

Проблема в том, что sshd_config имеет следующую запись:

AcceptEnv LANG LC_*

Это позволяет моим локальным переменным среды с именем LC_whatever (включая LC_CTYPE, проблемный) переопределять удаленные настройки, поэтому, когда я подключился, процесс ssh соответствующим образом установил свои переменные среды, а процесс bash послушно их унаследовал. Нигде в этом процессе нет проверки, что параметр LC_CTYPE действителен на дальней стороне SSH-соединения.

Мое временное решение - указать заведомо исправный LC_CTYPE в конкретной команде, которую я запускаю на дальней стороне. Я не знаю, какое «правильное» решение этой проблемы.

Вы можете установить недостающие языковые стандарты:

apt-get install debconf
dpkg-reconfigure locales

Выберите языковые стандарты, которые вы хотите установить.