想像する:
tmuxセッションが実行されるサーバーがあります。私たちはこのセッションをtmux_session
この記事の残りの部分で。
このセッションに接続する方法にはわずかに異なる2つの方法があります。
まず、SSHを介してサーバーに接続します。
user@host$ ssh [email protected]
次に、指定されたセッションに追加します。
user@server$ tmux a -d -t tmux_session
SSH接続と同時に接続を介して:
user@host$ ssh [email protected] -t tmux -a -d -t tmux_session
兆候:
方法1期待どおりに動作します。鉱山は-ingLANG
に設定されておりC.UTF-8
、echo
そこで正しく機能し、tmux_session
正しく報告します。 Unicode入力文字(「123¤」など)は正常に機能します。
方法2単純ASCII以外のUnicode文字を表示できないセッションを作成します。他のすべての文字は_
(アンダースコア)に置き換えられます。しかしいつ入力する内部で実行されるすべてのアプリケーションに実際に入力される特殊文字でtmux_session
、エディタ、IRC クライアントなどを使用して確認しました。方法1を使用して取り外して再度取り付けると、以前に入力した文字が正しく表示されます。
方法2を使用する場合、この問題はsshコマンドを使用してセッションに接続するときにのみ発生し、実際の入力文字ではなく文字表示にのみ影響します。
しかし、内部出力の一部は両方tmux
ともわずかに破損しています。echo $LANG
内部に入るときにtmux_session
使う誰でも方法を見ると、次のようになります。
$ echo $LANG
cho C.UTF-8C.UTF-8
一部の内容が壊れて、何らかの理由で入力行が(部分的に)重複しています。私は最初にsuperuser.comの他の投稿から削除を試す必要があることを読んでいます。したがって、ファイルがなくても問題が軽減されないようです.tmux.conf
。.tmux.conf
とにかく$LANG
に設定するC.UTF-8
のが正しいです。
SSHを介してのみサーバーに接続すると、この誤った出力は発生しません。
答え1
セッション内でロケール設定を確認し、それ自体で受信したロケール設定を確認しませtmux
んtmux
。
server.ltd
おそらくAcceptEnv LANG LC_*
その中にないsshd_config
か、あなたのものにはないでしょうから、ローカルシステムと端末がUTF-8を文字セットとして使用しているという事実はリモートクライアントに送信されません。SendEnv LANG LC_*
ssh_config
tmux
次の手順で問題を解決できます。
ssh -t [email protected] "
set -o allexport
$(locale | grep -v '"')
exec tmux -a -d -t tmux_session"
(ローカルシェルとリモートユーザーのログインシェルがPOSIXに似ていると仮定)
または、端末がUTF-8で通信していることがわかっている場合は、目的のUTF-8ロケールをハードコードしてください。
ssh -t [email protected] 'exec env LANG=C.UTF-8 tmux -a -d -t tmux_session'
(すべてのシェルで理解される構文)
答え2
tmux -u
$LANGが正しく設定されていない場合でも、強制的にutf-8に出力するために使用できます。