GNU 화면은 컴퓨터마다 다르게 표시됩니다.

GNU 화면은 컴퓨터마다 다르게 표시됩니다.

나는 달리고 있다

$ screen --version
Screen version 4.03.01 (GNU) 28-Jun-15

SSH를 통해 Debian Jessie에서. screenGentoo를 실행하는 컴퓨터에서 생성한 다음 거기에서 사용하면 유니코드 문자(특히 키릴 문자)가 항상 올바르게 인쇄됩니다.

screen그러나 Kubuntu(16.04, 15.04에서 완전히 업그레이드됨)에서 생성하면 인코딩이 깨집니다. 다음 Python 스크립트를 고려하십시오( 없이 실행되는 명령 screen).

$ cat test.py 
print(''.join(chr(c) for c in range(ord('А'), ord('Я') + 1)))
print(''.join(chr(c) for c in range(ord('а'), ord('я') + 1)))
print('Ёё')

$ python3 test.py 
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
абвгдежзийклмнопрстуфхцчшщъыьэюя
Ёё

이제 다음을 만들고 screen거기에서 동일한 작업을 시도합니다.

$ screen -S test

$ python3 test.py 
�БВГДЕЖЗИЙКЛ����РСТУФХЦЧШЩЪЫЬЭЮЯ
абвгдежзийклмноп�����
        ��           �
��������

screenGentoo에서 생성한 다음 Kubuntu에서 열면 인코딩도 깨집니다 . 그러나 다른 방식으로: 라틴어가 아닌 모든 문자는 '?'로 대체됩니다. 표지판.

저는 Gentoo와 Kubuntu 모두에서 Konsole을 터미널로 사용합니다.

이 인코딩 문제를 어떻게 해결할 수 있나요?


UPD:@Jakuje의 제안에 따라 데비안 컴퓨터에 stty iutf8추가 했습니다. ~/.profile그 후 나는 이것을 얻습니다 :

젠투, 로컬 터미널:

$ stty -a
speed 38400 baud; rows 55; columns 243; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

$ locale
LANG=es_ES.UTF-8
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=

Gentoo에서 SSH를 통해 Debian 시스템에서 실행하면 stty -a(`screen이 있든 없든) 출력은 정확히 동일합니다. 또한 젠투 -SSH-> 데비안:

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
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=

쿠분투, 로컬 터미널:

$ stty -a
speed 38400 baud; rows 43; columns 172; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

$ locale
LANG=ru_RU.UTF-8
LANGUAGE=fr:en_US:es:ru
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES=POSIX
LC_PAPER=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
LC_ADDRESS=fr_FR.UTF-8
LC_TELEPHONE=fr_FR.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=fr_FR.UTF-8
LC_ALL=

쿠분투 -SSH-> 데비안:

$ stty -a
speed 38400 baud; rows 43; columns 172; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

$ locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES=POSIX
LC_PAPER=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
LC_ADDRESS=fr_FR.UTF-8
LC_TELEPHONE=fr_FR.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=fr_FR.UTF-8
LC_ALL=

에는 / (라인 4)와 (라인 8) stty -a의 두 가지 차이점이 있습니다 .discardflush-flusho -extproc

쿠분투에서 데비안 머신으로 들어갈 screen때 내부의 출력 은 .sshscreen

답변1

비슷한 문제가 있었는데 프롬프트에서 특수 화살표 문자를 사용하고 있습니다. SSH를 통해 올바르게 표시되었지만 ?화면을 사용할 때 오류가 발생했습니다 .

SSH 세션에서 UTF8 옵션을 사용하여 화면을 시작할 수 있습니다. screen -U

이 화면 세션에서는 문자가 정상적으로 표시되어야 합니다.

옵션이 나열된 문서는 다음과 같습니다.스크린 사용 설명서

도움이 되었으면 좋겠습니다.

답변2

이것은알려진 문제openssh-7.3에 대한 수정 계획이 있음(초안 표준). 배포판에서 이 문제가 수정되기 전에 수동으로(또는 일부 로그인 스크립트에서) 실행할 수 있는 해결 방법이 있습니다.

stty iutf8

로컬 쉘로 tty 플래그를 utf8로 설정합니다.

관련 정보