데스크탑 GUI에서 GNOME 터미널 에뮬레이터를 사용하여 터미널 창을 열면 쉘 TERM 환경 변수의 기본값은 입니다 xterm
.
++를 사용하여 CTL콘솔 TTY 창으로 전환하면 값이 .ALTF1echo $TERM
linux
제가 요청한 동기는 제 ~/.bashrc
파일에 컬러 쉘이 제공되는지 아니면 그냥 좋은 구식 단색이 제공되는지를 결정하는 변수가 있다는 것입니다.
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
입력하면 콘솔 셸과 Gnome 터미널 에뮬레이터 셸 모두에서
export TERM=xterm-color
source /.bashrc
두 쉘 모두 색상 모드로 변경됩니다(두 쉘 모두에 대해 항상 이런 일이 발생하기를 원합니다).
기본값 TERM
은 어디에 설정되어 있나요 ? 가능하다면 기본값을 변경하는 가장 좋은 위치는 어디입니까? 터미널 에뮬레이터 GUI에는 기본 TERM 값을 선택하거나 설정하는 항목이 없는 것 같습니다.
export TERM=xterm-color
나는 이 줄을 내 파일의 맨 위에 추가하는 것을 고려했지만 ~/.bashrc
내 직감은 그것이 최선의 해결책이 아니라고 말하고 내 인터넷 검색으로는 아직 좋은 답을 얻지 못했습니다.
저는 Ubuntu 15.04 Desktop(Debian 기반)을 실행하고 있습니다.
답변1
다양한 위치(이용 가능 여부에 따라 다름)
가상 및 실제 터미널 모두에서 TERM
환경 변수는 연결된 프로그램에 의해 설정되며 login
로그인 후 실행되는 대화형 셸까지 상속됩니다. 이러한 일이 발생하는 정확한 위치는 시스템 및 터미널 유형에 따라 다릅니다.
실제 터미널
실제 직렬 터미널의 유형은 전선의 반대쪽 끝에서 발생하는 상황에 따라 달라질 수 있습니다. 따라서 관례적으로 getty
프로그램은 터미널 유형을 지정하는 인수나 TERM
프로그램에 전달된 서비스 관리자의 서비스 구성 데이터를 사용하여 호출됩니다.
- van Smoorenburg 시스템에서는 항목에서 다음과 유사한 내용을 볼
init
수 있습니다 ./etc/inittab
S0:3: Rebirth:/sbin/agetty ttyS0 9600 vt100-nav
agetty
이 줄의 마지막 매개변수vt100-nav
는 설정할 터미널 유형입니다/dev/ttyS0
./etc/inittab
그러한 시스템에서 실제 터미널의 터미널 유형을 변경하는 것도 마찬가지 입니다. - systemd 시스템에서는 읽기에 사용된 유닛 파일(병합되지 않은 시스템의)에서 이를 볼 수 있었습니다.
/usr/lib/systemd/system/[email protected]
/lib/systemd/system/[email protected]
환경=기간=vt100
TERM
에 전달된 환경의 변수를 설정합니다agetty
. - BSD에서는
init
데이터베이스에 있는 각 터미널 항목의 세 번째 필드에서 터미널 유형을 얻어/etc/ttys
실행TERM
환경의 유형에 따라 설정됩니다getty
./etc/ttys
BSD에서 실제 터미널의 터미널 유형을 변경하는 경우에도 마찬가지입니다.
체계화된 가변성
서비스 [email protected]
단위 파일 또는 해당 문제에 대한 삽입 파일은 시스템 시스템에서 실제 터미널의 터미널 유형이 변경되는 위치입니다. 이러한 변경 사항은 다음에 적용됩니다.모두이 서비스 단위 템플릿을 사용한 터미널 로그인 서비스입니다. (단일 터미널에 대해서만 변경하려면 템플릿을 수동으로 인스턴스화하거나 인스턴스화에서만 작동하는 플러그인을 추가해야 합니다.)
TERM
systemd에는 환경 변수 값을 얻기 위해 수명 주기 동안 최소한 4가지 메커니즘이 있습니다 . 이 답변을 처음 작성했을 때 보시다시피 템플릿 서비스 단위 파일에 한 줄이 있습니다. 다른 경우에는 유형 및가 각각 및 서비스 단위 파일에 내장되어 있습니다. 최근에는 프로세스 #1에서 환경변수를 상속받아 다양한 방식으로 설정하고 있다.Environment=TERM=something
linux
vt102
getty
serial-getty
2020년 현재 systemd가 서비스의 환경 변수에 지정할 터미널 유형을 결정하는 방식은 TERM
상당히 복잡하며 전혀 문서화되어 있지 않습니다. 바꾸는 방법은 아직 사용중입니다.Environment=TERM=something
기본값의 소스꽤 다양해요. TTYPath=
개별 서비스 단위의 설정 과 관련된 다소 복잡한 해석 규칙이 적용됩니다 .세 가지 값 중 하나일 수 있습니다.: hardwired linux
, hardwired vt220
(더 이상 vt102
) 또는 프로세스 #1에 의해 상속된 환경 변수의 값 TERM
(일반적으로 커널/부트로더에서)입니다.
(아이러니하게도 이 getttyent()
메커니즘은 여전히 GNU C 라이브러리에 존재하며 systemd에서 재사용할 수 있습니다 /etc/ttys
.)
커널 가상 터미널
알다시피 커널 가상 터미널에는 고정된 유형이 있습니다. 커널의 가상 터미널 유형을 동적으로 변경할 수 있는 NetBSD와 달리 Linux 및 기타 BSD는 커널에 내장된 터미널 에뮬레이터에서 단일 고정 터미널 유형을 구현합니다. Linux에서 이 유형은 linux
terminfo 데이터베이스의 유형과 일치합니다. (버전 9부터 FreeBSD의 커널 터미널 에뮬레이션은 이었습니다 teken
. 버전 9 이전에는 cons25
OpenBSD의 커널 터미널 에뮬레이션이 이었습니다 pccon
.)
mingetty
또는 (nosh 패키지의)을 사용하는 시스템에서vc-get-tty
프로그램은 가상 터미널과만 통신할 수 있다는 것을 "인식"하며 프로그램이 컴파일된 운영 체제에 적합한 "알려진" 가상 터미널 유형에 내장되어 있습니다.- systemd 시스템에서는 다음을 읽는 단위 파일(병합되지 않은 시스템의)에서 이를 볼 수 있었습니다.
/usr/lib/systemd/system/[email protected]
/lib/systemd/system/[email protected]
환경=기간=리눅스
TERM
에 전달된 환경의 변수를 설정합니다agetty
.
커널 가상 터미널의 경우확실히터미널 유형을 변경합니다. 결국 커널의 터미널 에뮬레이터 프로그램은 변경되지 않았습니다. 이것은잘못된유형을 변경합니다. 특히 이로 인해 커서/편집 키 CSI 시퀀스 인식이 엉망이 됩니다. Linux 커널 터미널 에뮬레이터에서 보낸 CSI 시퀀스는 DEC VT 모드의 GUI 터미널 에뮬레이터 프로그램에서 보낸 CSI 시퀀스와 다릅니다 linux
. (사실 이 터미널은 매우 특별하고 비표준적이며 내가 아는 모든 실제 터미널 및 Linux에 내장된 터미널을 제외한 거의 모든 소프트웨어 터미널 에뮬레이터와 다릅니다.)xterm
vt100
GUI 터미널 에뮬레이터
screen
GUI 터미널 에뮬레이터는 SSH 데몬부터 . 터미널 유형은 의사 터미널 마스터에서 실행되는 터미널 에뮬레이터 프로그램과 해당 프로그램의 구성 방법에 따라 다릅니다. 대부분의 GUI 터미널 에뮬레이터는 TERM
마스터 측의 터미널 에뮬레이션과 값이 일치하는 변수를 사용하여 슬레이브 측에서 프로그램을 시작합니다 . SSH 서버와 같은 프로그램은 클라이언트의 터미널 유형을 "통해" 연결을 시도합니다. 일반적으로 터미널 에뮬레이션에서 선택할 수 있는 몇 가지 메뉴 또는 구성 옵션이 있습니다.
꽉 쥔 손
색상 기능을 테스트하는 올바른 방법은 다음과 같습니다.아니요스크립트에 터미널 유형 목록을 하드와이어합니다. 색상을 지원하는 터미널 유형은 다양합니다.
올바른 접근 방식은 터미널 유형에 대한 지침을 위해 termcap/terminfo를 확인하는 것입니다.
색상=0 Co > /dev/null 2>&1을 입력하면 그 다음에 "`tput Co`" 테스트 -gt 2 && color=1 elif tput color> /dev/null 2>&1 그 다음에 "`tput color`" 테스트 -gt 2 && color=1 필리핀 제도
추가 읽기
- 조나단 데보인 폴라드(2018).
TERM
.스낵 가이드. 소프트웨어.
답변2
보다https://askubuntu.com/a/614714/398785TERM=xterm-color
나는 왜 이것이 잘못된 접근 방식이고 우분투의 접근 방식이 구식이라고 생각하는지 자세히 대답했습니다 .bashrc
. 나는 이를 사용하고 TERM=xterm-256color
(이것은 gnome-terminal 3.16 이후의 기본값이지만 이전 gnome-terminal에서도 안전하게 사용할 수 있음) .bashrc
그에 따라 조정하는 것이 좋습니다.
답변3
리눅스의 경우,초기화/main.c환경은 다음과 같이 정의됩니다.
static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
그럼 전화해do-execve():
static int run_init_process(const char *init_filename)
{
argv_init[0] = init_filename;
pr_info("Run %s as init process\n", init_filename);
return do_execve(getname_kernel(init_filename),
(const char __user *const __user *)argv_init,
(const char __user *const __user *)envp_init);
}
이것홍보_정보()다음과 같이 표시됩니다.
]# dmesg |grep 'Run'
[ 1.291323] Run /init as init process
따라서 기본값은 처음부터 "TERM=linux"입니다.