LANG=C를 설정하면 CentOS 7에서 콘솔 로그인이 중단되는 이유

LANG=C를 설정하면 CentOS 7에서 콘솔 로그인이 중단되는 이유

나는 일반적으로 모든 로케일 설정을 '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

로케일 설정의 영향을 받는 시스템과 관련된 기능 중 하나는텍스트 인코딩, 또는 "문자 세트" 또는 "코드 페이지" – 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-8을 요구합니다. 비트 인코딩.

배포판이 "C.UTF-8" 패치를 libc에 적용하는 경우 다음을 사용하십시오.

LANG=C.UTF-8

그렇지 않은 경우 다음 중 하나를 사용하십시오.

LANG=en_US.UTF-8
LC_TIME=C
LC_COLLATE=C
LC_MESSAGES=C
LAN=C
LC_CTYPE=en_US.UTF-8

(현재 환경 변수에 따라 어떤 코드 페이지가 적용되는지 확인하기 위해 실행할 수 있습니다. locale charmap두 경우 모두 UTF-8이어야 합니다. 세 번째 옵션을 선택하는 경우 호출하는 대신 $LANG을 직접 보는 버그가 있는 프로그램에 주의하세요.nl_langinfo(코드셋)그래야 하는 것처럼.)

관련 정보