본문 바로가기
리눅스

(번역) Terminal emulator

by 다움위키 2024. 10. 11.

원문 보기: https://dawoum.duckdns.org/wiki/Terminal_emulator

 

터미널 에뮬레이터, 또는 터미널 응용 프로그램은 어떤 다른 디스플레이 아키텍처 내에서 비디오 터미널에뮬레이션하는 컴퓨터 프로그램입니다. 전형적으로 또는 텍스트 터미널과 동의어이지만, 터미널이라는 용어는 그래픽 인터페이스를 포함한 모든 원격 터미널을 포괄합니다. 그래픽 사용자 인터페이스 내부의 터미널 에뮬레이터는 종종 터미널 창이라고 합니다.

터미널 창을 통해 사용자는 명령줄 인터페이스 (CLI) 및 텍스트 사용자 인터페이스 (TUI) 응용 프로그램과 같은 텍스트 터미널과 모든 그것의 응용 프로그램에 접근할 수 있습니다. 이것들은 telnet, ssh, dial-up, 또는 직접 직렬 연결을 통해 같은 기계 또는 다른 기계에서 실행될 수 있습니다. 유닉스-계열 운영 시스템에서는 하나 이상의 터미널 창을 지역 기계에 연결하는 것이 공통적입니다.

터미널은 보통 색상, 커서 위치, 등을 제어하기 위한 이스케이프 시퀀스의 집합을 지원합니다. 예로는 ECMA-48, ANSI X3.64, 및 ISO/IEC 6429를 포함하는 터미널 제어 시퀀스 표준 가족이 있습니다.

Background

컴퓨팅의 초기 시절, 대화형 컴퓨팅이 등장하면서, 주요 모델은 여러 단말기에 연결된 중앙 컴퓨터를 포함했습니다. 중앙 집중형 또는 메인프레임 모델이라고 알려진 이 구성은 모든 처리 임무를 수행하는 강력한 중앙 컴퓨터를 특징으로 했고, 반면에 터미널은 사용자가 시스템과 상호 작용할 수 있는 입력/출력 장치 역할을 했습니다. 이들 시스템은 처음에는 문자 기반이었습니다.

Character-oriented terminals

문자-지향 터미널블록-지향 터미널이 데이터 블록으로 통신하는 것과 달리 한 번에 한 문자씩 호스트와 통신하는 컴퓨터 터미널 유형입니다. 그것이 구현과 프로그래밍이 쉽기 때문에, 가장 공통적인 유형의 데이터 터미널입니다. 메인프레임 컴퓨터 또는 터미널 서버에 대한 연결은 RS-232 직렬 링크, 이더넷, 또는 기타 독점 프로토콜을 통해 이루어집니다.

문자-지향 터미널은 "dumb" 또는 "smart"일 수 있습니다. Dumb 터미널은 제한된 수의 제어 코드 (CR, LF 등)를 해석할 수 있지만 줄 지우기, 화면 지우기, 또는 커서 위치 제어와 같은 기능을 수행하는 특수 이스케이프 시퀀스를 처리할 수 없는 터미널입니다. 이 맥락에서, dumb 터미널은 때때로 glass Teletypes이라고도 불리며, 그것들은 본질적으로 기계식 텔레타입과 같은 제한된 기능을 가지고 있기 때문입니다. 이 유형의 dumb 터미널은 환경 변수 TERM을 dumb으로 설정함으로써 현대 유닉스-계열 시스템에서 여전히 지원됩니다. 스마트 또는 지능형 터미널은 특히 VT52, VT100, 또는 ANSI 이스케이프 시퀀스와 같은 이스케이프 시퀀스를 처리할 수 있는 터미널입니다.

Emulators

1980년대에 개인용 컴퓨터가 보편화되면서, 사용자의 개인용 컴퓨터에서 소프트웨어를 실행할 수 있는 옵션이 제공되어 비용이 많이 들고 공간을 많이 차지하는 하드웨어 단말기를 추가 기능이 있는 단말기로 교체할 수 있는 기회가 제공되었습니다. 즉시 PC에서 하드웨어 단말기의 기능을 에뮬레이션할 수 있는 소프트웨어가 제공되었습니다. DOS에 대해 그러한 소프트웨어의 예로는 1988년에 출시되어 DEC VT102 단말기를 에뮬레이션할 수 있는 Telix 또는 Telemate가 있습니다.

보통 유닉스 버전을 실행하는 워크스테이션도 1980년대에 일반화되었습니다. 유닉스 시스템은 보통 지역-부착된 또는 다이얼업 터미널을 통해 명령줄에 대한 접근을 제공했습니다. 유닉스 워크스테이션은 주로 그래픽 사용자 인터페이스 (GUI)를 통해 사용되도록 설계되었습니다; 명령줄에 대한 접근을 제공하기 위해, GUI에는 지역-부착된 터미널처럼 작동하는 터미널 에뮬레이터 응용 프로그램이 포함되었습니다.

