GNOME에서 터미널을 열 때 얻을 수 있는 텍스트 모드와 GUI 없이 서버 Linux 배포판과 상호 작용할 때 얻을 수 있는 텍스트 모드의 차이점을 알고 싶습니다.
터미널이라는 프로그램이 에뮬레이터라는 것을 알고 있습니다. 저는 배후의 메커니즘을 이해하고 싶었습니다. 예를 들어 scanf()
두 경우 모두 경영진에게 어떻게 전화합니까? "터미널"이 GUI 기반 텍스트 모드를 구현하는 경우 대체 텍스트 모드의 소스는 무엇입니까? (깜박이는 커서를 표시하고 움직이는 코드 등을 의미합니다.) BIOS? 핵심? 사용자 공간의 프로세스?
답변1
모든 경우에 쉘은 TTY 또는 PTY 장치와 사용할 올바른 터미널 제어 코드 세트를 식별하는 TERM 환경 변수를 확인합니다.
GNOME의 터미널 창을 사용할 때 장치는 UNIX 98 스타일 PTY: 입니다 /dev/pts/*
. 터미널 창이 활성화되어 X11/Wayland 키보드 이벤트를 수신하면 GNOME 터미널 프로세스는 이를 UTF-8 문자로 변환하고 PTY 장치의 "기본" 측에 입력하므로 CLI 프로세스는 이를 다른 측에서 가져옵니다( 전통적으로) PTY 장치의 "슬레이브" 측입니다.
출력은 동일한 방식으로 처리됩니다. CLI 프로세스는 UTF-8 문자 및 터미널 제어 코드(TERM 환경 변수로 식별된 올바른 코드 세트)를 PTY 장치에 쓰고 GNOME 터미널 프로세스는 PTY 측면에서 이를 읽습니다. 장치를 터미널 입력 시뮬레이션으로 사용하고 시뮬레이션된 보기를 X11/Wayland 그래픽으로 렌더링합니다.
Linux 가상 콘솔 장치( /dev/tty[1..n]
)에서는 터미널 에뮬레이션이 커널에서 실행된다는 점을 제외하면 프로세스가 거의 동일하므로 사용자 공간에 표시되는 "기본" PTY 장치와 동등한 것이 없습니다.
직렬 콘솔에서 작업하는 경우 CLI 프로세스는 "실제" TTY 장치인 직렬 포트( /dev/ttyS[0..n]
)를 가져옵니다. 직렬 케이블의 다른 쪽 끝에 있는 것이 무엇이든 나머지를 처리합니다. 요즘에는 Linux를 실행하는 노트북 minicom
이나 직렬 포트 지원을 포함하는 상당히 새로운 PuTTY 버전과 같은 다른 터미널 에뮬레이터일 수 있습니다. 아니면 실제 터미널일 수도 있습니다. 실제 Digital VT 시리즈 터미널이나 HP 700/96일 수도 있습니다.
아니면 당신이 있다면진지하게역계산을 입력하면,1930년대의 전기 기계 괴물입니다.
답변2
텔레콤의 답변프로그램이 터미널(실제 또는 기타)과 대화하는 방법을 설명하십시오.
귀하의 질문에는 그래픽 터미널 에뮬레이터에서 제공되지 않을 때 터미널 처리가 존재하는 또 다른 부분이 있습니다. 현재 세 가지 가능성이 있습니다.
하드웨어 텍스트 모드, 커널 터미널 에뮬레이션. 이는 상단에 얇은 콘솔 레이어가 있는 텍스트 모드 지원을 제공하는 하드웨어에 의존합니다(예를 들어
vgacon
심지어mdacon
). 커널은 실제 문자(특성 포함)를 비디오 버퍼에 기록한 다음 하드웨어 문자 생성기를 사용하여 이를 화면에 표시할 픽셀로 변환합니다. 커서는 하드웨어에 의해서도 처리됩니다(깜박임 포함, 참조).MS-DOS 커서는 어떤 문자입니까?더 알아보기). 이 설정에서는 "그래픽" 출력이 불가능합니다(글꼴을 창의적으로 사용함에도 불구하고). 터미널 에뮬레이션 자체,예를 들어처리를 위해 VT 이스케이프 코드를 문자 이동으로 변환합니다.커널별.프레임버퍼, 커널 터미널 에뮬레이션. 이는 공통 프레임버퍼 추상화(
fbcon
) 그래픽 프레임 버퍼를 사용하여 텍스트 모드 콘솔을 제공합니다. 이 변형에서 커널은 문자를 픽셀로 변환하고 커서를 처리하며 디스플레이가 텍스트로 제한되지 않습니다. 그래픽 프로그램도 실행할 수 있습니다(프레임 버퍼에 특정한지 여부, 예:포비다또는 SDL이나 Gtk와 같은 라이브러리와 함께 프레임 버퍼 백엔드를 사용하세요. 터미널 에뮬레이션은 첫 번째 변형과 동일한 방식으로 처리됩니다.프레임버퍼, 사용자 공간 터미널 에뮬레이션. 이는 이전 변형과 동일한 그래픽 지원을 사용하지만 사용자 공간 터미널 에뮬레이터를 추가합니다.킬로미터 스콘. 이 경우 텍스트 출력을 화면의 픽셀로 변환하는 작업은 커널이 아닌 프로그램 내에서 수행됩니다.