16.04 서버에서 로캘을 영구적으로 변경할 수 없음


9

새로운 Ubuntu 16.04 서버를 설정했지만 로케일 설정을 영구적으로 변경하려고하면 실패하고 POSIX 로케일로 되돌아갑니다.

입력 locale하면 다음이 생성됩니다.

LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

필자가 아는 바에 따르면 POSIX는 " 대체 ASCII 인코딩, C와 동일 합니다."라는 문서에 따르면 로케일이 전혀 설정되지 않았습니다 .

로케일을 보장 de_AT.utf8하고 en_US.utf8내 시스템에 있었다, 나는 실행 locale -a굴복하는 :

C
C.UTF-8
POSIX
de_AT.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8

과의 불일치를주의하십시오 C.UTF-8, 그러나 de_AT.utf8! 더 걱정되는 것은 POSIX가 세 번째 항목이며 다른 작업 시스템에서는 목록의 마지막 항목이라는 것입니다.

언어를로 변경하기 en_US.utf8위해을 입력했습니다 sudo update-locale LANG=en_US.utf8. 이 locale명령은 여전히 ​​POSIX 로캘을 보여줍니다. 로그 아웃 및 새 로그인 locale후에도 POSIX 로케일이 계속 표시되었습니다. 다시 부팅 한 후에도 localePOSIX 로캘이 계속 표시되었습니다.

그러나 내가 입력 export LANG=en_US.utf8하면 일시적으로 작동하지만 로그 아웃 할 때까지만 작동합니다. 따라서 로케일이 올바르게 생성되었다고 확신합니다.

아이디어가 없습니다. 모든 로케일을 재생성하려고 시도했지만 /etc/default/locale단순히 무시되는 것처럼 보입니다 .

완성을 위해 /etc/default/locale라인 만 포함LANG=en_US.utf8

UPDATE : // 나는 실행하려 sudo localectl set-locale LANG=en_US.UTF-8하고, localectl또한 로케일을 설정할 수 있지만 다시 부팅 한 후에도 저를 보여 locale여전히 POSIX와 비 ASCII 문자가 여전히 제대로 렌더링되지 않습니다 보여줍니다.


1
/etc/default/localePAM이 읽습니다. PAM을 비활성화 했습니까?
Gunnar Hjalmarsson

당신은 systemd방법 을 시도 했습니까 localectl set-locale LANG=C.UTF-8?
EdiD

@GunnarHjalmarsson 내가 알지 못합니다. 어떻게 확인할 수 있습니까?
MechMK1

@EdiD 시도, 재부팅, 변경 사항 없음
MechMK1

확실하지 않다. 새로 설치시 PAM을 사용하도록 설정해야하며의 내용을 변경하지 않은 경우 /etc/pam.d작동합니다. 그러나 지금은 해킹으로 /etc/profile.d/mylocalesetting.sh라인 을 생성 하고 추가 할 수 있습니다 export LANG=en_US.UTF-8.
Gunnar Hjalmarsson 17 년

답변:


10

내가 한 것은 결국 위의 기술의 조합입니다

내가 먼저 했어

dpkg-reconfigure locales

그리고 영어, utf8을 선택한 다음 :

localedef -i en_US -c -f UTF-8 en_US.UTF-8

/ etc / default / locale 을 다음과 같이 편집했습니다 .

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANGUAGE=en_US.UTF-8

그리고 재부팅 후 로케일 을 입력 하면 다음과 같이 보입니다.

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

그리고 더 이상 경고가 없습니다 ...


8

답변은 Gunnar Hjalmarsson이 의견에서 언급했듯이 실제로 PAM 관련이었습니다. PAM은을 통해 비활성화 sshd_config되었지만 솔직히 기억하지는 않습니다.

요약 : /etc/default/locale무시되고있는 것으로 보이면 PAM이 활성화되어 있는지 확인하십시오.


6

다음 명령을 실행하십시오.

locale-gen en_US.UTF-8
dpkg-reconfigure locale
dpkg-reconfigure keyboard-configuration
localedef -i en_US -c -f UTF-8 en_US.UTF-8
reboot
locale

작동하지 않았다. locale여전히 모든 것을 POSIX를 보여줍니다
MechMK1

나는 당신이 그 명령을 실행하는 데 뿌리를두고 있다고 가정합니까? 나는 화를 내지 않으려 고 노력하고있다.
Videonauth

그래 물론. 오류 메시지 나 이와 유사한 것이 없습니다.
MechMK1 2016 년

1
로케일을 의미 했습니까?
realtebo

나는 이것을하고 있는데 "dpkg-reconfigure locales"인 것처럼 보인다. 그러면 모든 것이 작동 할 것이다.
Hugo

0

새로운 16.04.5 VM을 배포 할 xrdp때 SSH 대신 이 정확한 문제가 발생했습니다 . 나는 다음을 추가하여 이것을 해결했다 /etc/pam.d/common-session.

session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale

로그인 방법에서 추가 언어와 문화에 민감하다면 /etc/pam.d/xrdp-sesman대신 다른 PAM 구성 파일 에 넣을 수 있습니다. 이것이 기본적으로없는 이유 일 수 있습니다. 이것은 새로운 VM 설치에서 기본적으로 다음 PAM 구성에 있습니다.

cron, lightdm *, login, polkit-1, sshd, su 및 sudo.

SSH 이외의 로그인 방법 으로이 문제가있는 사람에게 도움이되기를 바랍니다.

누구든지 PAM 구성 / common- * 수정에 대한 모범 사례를 알고 있습니까? 더 좋은 방법이 있다면 그것을 내리는 것이 좋을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.