어떤 터미널 유형을 사용하고 있나요?

어떤 터미널 유형을 사용하고 있나요?

나는 이것을 Ubuntu 12.04와 Debian 7에서 테스트했습니다.

echo $TERM

나는 얻다

xterm

하지만 드롭다운 메뉴 "도움말" > "정보"를 사용하면 이라고 표시됩니다 gnome terminal 3.4.1.1.

이것은 내가 gnome-terminal만 사용하고 있다는 뜻인가요? 아니면 그냥 xterm인가요? 아니면 gnome-terminal이 xterm의 확장인가요? 혼란스러워요.

답변1

무엇을 $TERM위한 것인가요?

변수 $TERM는 해당 터미널의 기능을 활용하기 위해 애플리케이션에서 사용하기 위한 것입니다.

예를 들어, 프로그램이 컬러 텍스트를 표시하려는 경우 먼저 사용 중인 터미널이 컬러 텍스트를 지원하는지 확인한 다음 지원하는 경우 컬러 텍스트를 수행하는 방법을 찾아야 합니다.

이것이 작동하는 방식은 시스템이 알려진 터미널과 해당 기능의 라이브러리를 유지한다는 것입니다. 대부분의 시스템에는 이것이 포함되어 있습니다 /usr/share/terminfo(termcap도 있지만 더 이상 많이 사용되지 않는 레거시입니다).

빨간색 텍스트를 표시하려는 프로그램이 있다고 가정해 보겠습니다. 기본적으로 다음과 같은 terminfo 라이브러리를 호출합니다.xterm 터미널에 대한 빨간색 텍스트를 위해 보내야 하는 바이트 시퀀스를 알려주세요.". 그런 다음 해당 바이트를 가져와 인쇄합니다. 를
수행하여 직접 시도해 볼 수 있습니다 tput setf 4; echo hi. 이렇게 하면 terminfo 기능을 얻고 원하는 색상인 setf의 매개 변수를 전달합니다 .4


gnome 터미널이 자신에 대해 거짓말을 하는 이유:

이제 방금 출시된 멋진 새 터미널 에뮬레이터가 있는데 시스템의 terminfo 라이브러리에 아직 이에 대한 정의가 없다고 가정해 보겠습니다. 애플리케이션이 어떤 작업을 수행하는 방법을 찾으려고 하면 터미널을 알 수 없기 때문에 실패하게 됩니다.

터미널이 이 문제를 해결하는 방법은 그것이 누구인지 거짓말을 하는 것입니다. 그래서 그놈 터미널은 "나는 xterm이다".

Xterm은 X11이 등장한 이래로 사용되어 온 매우 기본적인 터미널이므로 대부분의 터미널 에뮬레이터는 Xterm이 지원하는 것을 지원합니다. 따라서 gnome 터미널이 xterm이라고 말하면 terminfo 라이브러리에 정의가 있을 가능성이 더 높습니다.

터미널 유형에 대해 거짓말을 하는 것의 단점은 터미널이 실제로 xterm보다 훨씬 더 많은 것을 지원할 수 있다는 것입니다(예를 들어, 많은 새 터미널은 256색을 지원하는 반면 이전 터미널은 16색만 지원합니다). 따라서 절충안이 있고 더 많은 기능을 얻거나 더 많은 호환성을 갖게 됩니다. 대부분의 터미널은 더 많은 호환성을 선택하므로 자신을 xterm.

이를 무시하려는 경우 많은 터미널에서 동작을 구성하는 몇 가지 방법을 제공합니다. 하지만 그냥 할 수도 있습니다 export TERM=gnome-terminal.

답변2

환경 TERM변수는 터미널을 나타냅니다.유형, 터미널이 아님애플리케이션. TERM특정 목적이 있습니다. 해당 터미널에서 실행 중인 애플리케이션에 터미널과 상호 작용하는 방법을 알려줍니다.

응용 프로그램은 이스케이프 시퀀스(인쇄할 수 없는 문자를 포함하고 커서 이동, 화면 일부 지우기, 현재 색상 변경 등의 효과가 있는 문자 시퀀스)를 작성하여 터미널과 상호 작용합니다. 예전에는 물리적 터미널의 브랜드마다 서로 달랐습니다. 이스케이프 시퀀스 세트. 따라서 운영 체제는 터미널 유형 및 해당 특성에 대한 데이터베이스를 유지 관리합니다. 전통적인 데이터베이스는텀캡(“종료 기능”); 많은 최신 시스템과 애플리케이션이용어 정보. 두 데이터베이스 모두 터미널 유형 이름으로 색인화되며 애플리케이션은 TERM환경 변수의 터미널 유형 이름을 사용하여 데이터베이스를 쿼리합니다.

