SSH를 통해 tmux 세션에 연결할 때 UTF-8 문제

SSH를 통해 tmux 세션에 연결할 때 UTF-8 문제

상상하다:

tmux 세션이 실행되는 서버가 있습니다. 우리는 이 세션을tmux_session이 기사의 나머지 부분에서.

이 세션에 연결하는 방법에는 약간 다른 두 가지가 있습니다.

  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예상대로 작동합니다. 광산은 -ing LANG으로 설정되어 C.UTF-8있으며 echo거기에서 제대로 작동 tmux_session하고 올바르게 보고합니다. 유니코드 입력 문자(예: "123¤")는 정상적으로 작동합니다.

방법 2단순 ASCII 이외의 유니코드 문자를 표시할 수 없는 세션을 생성합니다. 다른 모든 문자는 _(밑줄)로 대체됩니다. 그러나 언제입력하다내부에서 실행되는 모든 애플리케이션에 실제로 입력되는 특수 문자로 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_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로 출력하는 데 사용할 수 있습니다.

관련 정보