나는 사용한다xterm(StarNet Communications Corp의 X-Win32 2012 Build 30) Windows 7 PC에서 Red Enterprise Linux 6(RHEL6)에 로그인합니다.
내 문제는 xterm 로그인 쉘에서 모든 멀티바이트 utf-8 문자가 왜곡된다는 것입니다. 예를 들어, "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: ~/.Xresources의 리소스 설정은 xrdb와 병합하지 않으면 적용되지 않을 것 같습니다. Linux 시스템의 xterm 프로세스는 Windows 시스템에서 실행 중인 X 서버를 쿼리합니다. X-Win32 서버가 xterm이 시작될 때 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 통신용 X-Win32. Corp.는 내 PC를 X 터미널로 전환했고, RHEL6의 ssh 인스턴스와 통신하기 위해 X.11 프로토콜을 사용하여 두 개의 xterm 인스턴스가 PC에서 실행되었습니다. 적어도 저는 X11이 그렇게 작동한다고 믿습니다.
그러나 그것은 진실이 아니다. RHEL 서버에서 시작된 xterm 프로세스가 실행됩니다.존재하다그 서버. StarNet X 서버(X-Win32)와 통신하지만 xterm 프로세스는 시작된 위치에 남아 있습니다.
UTF-8로 xterm을 시작하는 가장 쉬운 방법은 다음과 같습니다.uxterm
스크립트(다음을 포함하는 동일한 패키지의 일부입니다.xterm
및 해당 리소스 파일). ~에 따르면xterm FAQ설명하다uxterm
:
X텀귀하의 로케일은 자동으로 설정되지 않습니다. 귀하의 로케일을 사용하도록 지시할 수 있습니다. 이것은 xterm의 리소스가 UTF-8로 인코딩되고 UTF-8 글꼴을 사용하도록 설정하는 쉘 스크립트입니다. 비슷한 것이 있습니다
lxterm
스크립트이지만 이식성이 없는 응용 프로그램에 의존합니다.uxterm
.
다른 의견에서 언급했듯이 로그인 시 환경 변수에는 부팅에 필요한 정보가 충분하지 않을 수 있습니다.xterm
UTF-8 인코딩(및 글꼴)을 자동으로 사용합니다. 이는 다음으로 인해 발생합니다.uxterm
스크립트.