나는 vagrant에서 CentOS 6.4를 실행하고 vagrant를 통해 상자에 SSH를 실행하고 있습니다. 나는 한동안 백스페이스 키가 제대로 작동하도록 노력해 왔습니다(아래 설명:Centos 터미널은 백스페이스 및 Ctrl-h를 올바르게 구성합니다.)
그 일환으로 백스페이스 키가 보내는 스캔 코드가 무엇인지, Ctrl-H가 보낸 스캔 코드와 다른지 알아보려고 합니다. 이를 위해 지정된대로 showkey -s를 사용해 보았습니다.여기. 그러나 이것은 작동하지 않는 것 같습니다. 이것이 루트로 실행할 때 콘솔에 표시되는 내용입니다.
[vagrant@localhost ~]$ sudo showkey -s
kb mode was UNICODE
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]
press any key (program terminates 10s after last keypress)...
sadfdsdfs[vagrant@localhost ~]$ sadfdsdfs
보시다시피 showkey는 스캔 코드를 제공하는 대신 내가 입력한 내용을 에코하는 것 같습니다. 무슨 일이 일어나고 있는지 아이디어가 있습니까?
답변1
테스트하는 첫 번째 특수 장치(하드코드된 목록에서)를 열면 작동하지 않습니다 showkey
. 이는 터미널입니다. 이것이 사용하는 목록은 다음과 같습니다(에서 인용됨).버전 1.15):
static char *conspath[] = {
"/proc/self/fd/0",
"/dev/tty",
"/dev/tty0",
"/dev/vc/0",
"/dev/systty",
"/dev/console",
NULL
};
처음 두 개는 SSH를 통해 연결할 때 의사 터미널입니다. 나중에 가상 콘솔인지 확인하려고 시도하지 마세요. 그러나 첫 번째는 쉘과 연관된 터미널입니다. 다른 터미널을 열면 예상치 못한 에코 등이 발생합니다.
이를 실행하면 showkey -s
장치를 열어 얻은 파일 설명자를 사용하여 터미널 I/O 모드를 수정합니다(btw,삼, 표준 입력과 다릅니다.0). 그 기능은 다음과 같습니다.저것단말기
stty -icanon -echo -isig
showkey
터미널 수정(삼) 당신은 (아마도) 입력이 없으며 결과를 터미널에 표시합니다. 원래 표준 입력은 showkey
여전히 원래 입력 모드를 사용하며 업데이트된 입력 모드는 다른 터미널에 적용됩니다.
showkey
이 동작은 가상 콘솔에서만 스캔 코드를 가져올 수 있으므로 버그가 아닙니다 . 을 입력하지 않으면 tty0
기대한 결과를 얻을 수 없습니다. 그것할 수 있다친절하고 명확하게 말하면 유용한 결과를 얻지 못할 것입니다.
답변2
Vagrant에게 TTY 할당을 강제하도록 지시해보세요.
$ vagrant ssh -- -ttt ...
ServerFault라는 제목의 Q&A에 대한 댓글에서 이것을 발견했습니다.대화형 명령에는 vagrant ssh를 사용하십시오. 백스페이스 키는 문자를 삭제하지 않습니다..