요즘 대부분의 터미널에서는표준 이스케이프 시퀀스 세트몇 가지 일반적인 확장 세트가 있으므로 의 다양한 값이 표시되지 않습니다 TERM. 대부분의 GUI 터미널 에뮬레이터는 다음과 호환됩니다.xterm, 전통적인 X 터미널(여전히 사용 및 유지 관리됨)입니다.

xterm과 다른 터미널 에뮬레이터는 자체 이름으로 터미널 데이터베이스에 자체 항목을 추가할 수 있습니다. 그러나 이것은 원격 쉘과 잘 맞지 않습니다. 예를 들어 B에서 A로 SSH를 통해 실행되었기 때문에 머신 A에서 실행되지만 머신 B에 표시되는 프로그램은 머신 A의 터미널 데이터베이스를 쿼리해야 합니다. SSH와 같은 원격 로그인 방법은 환경 TERM변수를 전달하지만 이는 B의 터미널 데이터베이스에 A의 사용자 값에 대한 항목도 있는 경우에만 유용합니다. 따라서 많은 터미널 에뮬레이터는 TERM=xterm거의 보편적으로 알려진 방식을 고수합니다.

전반적으로 터미널 간의 차별화는 애플리케이션이 터미널과 상호 작용하는 방식에서 오는 것이 아니라 터미널이 사용자와 상호 작용하고 해당 환경에 적합한 방식에서 비롯됩니다. 예를 들어, Gnome 터미널은 Gnome에 잘 어울리고 탭과 기타 기능을 제공합니다. Konsole은 KDE에서 보기에도 좋고 탭과 기타 기능도 제공합니다. urxvt에는 작은 메모리 요구 사항이 있습니다. Console2는 Windows에서 실행됩니다. screen 및 tmux는 다른 상위 터미널에 연결할 수 있는 세션을 제공합니다. 등등. 이러한 기능 중 어느 것도 터미널에서 실행되는 응용 프로그램에 차이가 없으므로 대부분의 터미널 에뮬레이터는 TERM=xterm.

쉘이 어떤 터미널에서 실행되고 있는지 알아내려면(쉘이 터미널에서 직접 실행되고 있다고 가정) 쉘의 부모를 살펴보십시오.

ps -p$PPID

답변3

환경 변수 TERM은 사용 중인 터미널을 의미하지 않습니다.

gnu.org 인용:

환경 변수 TERM에는 텍스트 창의 기능에 대한 식별자가 포함되어 있습니다. 'man 5 terminfo'를 참조로 사용하여 > 'infocmp' 명령을 사용하면 이러한 기능의 자세한 목록을 얻을 수 있습니다.

포함된 색상 지시문을 사용하여 텍스트를 생성할 때 msgcat는 TERM 변수를 확인합니다. 오늘날 텍스트 창은 일반적으로 최소 8가지 색상을 지원합니다. 그러나 TERM 변수가 지원되는 8가지 색상만 나타내는 식별자로 설정되어 있어도 텍스트 창은 16가지 이상의 색상을 지원하는 경우가 많습니다. 다음과 같은 경우에는 TERM 변수를 다른 값으로 설정하는 것이 좋습니다.

xterm대부분의 경우 16가지 색상을 지원하도록 제작되었습니다. 또한 88색 또는 256색(둘 다 지원하지는 않음)을 지원하도록 구축할 수도 있습니다. TERM을 xterm-16color, xterm-88color 또는 xterm-256color로 설정할 수 있습니다. rxvt

rxvt16가지 색상을 지원하는 경우가 많습니다. TERM을 rxvt-16color로 설정할 수 있습니다. 콘솔

콘솔16가지 색상을 지원하는 경우도 많습니다. TERM을 konsole-16color 또는 xterm-16color로 설정할 수 있습니다.

TERM을 설정한 후 'msgcat --color=test'를 호출하고 출력이 합리적인 색상 맵처럼 보이는지 확인하여 이를 확인할 수 있습니다. 환경 변수 TERM에는 텍스트 창의 기능에 대한 식별자가 포함되어 있습니다. 'man 5 terminfo'를 참조로 사용하여 'infocmp' 명령을 사용하면 이러한 기능의 자세한 목록을 얻을 수 있습니다.

답변4

나는 를 실행하여 초기 질문에 대한 답을 찾을 수 있다는 점 ps -p $$, 즉 현재 pid의 프로세스가 무엇인지 배울 수 있다는 점에 주목할 가치가 있다고 생각합니다. 샘플 출력은 다음과 같습니다.

    PID TTY          TIME CMD
3045221 pts/17   00:00:00 bash

그것이 어떤 터미널인지는 매우 분명합니다.

관련 정보