터미널에서 어떤 프로토콜 / 표준을 사용합니까? 단순하지만 (일반 텍스트

커맨드 라인 응용 프로그램의 “GUI”가 네트워크를 통해 어떻게 통신되는지 궁금합니다. 대부분의 경우, 그것은 매우 단순하지만 (일반 텍스트 / 입력) 때로는 더 복잡합니다 (적성).

누구나 자신의 터미널을 작성할 수 있고 모든 터미널 구현이 동일한 방식 (색상, 위치 지정 등)으로 작동하도록 일종의 표준으로 정의되어 있습니까?



답변

콘솔 프로그램은 일반적으로 curses 또는 후속 작업 중 하나 ¹를 사용하여 사용자가 말하는 텍스트 사용자 인터페이스를 구축합니다.

라이브러리termcap및 이라고하는 두 개의 데이터베이스 중 하나를 사용합니다. terminfo이 데이터베이스에는 라이브러리에 다양한 코드 유형으로 다양한 조치를 취하기 위해 보낼 코드를 알려주는 이 포함되어 있습니다. 이 데이터베이스에 정의되어있는 대부분의 터미널 유형은 실제 터미널 시대에 살아남지 못 했으므로 이제는 역사적인 관심사 일뿐입니다.

ANSI 터미널

최신 Unix 터미널 에뮬레이터는 ANSI X3.64 프로토콜 또는 이후 버전 중 하나를 사용합니다.

  • ANSI X3.64 : 텔레 타입 과 달리 “유리 터미널”을 제어하기위한 표준은 원격 터미널이 해석하는 일련의 특수 문자를 기반으로합니다. 예를 들어, Unix 상자가 ANSI X3.64 호환 터미널에 커서를 화면의 왼쪽 상단 모서리로 이동 시키려면 문자를 보냅니다ESC [ 1 ; 1 H. 처음 두 문자는 터미널에 제어 순서를 요구하고 1은 행과 열이며H“커서 이동”을 의미하는 명령입니다.

    퀴즈 : 많은 PC BBS들도 ANSI 코드를 사용했습니다. ( 아직도 사실.)

  • DEC VT100 : 가장 인기있는 ANSI 호환 유리 터미널은 Digital Equipment Corporation의 VT100입니다. ANSI의 증명에 의해 합법적 시장에서 표준 아웃, 그것은 설립 사실상 오늘날에도 여전히 중요한 기준.

    때로는 VT102 프로토콜이라고하는 VT100 프로토콜이 있는데, 이는 나중에 VT100의 비용이 절감 된 버전으로, 모든 확장 옵션이 내장되어 있습니다.

    DEC 터미널 프로토콜은 1978 년에 도입 된 최초의 ANSI 호환 모델 (VT100) 에서 1995 년 DEC에서 터미널 비즈니스를 구매 한 후 Boundless Technologies가 생산 한 VT500 시리즈 모델을 통해 이전 버전과 호환되는 시리즈 입니다. 현재는 영업을 중단했지만 터미널은 때때로 중고 시장에서 계속 나타납니다.)

  • xterm : ANSI와 VT 표준의 일종 인 아말감. GUI 터미널 에뮬레이터xterm또는 그 파생물 중 하나를사용할 때마다xterm일반적으로 더 현대적xterm-color이거나xterm-color256변형 된터미널 프로토콜도 사용합니다.

  • Linux : Linux 콘솔은 프로토콜과 동일한 방식으로 확장 된 ANSI 터미널 프로토콜 변형을 사용xterm합니다. 확장 기능의 대부분은 PC와 유리 터미널의 차이점과 관련이 있습니다. 예를 들어, IBM 키보드에는 DEC VT에없는 키가 있습니다. (그 반대.)

    일부 Unix 시스템에는 자체 콘솔 터미널 프로토콜도 있습니다. scoansi예를 들어 SCO Unix에 대한 ANSI X3.64 변형 이 있습니다 .

일반적인 터미널 에뮬레이터 프로그램은 잡종의 일종이며 단일 터미널 모델을 정확하게 에뮬레이트하지 않습니다. VT320을 통해 모든 DEC VT 이스케이프 시퀀스의 96 %를 지원할 수 있지만 ANSI 색상 (VT525 기능) 및 임의의 수의 행과 열과 같은 확장도 지원합니다. cursesVT320 프로토콜을 사용하기 위해 프로그램을 사용하고 싶다고 말했더라도 프로그램에 이러한 기능이 필요하지 않은 경우 이해하지 못하는 코드의 4 %를 놓치지 않을 수 있습니다 . 이러한 프로그램은 VT320 호환으로 광고 될 수 있지만 엄격하게 말하면 그렇지 않습니다.

비 ANSI 터미널

때때로 당신이 여전히 접할 수있는 몇 가지 주목할만한 표준이 있습니다 :

  • Wyse : 최초의 독립형 유리 터미널 생산 업체 중 하나 인 Wyse는 1980 년대 초 워크 스테이션 컴퓨팅 이 미니 컴퓨터를 대체하기 전에 터미널을 만들기시작했습니다. Wyse 터미널은 VT100 및 기타 널리 사용되는 터미널 프로토콜을 에뮬레이트 할 수 있었지만 고유 코드도 가지고있었습니다.

  • IBM 3270 : 이것이 “Unix”터미널 유형은 아니지만 Unix 시스템을 IBM 메인 프레임에 연결해야하므로 여전히 사용중인 IBM 3270 시리즈 터미널 에뮬레이터 프로그램이 작성되었습니다. 최신 IBM 5250 시리즈 터미널용 에뮬레이터도 상당히 일반적이며 요즘 AS / 400 및 System i 미니 컴퓨터에 연결하는 데 가장 많이 사용됩니다.

  • Tektronix 4014 : PC와 워크 스테이션이 주로 유리 터미널을 대체하여 비트 맵 그래픽을 표준 기능으로 만들려면 앞서 설명한 이스케이프 시퀀스와 유사한 텍스트 명령에 대한 응답으로 화면에 그래픽을 그리는 값 비싼 그래픽 터미널이있었습니다. 아마도 가장 인기있는 것은 Tektronix 4010 시리즈 일 것입니다.

    그들은 사용하기 매우 재미있었습니다. 그래픽을 그리는 프로그램을 작성할 수는 있지만 단순히 로컬 터미널에서 그리기 위해 그래픽을 실행하는 대신 출력을 파일로 리디렉션 할 수 있습니다.

    $ ./my4014program > my-neat-graphic
    

    그런 다음 해당 파일을 다른 사람에게 보내면 catTek 터미널에서 프로그램없이 그래픽을 볼 수 있습니다. 매력의 일부는이 터미널의 그리기 속도가 느려서 몇 초 동안 그래픽이 쌓이는 것을 볼 수 있습니다.

오늘 유닉스 터미널 에뮬레이션 작업

환경 변수를 curses보면 라이브러리 에 사용 하려는 터미널 표준을 찾을 수 있습니다 TERM.

$ echo $TERM
xterm-color

당신이 때 ssh다른 시스템의 TERM변수가 너무 따라 수행되는 원격 유닉스 상자가 로컬 터미널과 통신하는 방법을 알고있다.

이러한 많은 프로토콜이 ANSI X3.64 변형이고 유비쿼터스 ASCII 및 UTF-8 문자 코딩 표준이 그 밖의 많은 것을 처리하기 때문에 잘못된 TERM변수는 일반적으로 치명적이지 않습니다. 깨지기 쉬운 것은 Home 및 Page Up과 같은 확장 키, Alt- 무엇이든 키 조합 및 색상, 굵은 체 등과 같은 인쇄 상 표시 기능입니다.


각주 :

  1. 가장 일반적으로 ncurses 입니다.

    S-Langcurses 과 같은 API 에 대한 경쟁자들도 있습니다 .

  2. AT & T terminfo는 BSD의 termcap데이터베이스를 대체하는 것으로 공표 했으며 대체하는 데 크게 성공했지만 여전히 기존 termcap데이터베이스를 사용하는 프로그램이 있습니다. 그것은 현대 시스템에서 여전히 찾을 수있는 많은 BSD 대 AT & T 차이점 중 하나입니다.

    내 macOS 상자에는는 /etc/termcap없지만, 있지만 /usr/share/terminfoFreeBSD의 표준 설치는 반대의 방법입니다.이 두 OS는 종종 명령 줄 수준에서 매우 비슷합니다.

  3. minicom, xterm, mintty, 그놈 터미널 , Terminal.app

  4. 올바르게 작성된 유닉스 프로그램은 이러한 이스케이프 시퀀스를 직접 방출하지 않습니다 . 대신, 위에서 언급 한 라이브러리 중 하나를 사용하여 “커서를 (1,1) 위치로 이동”또는 기타로 지시하고 라이브러리TERM환경 변수 설정 에 따라 필요한 터미널 제어 코드를 생성 합니다. 이를 통해 프로그램을 실행하는 터미널 유형에 관계없이 프로그램이 올바르게 작동 할 수 있습니다.

  5. 구식 텍스트 터미널에는 프로그램에서 많이 사용하지 않는 이상한 기능이 많았으므로 많은 인기있는 터미널 에뮬레이터 프로그램은 이러한 기능을 구현하지 않습니다. 일반적인 생략은 sixel 그래픽 과 double-width / double-height 텍스트 모드를 지원합니다.

    관리자는 VT 터미널 에뮬레이터 테스트와 같은 xterm프로그램 을 작성했습니다 . 다른 터미널 에뮬레이터와 비교하여 지원하지 않는 기능을 찾을 수 있습니다.vttestxterm