私は使うxterm(StarNet Communications CorpのX-Win32 2012 Build 30)Windows 7 PCでRed Enterprise Linux 6(RHEL6)にログインします。
私の問題は、xtermログインシェルですべてのマルチバイトutf-8文字が歪んでいることです。たとえば、「Wilhelm Röntgen」という文字列を2つのシェルインスタンスでレンダリングする方法は次のとおりです(使用されているフォントはUnicodeフォントで、両方のシェルインスタンスで同じフォントが使用されます)。
Login shell: Wilhelm Röntgen
Second shell: Wilhelm Röntgen
私が正しく理解したら、StarNet Communications CorpのソフトウェアはX端末(Xサーバーを実行しているシンクライアント)を実装(またはエミュレーション)します。つまり、両方のシェルインスタンスはPCのX端末ウィンドウで実行され、X11プロトコルを使用してRHEL6と通信します。 Unicode マルチバイト文字を含むファイルを端末に接続する 2 つのシェルがデスクトップに表示される方法は次のとおりです。
以下は、ログインシェルを起動するために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には次の2行もあります。
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文字を正しく表示します。
エスキル...:-)
PS:xtermのマニュアルページを読んでこれを達成するより簡単な方法も見つけました。
xterm -en en_US.UTF-8
PP:〜/ .Xresourcesのリソース設定は、xrdbとマージしない限り適用されないようです。 Linuxシステムのxtermプロセスは、Windowsシステムで実行されているXサーバーを照会します。 X-Win32サーバーがxtermの起動時にxterm *リソースを設定することはほとんどありません。ただし、X-Win32でサポートされている場合は、X-Win32でリソースを設定できます。