1990년대 동안, WindowsOS/2와 같은 새로운 운영 시스템이 도입되어 Windows에 대해 Telix, OS/2에 대해 ZOC, 또는 PuTTY와 같은 더 많은 터미널 에뮬레이터에 대한 기술적 배경을 제공했으며, PuTTY는 1998년 Windows에 대해 처음 출시되어 (그것의 파생물과 함께) 오늘날까지도 매우 인기 있는 선택 중 하나입니다.

특히 데이터 센터와 클라우드 서버에서 실행되는 Linux의 성공을 통해, 문자 기반 터미널을 통한 원격 컴퓨터에 접근해야 하는 필요성이 여전히 남았습니다. 이것은 오늘날 PuTTY에 대한 대안으로 사용될 수 있는 터미널 에뮬레이터 목록이 100개 이상의 대안을 제공한다는 사실에서 분명하게 드러납니다.

Examples of terminals emulated

물리적 하드웨어 단말기용으로는 VT52, VT100, VT220, VT320, IBM 3270/8/9/E, IBM 5250, IBM 3179G, Data General D211, Hewlett-Packard HP700/92, Sperry/Unisys 2000-series UTS60, Burroughs/Unisys A-series T27/TD830/ET1100, ADDS ViewPoint, AT386, Siemens Nixdorf (SNI) 97801, Televideo 925, 및 Wyse 50/60 등의 많은 단말기 에뮬레이터가 개발되어 왔습니다.

Xterm과 같은 일부 터미널 에뮬레이터는 에뮬레이트된 터미널에 없는 추가 기능을 구현합니다.

추가적으로, Sun 워크스테이션 콘솔, 리눅스 콘솔과 같은 다양한 시스템 콘솔 "터미널"을 에뮬레이트하는 프로그램도 개발되어 왔습니다.

마지막으로, 일부 에뮬레이터는 ANSI 이스케이프 코드에 대한 표준과 같은 일련의 표준을 참조합니다.

그러한 프로그램은 DOS, LinuxmacOS를 포함한 유닉스-계열 시스템, Windows, 및 휴대폰과 산업용 하드웨어에 탑재된 임베디드 운영 시스템을 포함한 다양한 플랫폼에서 사용할 수 있습니다.

Implementation details

Unix-like systems

