로그인 쉘 xterm이 utf-8을 사용하도록 만드는 방법은 무엇입니까?

로그인 쉘 xterm이 utf-8을 사용하도록 만드는 방법은 무엇입니까?

나는 사용한다xterm(StarNet Communications Corp의 X-Win32 2012 Build 30) Windows 7 PC에서 Red Enterprise Linux 6(RHEL6)에 로그인합니다.

내 문제는 모든 멀티바이트 utf-8 문자가 xterm 로그인 쉘에서 깨져 나오는 것입니다. 예를 들어, 문자열 "Wilhelm Röntgen"이 두 셸 인스턴스에서 렌더링되는 방법은 다음과 같습니다(사용된 글꼴은 유니코드 글꼴이며 두 셸 인스턴스 모두에서 동일한 글꼴입니다).

 Login shell: Wilhelm Röntgen
 Second shell: Wilhelm Röntgen

내가 올바르게 이해했다면 StarNet Communications Corp의 소프트웨어는 X 터미널(X 서버를 실행하는 씬 클라이언트)을 구현(또는 에뮬레이트)합니다. 즉, 두 셸 인스턴스는 모두 PC의 X 터미널 창에서 실행되며 X11 프로토콜을 사용하여 RHEL6과 통신합니다. 다음은 두 셸이 내 데스크탑에 나타나는 방식이며, 유니코드 멀티바이 문자가 포함된 파일을 터미널에 연결합니다.

여기에 이미지 설명을 입력하세요

다음은 로그인 셸을 시작하는 데 사용하도록 X-Win32를 구성한 명령입니다.

xterm -u8 -ls

하지만,~ 후에로그인하고 로그인 쉘에서 수행할 수 xterm있으며 로케일 설정이 예상대로 작동하는 새 xterm 인스턴스를 포크하는 명령입니다(즉, utf-8 문자가 올바르게 렌더링됩니다).

로그인 셸에 나타나는 관련 설정은 다음과 같습니다.

$ locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE=C
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=

$ printenv XTERM_LOCALE
en_US.UTF-8

.Xresources에는 다음 두 줄도 있습니다.

xterm*locale: true
xterm*utf8: 1

로그인 쉘 xterm이 내가 설정한 로케일을 인식하지 못하는 것 같지만 왜 인식하지 못하는지 모르겠습니다. 로그인하지 않은 모든 쉘은 기본적으로 이 작업을 수행하므로 내 xterm은 분명히 이를 수행할 수 있습니다.

답변1

원격 컴퓨터의 sshd 프로세스가 /usr/bin/xterm을 실행하기 위해 분기될 때 환경 변수 세트가 거의 없습니다. 실제로 LANG 변수는 설정되지 않았습니다. 따라서 xterm 프로세스는 UTF-8로 문자를 표시해야 한다는 것을 모릅니다. xterms 기본값으로 돌아갑니다. 그것이 무엇이든 간에.

그러나 xterm 내부에서 실행되는 하위 쉘은 모든 설정 스크립트 등을 실행합니다. LANG 환경 변수 설정을 포함합니다.

원격 xterm 프로세스와 xterm 내부에서 실행되는 셸 프로세스 간의 차이점을 이해해야 합니다.

해결책은 다음과 같이 원격 xterm 프로세스를 실행하는 것입니다.

/usr/bin/env LANG=en_US.UTF-8 /usr/bin/xterm

env(1)은 수정된 환경에서 프로그램을 실행하는 유틸리티입니다.

LANG을 설정하면 원격 xterm이 UTF-8 문자를 올바르게 표시하게 됩니다.

에스킬... :-)

추신: xterm 매뉴얼 페이지를 읽으면서 이를 달성하는 더 쉬운 방법도 찾았습니다.

xterm -en en_US.UTF-8

PP: xrdb와 병합하지 않으면 ~/.Xresources의 리소스 설정이 적용되지 않을 것이라고 생각합니다. Linux 컴퓨터의 xterm 프로세스는 Windows 컴퓨터에서 실행 중인 X 서버를 쿼리합니다. xterm이 시작될 때 X-Win32 서버에 xterm* 리소스 세트가 있을 가능성은 거의 없습니다. 하지만 X-Win32가 지원한다면 X-Win32에서 리소스를 설정할 수도 있습니다.

답변2

xterm유니코드 글꼴을 사용하라는 말씀은 아닌 것 같습니다 . 나는 당신이 xterm-compiled-for-Windows 등을 사용하고 있지만 Arch(및 기타 배포판)에서 실행할 때진짜xterm, 나는 다음과 같이 시작합니다:

xterm -u8 -fn '-misc-fixed-bold-r-normal--15-140-75-75-c-90-iso10646-1'

또 다른 Windows 터미널 에뮬레이터,퍼티, UTF-8을 표시하는 데 꽤 능숙한 것 같습니다. 허용되는 경우 PuTTY를 넣고 UTF-8 문자 집합을 사용하도록 설정한 후 Red Hat 서버에 연결해야 합니다. PuTTY가 멀티바이트 UTF-8 문자를 올바르게 렌더링하는 경우 문제가 서버 측이 아니라 터미널 에뮬레이터에 있다는 것을 알 수 있습니다.

답변3

질문과 후속 의견은 약간의 혼란을 나타냅니다. StarNet의 지식베이스 기사에 따르면내 터미널 에뮬레이터는 어디에 있나요?

X-Win32는 원격 그래픽 응용 프로그램을 표시하는 것이 주요 목적인 X 서버입니다. 대부분의 최신 Unix/Linux 시스템에는 X 라이브러리에 X 기반 터미널 에뮬레이터가 포함되어 있습니다. 따라서 X-Win32에는 기본적으로 하나가 포함되어 있지 않습니다.

@bruce-ediger가 질문에 추가한 의견은 다음과 같습니다.

RHEL 서버에서 xterm 프로세스가 실행되고 있지 않다고 생각합니다.When I type in xterm in the shell on RHEL, all it does is to send a message to the X windows server on the PC, requesting that it creates another xterm process/window.StarNet Comm의 X-Win32. Corp.는 내 PC를 X 터미널로 바꾸고 X.11 프로토콜을 사용하여 두 xterm 인스턴스가 모두 PC에서 실행되어 RHEL6의 ssh 인스턴스와 통신합니다. 적어도 그것이 X11이 작동한다고 믿는 방식입니다.

그러나 그것은 작동하는 방식이 아닙니다. RHEL 서버에서 시작된 xterm 프로세스가 실행됩니다.~에그 서버. StarNet X 서버(X-Win32)와 통신하지만 xterm 프로세스는 시작된 위치에 유지됩니다.

UTF-8을 사용하여 xterm을 시작하는 가장 간단한 방법은uxterm스크립트(다음을 포함하는 동일한 패키지의 일부임)xterm및 해당 리소스 파일). 에 따르면xterm FAQ묘사하는uxterm:

X텀로케일을 자동으로 설정하지 않습니다. 로케일 설정을 사용하라는 지시를 받을 수 있습니다. 이것은 UTF-8 인코딩을 사용하고 UTF-8 글꼴을 사용하도록 xterm의 리소스를 설정하는 쉘 스크립트입니다. 비슷한 것이 있습니다lxterm스크립트와는 달리 이식성이 없는 응용 프로그램에 의존합니다.uxterm.

다른 의견에서 언급했듯이 로그인 시 환경 변수에 시작하기에 충분한 정보가 없을 수 있습니다.xtermUTF-8 인코딩(및 글꼴)을 사용하여 자동으로. 그것은에 의해 수행됩니다uxterm스크립트.

관련 정보