Обычно я устанавливаю все настройки локали на 'C'. Это то, к чему я привык. Мне нравится ls
сортировать вещи так, как я привык за последние несколько десятилетий.
Представьте себе мое удивление и смятение, когда я установил LANG=C
свой .bashrc
, а теперь, когда я вхожу в систему, там нет оконного менеджера.
Это можно исправить?
Обновлять:Может быть LC_ALL=C
. Один из двух его ломает. LC_COLLATE=C
исправляет некоторые вещи, но не другие.
-Э
Linux xxxx 3.10.0-957.10.1.el7.x86_64 #1 SMP Mon Mar 18 15:06:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
решение1
Одной из функций, относящихся к системе, на которую влияют региональные настройки, являетсякодировка текста, или "charset", или "codepage" – взято из параметра LC_CTYPE. Хотя во многих ситуациях кодировка текста задается спецификацией (например, строки протокола D-Bus всегда UTF-8), есть также много мест, где кодировка не указана и должна быть взята из текущей локали системы.
В частности,имена файловчасто отображаются в соответствии с текущей кодировкой текста локали. Программы, написанные на Python 3, например, используют текущую кодировку локали, если программа забывает указать иное.
Локаль «C» подразумевает 7-битную текстовую кодировку ASCII (ANSI_X3.4-1968), и часть вашей проблемы может заключаться в том, что, хотя многие программы (в основном написанные на C) интерпретируют это как допускающие произвольные 8-битные значения, существует также много программ, которые имеют гораздо более строгую интерпретацию иотклонятьлюбые значения выше 127 (т.е. не ASCII) как недействительные. Возможно, ошибка декодирования вызвана каким-то именем файла, или каким-то параметром конфигурации, или каким-то другим текстовым файлом.
Фактически, на этом этапе вы даже обнаружите программы, которые напрочь отказываются работать с локалью, в которой указана кодировка текста ASCII — некоторые из них требуют именно UTF-8 (например, gnome-terminal), а некоторые другие требуют любую 8-битную кодировку.
Если ваш дистрибутив применяет патч «C.UTF-8» к libc, используйте его:
LANG=C.UTF-8
Если нет, то воспользуйтесь одним из следующих способов:
LANG=ru_RU.UTF-8 LC_TIME=С LC_COLLATE=C LC_MESSAGES=С
ЯЗЫК=С LC_CTYPE=en_US.UTF-8
(Вы можете запустить его locale charmap
, чтобы увидеть, какая кодовая страница действует в соответствии с текущими переменными среды — в обоих случаях должно быть указано UTF-8. Если вы выберете третий вариант, остерегайтесь глючных программ, которые напрямую обращаются к $LANG вместо вызоваnl_langinfo(КОД НАБОР)как и должно быть.)