
저는 SSH에 FreeBSD 11과 PuTTY를 사용하고 있습니다. 키보드의 키 코드가 올바르게 설정되지 않은 것 같습니다. 예를 들어 위쪽 화살표에서 경고음이 울리고 화살표 및 삭제 키와 같은 기본 기능을 포함한 대부분의 탐색 키에 "~"가 삽입됩니다. 키보드는 표준 영국식 영어 키보드입니다. 타이핑하는 것은 정말 고통스럽습니다.
나는 rc와 셸에서 중요한 코드를 설정하는 것에 대한 많은 스레드를 읽었으므로 최후의 수단으로 이 방법을 설정할 수 있다는 것을 알고 있습니다.
그러나 구성 가능성이 매우 높은 클라이언트와 널리 사용되는 운영 체제를 사용하면 둘 다 "그냥 이해"할 수 있는 공통 터미널 옵션/설정이 없는 것이 좋을 것입니다. 이상한 - 키가 모두 (또는 대부분) 작동합니다. 문제는 그것을 찾는 방법이나 그것을 찾았을 때 향후 모든 세션에 대해 설정하는 방법을 모른다는 것입니다.
개별 키에 대해 단말기에서 전송되는 키 코드를 찾는 방법을 알고 있으므로 이렇게 하나씩 키를 설정할 수 있습니다. 하지만 쉘 rc와 PuTTY가 모두 이해할 수 있는 최대한 많은 키를 얻기 위해 기본 터미널 설정을 찾고 싶으므로 필요할 때 몇 가지 예외를 설정하면 됩니다.
어떻게 해야 하나요?
답변1
돌리고 돌리는 손잡이가 많이 있습니다. 사람들은 인터넷상의 많은 조언을 맹목적으로 따릅니다. 늘 그렇듯이 로마로 가는 길은 여러 가지가 있지만, 그것이 어떻게 연결되어 있는지 알면 아주 간단해집니다.
매우 짧은 대답은 다음과 같습니다.
xterm
Putty의 터미널 문자열을 ( putty
Connection->Data->Terminal Type String 아래에서) 로 변경합니다 .
피해야 할 일반적인 함정:
TERM
rc 파일의 다른 곳에 설정 하지 않았는지 확인하세요 .
약간 더 긴 답변:
먼저 실제로 기본값을 사용하고 있는지 확인하는 것부터 시작하겠습니다. 저는 DK 키보드(및 매핑)를 사용하여 개인용 Windows 10 노트북에서 DK 매핑이 있는 FreeBSD 11.1 설정에 연결하고 있습니다. 제 경우에는 명령줄에서 화살표 키가 예상대로 작동합니다. 현재 줄에서 왼쪽/오른쪽으로 이동합니다. 명령 내역을 위/아래로 찾아보세요.
/bin/sh(기본 사용자 셸) 및 /bin/tcsh(기본 루트 셸)에 대해 이를 확인했습니다. 당신은 읽을 수있다껍데기.
당신은 쉘 rc 파일에서 키 매핑을 수행하는 방법을 알고 있다고 썼습니다. 이를 수행하는 방법에 대한 많은 제안이 순환되고 있습니다. 하지만 일반적으로 그렇게 해서는 안 됩니다.
tcsh 키 바인딩과 같은 제안을 찾을 수 있습니다.
# Del(ete), Home and End
bindkey "\e[3~" delete-char
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
그리고 이와 같은 bash에 대한 제안(~/.inputrc)
"\x7F": backward-delete-char
"\e[3~": delete-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
그러나 각 세션과 각 셸에 대해 이러한 바인딩을 로컬로 설정하는 대신 다음을 사용해야 합니다.용어 모자/용어 정보이를 위해 (나중에 자세히 설명합니다).
이 경우 Putty는단말기.
Putty의 기본 설정은 세션의 TERM을 "xterm"으로 설정하는 것입니다. 이는 xterm과 상당히 호환되기 때문에 수행됩니다. xterm
터미널에 대한 참조가 아니라 프로그램에 대한 참조입니다.Xterm.
PuTTY 구성
Connection -> Data -> Terminal-type string: `xterm`
로그인하면 이 설정이 세션에 적용되는지 확인할 수 있습니다.
echo $TERM
xterm
$TERM이 Putty에서 설정한 것과 일치하지 않으면 rc 파일에 재정의가 설정되어 있을 수 있습니다. /bin/sh
다음 경고에 유의하세요 ~/.profile
.
# Setting TERM is normally done through /etc/ttys. Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# TERM=xterm; export TERM
에너지를 많이 소모하지 않기 때문에10월 VT100그 이상은 xterm
많은 곳에서 볼 수 있는 것입니다.
그냥 TERM
그대로 놔두 xterm
어도 기본 Putty와 FreeBSD를 사용하여 컬러 출력이 나오므로 ls -G
그대로 작동합니다.
어떤 사람들 은 로 설정하거나 TERM
" xterm-color
적절한 " 색상 지원을 받도록 권장합니다 .xterm-256
rxvt-256color
하지만 기억해:이러한 모든 마법 TERM
값은 데이터베이스의 매핑일 뿐입니다. 오늘날 이것이 매우 흔한 이유 중 하나 는 일부 프로그램과 스크립트가 이것이 (끔찍한 생각입니다) 로 시작 xterm
하는지 확인하기 때문입니다 .$TERM
xterm
이것은 우리를 다시용어 모자이것이 FreeBSD의 기본 설정입니다. terminfo를 사용하려면 설치해야 합니다.개발/저주. 이에 대한 자세한 내용은 다음을 참조하세요.FreeBSD에서 terminfo 항목을 사용하는 방법은 무엇입니까?
텍스트 파일에서 termcap 데이터베이스의 소스 코드를 찾을 수 있습니다 /usr/share/misc/termcap
. 이 파일을 변경하는 경우 cap_mkdb
시스템에서 변경 사항을 확인하도록 실행해야 합니다 . 여기에서 어려운 질문에 대한 답을 찾을 수 있습니다. Putty에는 TERM
다음과 같은 명시적인 설정이 있습니다 putty
.
그런 다음 FreeBSD는 Putty의 동작과 일치하도록 설정을 변경하지 않기로 결정했습니다 xterm
(아마도 운영상의 이유로). 그러나 Putty에 대한 설정을 제공하기에 충분했습니다.
따라서 Putty 기본 설정을 에서 로 변경하면 Terminal-type string:
로그인 xterm
시 putty
반영됩니다 . 기본 FreeBSD termcap에는 이에 대한 항목이 있습니다.TERM
마술은 rc 파일을 건드릴 필요 없이 이제 화살표 키(xterm에서도 사용함)와 Home/End를 사용하여 줄의 시작/끝으로 이동하고 Del(ete) 삭제할 수 있다는 것입니다.
보너스:
기본 퍼티 정의는 256가지 색상을 모두 지원하지 않는 것 같습니다. 그런 다음 termcap을 수정하고 다음 두 줄을 추가하고 cap_mkdb를 실행할 수 있습니다.
putty-256color:\
:pa#32767:Co#256:tc=putty:
TERM
그런 다음 으로 설정할 수 있습니다 putty-256color
.
스콧 로빈슨이것이 추가되어야 한다고 제안되었지만 FreeBSD는 아직 이 변경 사항을 승인하지 않았습니다. 데이터베이스에서 이 PR을 찾을 수 없습니다.
보너스 2:
TERM
현재 상태를 유지하려면 xterm
시간을 들여 Putty를 FreeBSD의 xterm 터미널 기대치에 맞게 구성해야 합니다.
설정에 들어가시면터미널->키보드설정에서Home 및 End 키"표준"을 "rxvt"로 변경할 수 있습니다.
이렇게 변경하면 명령줄에서 Home 키를 사용할 수 있습니다(줄의 시작 부분으로 이동). 하지만 End는 지금 아무것도 하지 않습니다.
따라서 다음 문제는 Putty가 xterm에 대한 FreeBSD의 기대에 동의하도록 하는 것입니다. 당신도 그 반대의 일을 할 수 있다는 것을 보여주기 위해 간다.
답변2
논평할 수는 없지만 @clausandersen의 답변은 매우 철저했습니다. 그러나 termcap 항목 추가에 대한 보너스 부분은 완전히 정확하지 않습니다. tput AF 100
putty 항목에서 상속된 termcap AF 기능은 8가지 색상만 지원하므로 호출이 예상대로 작동하지 않습니다. 예상대로 작동합니다.
putty-256color|PuTTy - 256 colors:\
:Co#256:pa#32767:\
:AB=\E[48;5;%dm:AF=\E[38;5;%dm:\
:tc=putty: