나는 "터미널"과 "터미널 에뮬레이터"의 차이점을 어느 정도 이해합니다. 전자는 메인프레임 컴퓨터와 같은 장치에 연결되어 텍스트로 상호 작용하는 실제 하드웨어 주변 장치를 말하며, 후자는 실제 하드웨어가 아닌 소프트웨어에서만 동일한 작업을 수행할 수 있는 소프트웨어입니다. .
나는 또한 요즘 터미널 에뮬레이터가 이러한 오래된 터미널(예: 인기 있는 VT100)이 컴퓨터에 키코드를 보내는 방식을 실제로 에뮬레이션하여 컴퓨터인 것처럼 가장한다는 사실도 알게 되었습니다. 그러나 내 Linux 시스템에서 몇 가지 문제 해결 및 구성을 수행하는 과정에서 이 모든 것에 대해 생각하게 만드는 이상하고 다소 성가신 문제에 직면하는 동안 몇 가지 조사를 수행한 결과 이러한 장치가 컴퓨터 상호 작용에만 거의 독점적으로 키보드를 사용한다는 사실을 발견했습니다. 이러한 유형의 터미널이 마우스를 지원할 만큼 일찍 마우스가 만들어졌다고는 상상하지 마십시오.) 그리고 컴퓨팅 초기 시대에 속하기 때문에 이러한 키보드는 오늘날 우리가 일반적으로 접하는 키보드와 매우 다르며 대형 키보드로 표준화되었습니다. 정도.
내가 이것을 왜 지적하는가? 글쎄요, 기능 키, Caps Lock, 숫자 잠금 등은 당시 많은 터미널에서 일반적으로 접할 수 있는 것이 아니었습니다(적어도 기능 키는 키보드의 비교적 새로운 기능이라는 것을 알고 있습니다). 터미널 에뮬레이터는 이러한 터미널을 에뮬레이션하기 때문에 특수 이스케이프 시퀀스 전송과 같은 이러한 키를 지원하는 해결 방법을 사용해야 합니다. 내 경험상 이로 인해 키보드 처리와 터미널 에뮬레이터가 키보드를 처리하는 방식이 예상보다 훨씬 더 복잡해졌습니다(적어도 제 생각에는).
실제로 F4 위의 기능 키와 관련된 키보드 단축키를 정의하려는 시도가 일부 터미널 에뮬레이터에서 작동하지 않는 이유와 많은 터미널 에뮬레이터에서 (적어도) 그러한 기능 키를 누르는 이유를 알아내려고 할 때, 나는 이 모든 질문에 대해 생각하기 시작했습니다. 이 모든 경험에 대해 명령줄에 "~"를 입력했습니다. (이러한 키는 전용 키 코드가 아닌 이스케이프 시퀀스를 전송하기 때문입니다. 에뮬레이션되는 단말기에 기능 키가 없어 올바르게 인식되지 않거나 이스케이프 시퀀스 끝의 "~"가 실제 사용자 입력 문자로 해석되기 때문입니다. .)
내 말은, 왜 우리는 애초에 존재하지도 않는(적어도 내가 아는 한) 이러한 고대 터미널 장치를 에뮬레이트해야 합니까? 사용자가 키보드를 사용하여 명령을 입력하여 "터미널을 에뮬레이션"할 수 있도록 컴퓨터와 상호 작용할 수 있도록 하는 소프트웨어가 필요하다는 것을 이해합니다. 하지만 터미널 에뮬레이터가 여전히 이러한 장치 중 하나인 것처럼 가장하면 무슨 소용이 있습니까? 기능은 최신 키보드 인터페이스와 매우 다르며 최신 키보드에 비해 일부 측면에서 부족합니까? 내가 놓친 것이 없다면, 이러한 터미널 이후 최신 장치의 성능과 특징이 발전했기 때문에 그렇게 하는 것은 부적절하다고 생각됩니다.
또한 불필요한 복잡성처럼 보입니다. 수십 년 전에는 존재하지 않았던 키를 나타내는 이스케이프 시퀀스를 처리하는 대신 키보드를 컴퓨터에 특정 표준 키코드를 모두 보내는 버튼 패널만큼 단순한 것으로 생각하는 것은 어떨까요? 이러한 구형 터미널을 지원해야 할 상당한 필요성이 여전히 있었다면 이해할 수 있지만, 여전히 널리 사용되어 이것이 여전히 문제가 될 것이라고는 상상할 수 없습니다. 컴퓨터의 모니터와 키보드의 조합 자체가 터미널로 간주되지 않는 이유는 무엇이며, 터미널 에뮬레이터가 기존 터미널 전송 방식에 의존하지 않고 컴퓨터에 텍스트를 보내는 방법을 정의하는 것은 어떻습니까? 그 시점부터 컴퓨터의 계정 인터페이스가 어떻게 바뀌었나요?
답변1
이는 에뮬레이트되는 터미널에 기능 키가 없기 때문에 이러한 키가 전용 키 코드 대신 이스케이프 시퀀스를 보내기 때문입니다.
아니요. 이는 "터미널" 프로토콜이 대역 내 신호를 사용하고 기본적으로 각 바이트가 텍스트로 처리되기 때문입니다.아무것본문에서 이를 구체적으로 기술할 필요는 없습니다(예:탈출하다) 이는 본질적으로 키코드가 "이스케이프 시퀀스"임을 의미합니다. 즉, 이스케이프 시퀀스예특수 키코드.
최신 터미널 에뮬레이터가 원래 터미널이 할 수 없었던 작업을 수행하기 위해 이스케이프 시퀀스 개념을 발명한 것은 아닙니다. 상당히,그것들터미널은 텔레타이프라이터가 할 수 없는 작업을 수행하기 위해 이스케이프 시퀀스를 발명했습니다. 예를 들어 VT100에는 PF1–PF4 기능 키가 있었고 해당 "키코드"는 실제로 \e[P
... \e[S
이스케이프 시퀀스였습니다. 마찬가지로 프로그램은 "VT100 이스케이프 시퀀스" 물리적 터미널의 동작(커서 이동, 텍스트 모양 등)을 제어합니다.
컴퓨터의 모니터와 키보드의 조합 자체가 터미널로 간주되지 않는 이유는 무엇이며, 터미널 에뮬레이터가 기존 터미널 전송 방식에 의존하지 않고 컴퓨터에 텍스트를 보내는 방법을 정의하는 것은 어떻습니까? 그 시점부터 컴퓨터의 계정 인터페이스가 어떻게 바뀌었나요?
이는 이미 존재합니다. 이것이 X11이 작동하는 방식입니다. 이는 Wayland가 작동하는 방식이기도 합니다. 낮은 수준의 Linux 입력 및 그래픽 API(evdev 및 drm) 또는 Windows, macOS, AmigaOS, SunView 등의 그래픽 애플리케이션에도 마찬가지입니다. 이러한 모든 UI 시스템에는 "이전 터미널이 어떻게 구현되었는지"라는 단일 요소에 의존하지 않는 애플리케이션을 생성하기 위한 API가 있습니다.
실제로 문자 셀 형식(X11부터 HTML5까지 다양한 API 위에)에 얽매이지 않는 명령 셸 인터페이스를 만들려는 시도가 많이 있었지만, 겉모습에도 불구하고진짜내 생각엔 그들은 채택을 많이 본 적이 없는 것 같아요.
문제는 터미널 에뮬레이터의 목적입니다아니요문자를 보내겠다는 명시적인 목적으로 "문자 보내기"만 하면 됩니다.VT100 및 기타 단말기의 방식,웹 브라우저가 HTML을 특별히 처리하도록 설계된 것과 같습니다. 현재 VT100 터미널 프로토콜은 광범위한 적용으로 인해 여전히 널리 사용되는 범용 크로스 플랫폼 인터페이스 중 하나입니다.
Windows NT의 "콘솔"은 전혀 VT 스타일 터미널 에뮬레이션을 기반으로 하지 않습니다. 색상 변경, 마우스 클릭 수신 등과 같은 작업을 수행하기 위해 대역 외 Win32 API 호출을 사용합니다. 그러나 Windows 10에서는 결국 VT 터미널처럼 동작하기 시작했습니다. (실제로 원래 Win32 콘솔 API 기능은 모두 이제 "더 이상 사용되지 않음"으로 표시됩니다.)
"Bell Labs의 Plan 9" 운영 체제에는 이스케이프 코드를 전혀 지원하지 않는 콘솔 창을 갖춘 창 시스템도 있었습니다. 프로그램이 뭔가 멋진 작업을 하려는 경우 동일한 창에서 직접 그래픽 모드로 전환되었습니다. . 예를 들어, 텍스트 편집기인 Sam과 acme는 터미널 기반 UI가 일반적으로 갖는 제한 사항 없이 대부분 텍스트 UI를 사용합니다. (Plan 9에서는 다른 운영 체제와 상호 작용하기 위한 전용 "VT 에뮬레이터" 응용 프로그램을 제공합니다.)
사용자가 키보드를 사용하여 명령을 입력하여 "터미널을 에뮬레이션"할 수 있도록 컴퓨터와 상호 작용할 수 있도록 하는 소프트웨어가 필요하다는 것을 이해합니다. 하지만 터미널 에뮬레이터가 여전히 이러한 장치 중 하나인 것처럼 가장하면 무슨 소용이 있습니까? 기능은 최신 키보드 인터페이스와 매우 다르며 최신 키보드에 비해 일부 측면에서 부족합니까?
앞에서 언급했듯이 터미널 에뮬레이터는 인터페이스 역할을 합니다.많은기존 소프트웨어 및 하드웨어 에코시스템은 VT100과 같은 터미널 프로토콜을 사용합니다.
규약예확장 가능; 결국 색상 지원(처음 8개 색상, 그다음 256개 색상, 그 다음에는 16M 트루 컬러)과 마우스 지원을 얻었지만 둘 다 원래 VT100에는 없었습니다(현재는 "Xterm" 프로토콜로 더 일반적으로 알려져 있음). "VT100"), Terminology 또는 Kitty와 같은 프로그램에는 인라인 이미지, 하이퍼링크, 대화형 버튼 등을 표시하는 확장 기능도 있습니다.