wheeze 로케일 문제 - gnome-control-center 영역이 segfault와 충돌합니다.

wheeze 로케일 문제 - gnome-control-center 영역이 segfault와 충돌합니다.

지난 며칠 동안 제가 있는 곳에서 심각한 문제를 겪었습니다. 내 것은 일반적으로 "en_GB.UTF-8"입니다. apt를 실행할 때 갑자기 오류 메시지가 나타납니다.

Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 33, in <module>
from ALChacks import *
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module>
sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
NameError: name '_' is not defined
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en_gb",
LC_MONETARY = "en_gb",
LC_MEASUREMENT = "en_gb",
LC_NUMERIC = "en_gb",
LANG = "en_US.utf8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale. at /usr/share/perl5/Debconf/FrontEnd    /Gnome.pm line 97, <> line 1.

또한 "gnome-control-center-zone"을 실행하려고 하면 segfault 또는 GUI가 발생하지만 무엇이든 설정하려고 하면 segfault가 발생합니다. 오류 메시지의 "en_gb"에 유의하십시오. 소문자 "GB"는 유효하지 않습니다. 또한 내 시스템에는 en_US가 로케일로 존재하지 않는다고 생각합니다. 로그인하면 디렉터리 이름을 "내 언어가 변경되었습니다."로 바꿀지 묻는 대화 상자가 표시됩니다. 이는 약간 혼란스럽습니다. 업데이트 후에 시작되었다고 생각했지만 sid에서 gnome-shell 3.2를 설치하려고 시도했습니다(실수로 종속성을 충족하는 것이 쉬울 것이라고 생각하고 gnome 확장을 사용하고 싶었기 때문입니다). 다시 굴렸는데 뭔가 뒤틀리게 될까요? 그렇다면 무엇을 다시 설치해야 합니까?

/usr/bin/locale에 대한 출력:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=en_gb
LC_TIME=en_gb
LC_COLLATE="en_US.utf8"
LC_MONETARY=en_gb
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=en_gb
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

locale-a에 대한 출력:

C
C.UTF-8
en_GB
en_GB.iso88591
en_GB.utf8
POSIX

답변1

로케일 정의는 많은 디스크 공간을 차지하므로(사용 가능한 다양한 로케일을 모두 추가하는 경우) 데비안과 다른 배포판은 요청 시 이를 생성합니다. Debian에서는 dpkg-reconfigure locales(루트로) 실행하고 관심 있는 로캘을 선택합니다. 해당 상자를 선택하십시오( 사용하는 경우 en_US.utf8다른 변형 도 포함). en_US또한 일부 카테고리는 이상하게 선언되어 있습니다 en_gb. en_gb구성 파일()에서 해당 문자열을 검색하여 grep -r en_gb ~/.[!.]* /etc문제가 되는 파일을 수정하세요.

답변2

마침내 "en_gb"의 소스를 찾았습니다. Ran dconf(새로운 gconf2 스타일 gnome 구성 교체. 이전에 이러한 설정을 확인했어야 했습니다 :-). 시스템->지역 설정에서 짜잔! 바라보다! 그게 다야. "en_GB"로 변경하고 Gnome 세션을 다시 시작했습니다. /usr/bin/locale에 대한 출력은 이제 소문자 로케일이나 가짜 en_US 로케일 없이 예상대로 정확하게 표시됩니다. dconf 설정이 어떻게 잘못 설정되었는지 잘 모르겠습니다. 나는 그것을 한 기억이 없으며 그것을 바꾸고 싶은 이유를 생각할 수 없습니다. "gnome-control-center zone"도 이제 잘 작동합니다. 세그폴트도 없고 모든 것이 잘 작동하는 것 같습니다. 약간 허름하고 존재하지 않는 영역으로 인해 넘어질 수 있습니다. 물론 더 우아하게 실패하고 유익한 메시지를 제공하는 것이 그리 어렵지는 않을 것입니다. 유용한 조언을 주신 Giles에게 감사드립니다. 그는 구성 측면에 대해 옳았습니다. 어떻게 놓쳤는지 모르겠습니다. dconf 데이터가 실제로 어떻게 저장되는지 살펴봐야 합니다.

관련 정보