2011-10-14 4 views
9

TERM = 리눅스에서 Ctrl + 화살표 터미널 이스케이프 시퀀스 (오른쪽, 왼쪽, ...) 무엇인가 ssh tunnel (paramiko.SSHClient().invoke_shell(term='linux')을 통해 열림).내가 (ajaxterm처럼. STH) 브라우저에서 터미널 창을 건물입니다 및 보낼 수있는 탈출 순서 모르는

제가 key logger를 발견 및 $ TERM == '리눅스'와 단말기를 시도하지만 ctrl+leftleft (27,91,68)에 대해 동일한 시퀀스를 반환한다. 나는 ($ TERM == 'xterm이'와 함께) 다른 터미널에 키로거를하려고하면

나는 코드 (27,91,49,59,53,68)를 얻는다. 하지만이 코드는 SSH 채널에서 예상되는 출력을 생성하지 않습니다 (이는 보통의 리눅스 쉘에서 커서를 한 단어 씩 왼쪽으로 옮깁니다). 그것은 paramiko를 term = 'xterm'으로 시작하더라도 마찬가지입니다.

내가 무엇을 사용해야 순서 어떤 생각? 또는 위의 순서가 작동하지 않는 이유는 무엇입니까?

UPDATE : 나는 다른 터미널 유형 (안 "리눅스")를 사용하는 것이 행복 할 것이지만, VTxxx 단자와 불행하게도 pyte 작품은 (내가 "리눅스"는 VT220과 같은 터미널이라고 생각 - 어쨌든, 작동) 그래서 xterm은 제대로 작동하지 않습니다.

+0

일반적인 기본 readline 구성 (bash는 readline을 사용함)은 ** backward-word **에 대해'Alt-B'를 가지고 있습니다. terminfo에는'Ctrl-←'에 대한 항목조차 없습니다. – ninjalj

+0

하지만 xterm 콘솔에서 작동합니다 ... terminfo에 대해 더 자세히 알려주시겠습니까? – johndodo

+0

리눅스 콘솔은 vt220에 * 근접 *되지 않습니다. 그것은 (덜 능력있는) vt100의 하위 집합입니다. 이 질문에 대한 각각의 답변에는 적어도 하나의 오류가 있습니다. –

답변

21

단자는 키보드 및 출력 장치 (프린터 초기 하드 카피 나중 CRT 모니터)로 구성된 하드웨어 장치가 있었다. 대형 컴퓨터에는 여러 대의 원격 터미널이 연결될 수 있습니다. 각 터미널에는 컴퓨터와 효율적으로 통신하기위한 프로토콜이 있습니다. CRT 기반 터미널의 경우 커서 위치를 변경하고 현재 줄/화면의 일부를 지우고 대체 전체 화면 모드로 전환하는 특수 "제어 시퀀스"를 포함합니다. ..

단말기 에뮬레이터는 그 이전의 단말기 중 하나를 모방하는 애플리케이션이다. 그것은 커서 위치, 전경 및 배경 색상 설정과 같은 기능을 수행 할 수 있습니다 ... 터미널 에뮬레이터는 특정 터미널 프로토콜을 에뮬레이트하려고하지만 각기 고유 한 일련의 단점과 편차가 있습니다.

UNIX 시스템 단말기 및 단말기 에뮬레이터를 나타내는 데이터베이스가 있으므로 애플리케이션은 사용 된 특정 단말기 (또는 단말기 에뮬레이터)에서 멀리 추출된다. 이전 데이터베이스는 termcap(5)이고 terminfo(5)은 최신 데이터베이스입니다. 이러한 데이터베이스를 통해 응용 프로그램은 사용중인 터미널의 기능을 쿼리 할 수 ​​있습니다. 기능은 부울 (boolean), 숫자 기능 또는 심지어 문자열 기능 일 수 있습니다. 예 : 특정 터미널 유형이 F12 키를 가지고 있거나 지원하면 "key_f12"(긴 terminfo 이름), "kf12"(짧은 terminfo 이름) 키가 생성하는 문자열을 설명하는 "F2"(termcap 이름). 그것으로 시도하십시오 : tput kf12 | od -tx1.기능을 직접 프로그래밍하는 것이 부담이 될 수 있기 때문에

이 응용 프로그램은 일반적으로 등 저주/ncurses를, 속어, 같은 높은 수준의 라이브러리를 ... 사용

응용 프로그램을 어떤 터미널 유형을 알려줍니다 TERM라는 특별한 환경 변수가있다

그들은 말하고있다. 이 변수는 최상의 결과를 위해 데이터베이스에 존재하는 경우 정확한 터미널 유형으로 설정되어야합니다. 이것은 단지 정확한 프로토콜과 프로토콜 편차가 터미널에서 이해하고있는 부분을 어플리케이션에 알려줍니다. TERM 변수를 변경하면 이 아닌이 터미널 유형을 변경하면 응용 프로그램이 말하는 것으로 생각하는 터미널 유형이 변경됩니다.

모든 말로, Ctrl+arrow은 terminfo/termcap 데이터베이스에 전혀 반영되지 않는 xterm 동작 (구성 옵션에 따라 다름)이므로 대부분의 응용 프로그램은 모르게됩니다. 어느 쪽이든, 터미널 에뮬레이터 (귀하의 경우 pyte)가 지원하거나 그렇지 않습니다.

주요 응용 프로그램을 가정하면 bash거나 readline 라이브러리를 사용하는 다른 응용 프로그램은, 당신이 떨어져 작성한 Readline의 backward-word 사용으로 얻을 수 있습니다 (기본적으로 메타 B/Alt를-B/ESC의 B를, inputrc에서 구성) 대신.

8

od -c와 빠른 검사는 그놈 termainal이 값을 생성하는 것을 알 수 :

왼쪽 화살표 ESC 생성 - [-D합니다.

제어 왼쪽 배열 geneates ESC-[ - 1-; - 5-D

+0

하지만 gnome-terminal은 TERM = xterm ... linux는 어떨까요? – johndodo

+1

리눅스 콘솔은 두 키 스트로크 모두에 대해'ESC'-'[''-'D'를 생성합니다. –

+0

나는 그것이 썼다는 것을 안다, 나는 이렇게 썼다 ... :) 아직도,이 콘솔 특정 또는 터미널 특정인가? – johndodo

4

에서 Ctrl + 키 코드가 xterm을 도입하고, 그놈 터미널과 KDE Konsole을의 좋아하는이 xterm 등과 호환되도록 노력하고 화살표 . 실제 VT100 및 VT220 터미널에는 이러한 조합에 대해 별도의 키 코드가 없습니다. 내가 아는 한, 리눅스 콘솔은 VT100과 호환 될 것을 목표로하고 있으며, xterm은 VT220을 에뮬레이트하는 반면, 추가 사항은 많이있다.

+0

리눅스 콘솔이 VT100을 에뮬레이트하려는 시도를 시작했지만, UTF-8 지원이 추가 된 1990 년대 후반에 문자 세트 간 전환이 손실되었습니다. Linux 콘솔은 VT220 (또는 1990 년대 초 xterm 구현)을 기반으로하는 기능 키 (VT100의 일부가 아닌 기능)를 구현했습니다. xterm과 달리 Linux 기능 키 기능은 확장되지 않았습니다. –