SSH経由でtmuxセッションに接続するときのUTF-8の問題

SSH経由でtmuxセッションに接続するときのUTF-8の問題

想像する:

tmuxセッションが実行されるサーバーがあります。私たちはこのセッションをtmux_sessionこの記事の残りの部分で。

このセッションに接続する方法にはわずかに異なる2つの方法があります。

  1. まず、SSHを介してサーバーに接続します。

    user@host$ ssh [email protected]
    

    次に、指定されたセッションに追加します。

    user@server$ tmux a -d -t tmux_session
    
  2. SSH接続と同時に接続を介して:

    user@host$ ssh [email protected] -t tmux -a -d -t tmux_session
    

兆候:

方法1期待どおりに動作します。鉱山は-ingLANGに設定されておりC.UTF-8echoそこで正しく機能し、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

セッション内でロケール設定を確認し、それ自体で受信したロケール設定を確認しませtmuxtmux

server.ltdおそらくAcceptEnv LANG LC_*その中にないsshd_configか、あなたのものにはないでしょうから、ローカルシステムと端末がUTF-8を文字セットとして使用しているという事実はリモートクライアントに送信されません。SendEnv LANG LC_*ssh_configtmux

次の手順で問題を解決できます。

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に出力するために使用できます。

関連情報