과거에는, 유닉스유닉스-계열 시스템에서는 RS-232 포트와 같은 직렬 포트 장치를 사용했고, 이에 대한 /dev/* 장치 파일을 제공했습니다.

터미널 에뮬레이터와 함께 그것들 장치 파일은 유사-터미널 장치의 쌍을 사용함으로써 에뮬레이션됩니다. 이러한 쌍은 호스트 컴퓨팅 엔드포인트 (운영 시스템 API, rlogin, telnet 또는 SSH 또는 다른 것과 같은 다른 소프트웨어를 운영함으로써 제공되는 컴퓨터의 하드웨어)에 대한 물리적 포트/연결을 에뮬레이션하는 데 사용됩니다. 예를 들어, 리눅스 시스템에서 이것들은 각각 /dev/ptyp0 (마스터 측) 및 /dev/ttyp0 (슬레이브 측) 유사-터미널 장치가 됩니다.

/dev/console과 같은 특수 가상 콘솔 파일도 있습니다. 텍스트 모드에서, 파일에 쓰는 것은 가상 콘솔에 텍스트를 표시하고 파일에서 읽는 것은 사용자가 가상 ​​콘솔에 쓴 텍스트를 반환합니다. 다른 텍스트 터미널과 마찬가지로, 프로그램이 사용할 수 있는 특수 이스케이프 시퀀스, 제어 문자, 및 함수도 있으며, ncurses와 같은 라이브러리를 통해 가장 쉽게 사용할 수 있습니다. 더 복잡한 운영에 대해, 프로그램은 콘솔 및 터미널 특수 ioctl 시스템 호출을 사용할 수 있습니다. 우리는 /dev/vcs1 및 /dev/vcsa1과 같은 vcs ("가상 콘솔 화면") 및 vcsa ("속성을 갖는 가상 콘솔 화면") 패턴을 사용하여 장치를 비교할 수 있습니다.

일부 터미널 에뮬레이터에는 터미널과 터미널 내부에서 실행되는 프로그램 사이의 원활한 상호 운용성을 용이하게 하기 위해 터미널의 동작을 구성하기 위한 이스케이프 시퀀스가 ​​포함되어 있으며, 예를 들어, paste bracketing을 구성하는 것입니다.

가상 콘솔은 init에 의해 읽은 파일 /etc/inittab에서 구성할 수 있습니다 -- 전형적으로 그것은 여러 가상 콘솔에 대해 텍스트 모드 로그인 프로세스 getty를 시작합니다. X Window System은 /etc/inittab 또는 X display manager에서 구성될 수 있습니다. 많은 리눅스 배포판은 init 대신 systemd를 사용하며, 이는 가상 콘솔 구성도 허용합니다.

CLI tools

가상 콘솔에 접근하기 위해 사용되는 전형적인 리눅스 시스템 프로그램은 다음을 포함합니다:

  • chvt: 현재 가상 콘솔을 전환하기 위해
  • openvt: 새로운 가상 콘솔에서 프로그램 실행하기 위해
  • deallocvt: 현재 사용되지 않는 가상 콘솔을 닫기 위해

Local echo

터미널 에뮬레이터는 지역 에코 기능을 구현할 수 있으며, 이는 "하프-듀플렉스"로 틀리게, 또는 여전히 약간 부정확하게 "에코-플렉스"로 이름-지을 수 있습니다 (에코-플렉스는 형식적으로 입력 표시 옵션이 아니라 오류 감지 메커니즘입니다).

Line-at-a-time mode/Local editing

터미널 에뮬레이터는 지역 편집을 구현할 수 있으며, 이를 "한 번에 한 줄씩 모드"라고도 합니다. 이것은 역시 "하프-듀플렉스"라고 잘못 참조됩니다. 이 모드에서, 터미널 에뮬레이터는 호스트 시스템에 완전한 입력 줄만 보냅니다. 사용자가 줄을 입력하고 편집하지만, 그것은 편집되는 동안 터미널 에뮬레이터 내에서 지역적으로 보관됩니다. 사용자가 완료를 신호할 때까지 전송되지 않으며, 보통 키보드의 ↵ Enter 키나 사용자 인터페이스의 어떤 종류의 "send" 버튼을 누릅니다. 그 시점에서, 전체 줄이 전송됩니다. 한 번에 한 줄씩 모드는 지역 에코를 의미하는데, 왜냐하면 그렇지 않으면 사용자가 편집되고 구성 중인 줄을 볼 수 없기 때문입니다. 어쨌든, 한 번에 한 줄씩 모드는 에코 모드와 독립적이고 지역 에코를 요구하지 않습니다. 예를 들어, 비밀번호를 입력할 때, 지역 편집을 갖는 한 번에 한 줄씩 입력이 가능하지만, 지역 에코가 꺼져 있습니다 (그렇지 않으면 비밀번호가 표시됩니다).

한 번에 한 줄씩 모드의 복잡성은 telnet 프로토콜의 line-at-a-time 모드 옵션에서 예시됩니다. 올바르게 구현하기 위해, 터미널 에뮬레이터 프로그램에 의해 제공되는 Network Virtual Terminal 구현은 지역에서 줄을 편집하는 중간에 도착하는 "인터럽트" 및 "중단" 이벤트를 인식하고 올바르게 처리할 수 있어야 합니다.

Synchronous terminals

비동기 터미널에서, 데이터는 언제든지 어떤 방향으로든 흐를 수 있습니다. 동기 터미널에서 프로토콜은 누가 언제 데이터를 보낼 수 있는지 제어합니다. IBM 메인프레임 컴퓨터와 함께 사용되는 IBM 3270-기반 터미널은 동기 터미널의 예입니다. 그것들은 본질적으로 "한 번에 한 화면씩" 모드 (블록 모드라고도 함)로 작동합니다. 사용자는 업데이트된 화면을 단일 작업으로 원격 컴퓨터에 제출하기 전에 페이지를 여러 번 변경할 수 있습니다.

3270 프로토콜을 시뮬레이션하는 터미널 에뮬레이터는 대부분 운영 시스템에서 사용할 수 있으며, z9와 같은 시스템을 관리하는 사람과 CICS와 같은 해당 애플리케이션을 사용하는 사람 모두가 사용할 수 있습니다.

동기 터미널의 다른 예로는 IBM 5250, ICL 7561, Honeywell Bull VIP7800, 및 Hewlett-Packard 700/92가 있습니다.

Virtual consoles

가상 콘솔은, 가상 터미널이라고도 하며, 개인용 컴퓨터나 워크스테이션의 키보드와 모니터를 사용하는 에뮬레이트된 텍스트 터미널입니다. 가상 콘솔은 GUI 터미널이 아니고 그것들이 그래픽 인터페이스 내부에서 실행되지 않기 때문에 "텍스트"라는 단어가 핵심입니다. 가상 콘솔은 대부분의 유닉스-계열 시스템에서 찾을 수 있습니다. 그것들은 주로 그래픽 데스크탑 환경을 사용 없이 서버에 접근하고 상호 작용하기 위해 사용됩니다.

See also

 

External links