tmux, TERM 및 256 색 지원


48

소개

내 질문은 이해의 필요성에서 발생하는 이유는 내가 가지고있는 지금 (여러 실험 후) 터미널TMUX은 256 색을 지원하고 tput colors단지 8 그들가 말해.


배경

처음부터 시작합시다.

내가 사용하고 우분투 상자를 Guake는 , TMUX , 나는 테마 사랑 의 솔라리를 . 그들은 꽤 끔찍해 보였으므로 256 색 지원을 활성화하고 조금 놀기로 결정했습니다.

터미널에서 어떤 일이 발생하는지 봅시다 . tput colors8 가지 색상이 있다고합니다. 나는 개인적으로 왼쪽, 자주색로 설정하고, 물론 오른쪽에 우리는 파란색의 2 개 다른 그늘이있다. $TERM말한다 xterm. (의 색칠 된 것으로 ls나는 eval 이것을 내에서 .bashrc.)

여기에 이미지 설명을 입력하십시오

Vim256256 색이 지원 되지 않는 환경에서 플래그로 호출한다는 사실에도 불구하고 잘 보입니다 .

set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized

감소 된 색 공간에 대해 불평하는 유일한 사람은 tmux 입니다. 호출 tmux은 "잘못된"예상 결과를 제공합니다.

여기에 이미지 설명을 입력하십시오

그러나 호출 tmux-2플래그 것은, 모든 것이 잘 작동하게 마술 .

여기에 이미지 설명을 입력하십시오

이제 내가 이해하는 유일한 것은 ( source ) -2와 같습니다 .export TERM=screen-256color

Guake터미널 과 유사하게 동작 하며 둘 다 xterm질문에 대답 합니다 echo $TERM.


질문

기본적으로 모든 사람이 왜 안 되더라도 모든 것이 작동하는지 이해합니까?

  • 일이 왜 작동하는지 불평하는 것은 비판적입니까? 아마도.
  • 더 좋은 이유가 있습니까? 물론 : 저는 사무실에 다른 우분투 상자의 모양을 수정하고 싶습니다. 왜 일이 작동하는지 작동하지 않는지 이해하고 싶습니다.

추가 실험

에서이 스크립트 (약간 수정 됨)를 실행 xterm하면 다음과 같은 결과가 나타납니다. 256 색이지만 16 색만 올바르게 표시됩니다.

여기에 이미지 설명을 입력하십시오

그런 다음 터미널 프로파일을 변경하면이 16 가지 색상도 변경됩니다.

여기에 이미지 설명을 입력하십시오

더 많은 테스트가 진행되고 있습니다.

왼쪽에서 오른쪽, 위쪽에서 아래쪽에서, 우리는이 솔라리 색상 테마를 dircolor ansi-dark하고 256dark, 다음 기본 ( 탱고 ) 색상을, dircolor ansi-dark하고 256dark.

여기에 이미지 설명을 입력하십시오

관찰 : 이론적으로 dircolor ansi-darkon Solarized 색 구성표 는와 밀접하게 일치해야합니다 dircolor 256dark. 나열된 특정 파일에 대해서는 명확하게 발생하지 않습니다. 대신, 이것은 작업 디렉토리에 폴더 , 텍스트 파일심볼릭 링크 가있을 때 발생 합니다 . 결론 : 256dark색상 을 인코딩하는 동안 많은 관심을 기울이지 않았습니다 .


예비 결론

xtermtput colors말 에도 불구하고 256 색상을 지원합니다 . 프로그램은 ansi팔레트를 참조 하거나 (사용자가 사용자 정의 할 수 있음) 총 256 가지 색상 중에서 선택하여 색상을 정의 할 수 있습니다.


1
이 답변 과 그 아래의 의견을 읽으십시오 . 귀하의 질문에 대답합니까? 또한 지원되는 실제 색상 수를 얻기 위해이 스크립트 를 살펴보십시오 .
terdon

흠 ... 나는 아직도 약간 혼란스러워 ... 그러나 나는 그것이 tput colors믿을 수없는 테스트 라는 것을 적어도 이해하고 있다고 생각한다 . 예비 결론 을 확인할 수 있습니까?
Atcold

2
Gilleś의 대답을 읽으면 tput colors하나의 값만 반환하고 2,8,16,88 또는 256 색상 중 하나를 지원하는 터미널에서는 첫 번째 값 (귀하의 경우 8) 만 반환됩니다. 진정한 가치를 얻으려면 마지막 주석에서 스크립트를 사용하십시오. 그것은 무엇을 반환합니까?
terdon

위의 추가 실험을 확인하십시오 :)
Atcold

아 죄송합니다.
terdon

답변:


33

tmux FAQ 에는 256 색 지원에 대한 정보가 있습니다 .

역사적으로 터미널이 지원하는 색상 수를 감지하는 것은 간단하지 않습니다. 설명 은 터미널 에뮬레이터가 지원하는 색상 확인을 참조하십시오 . 이것은

  • tmux는 터미널이 8 가지 이상의 색상을 지원하는지 확실하게 판단 할 수 없습니다.
  • tmux는 8 개 이상의 색상을 지원하는 애플리케이션과 안정적으로 통신 할 수 없습니다.

tmux에있을 때 상호 작용하는 터미널은 tmux입니다. 모든 xterm의 제어 순서를 지원하지는 않습니다. 특히 OSC 4 ; …색상 값을 쿼리하거나 설정하기 위한 제어 시퀀스를 지원하지 않습니다 . tmux 외부의 xterm에서 직접 실행하는 동안이를 사용해야합니다.

을 실행 tmux -2하면 터미널이 256 색을 지원한다고 생각하지 않더라도 tmux는 256 색 지원으로 시작합니다 (이는 일반적입니다).

기본적으로 tmux는 screen256 색 지원없이 광고합니다 . 당신의 값을 변경할 수 TERM있는 .tmux.conf256 색 지원을 표시하기를 :

set -g default-terminal "screen-256color"

Ubuntu에서 TERM=xterm-256color또는 사용할 수 있습니다 TERM=screen-256color. 이러한 값은 해당 이름에 대해 termcap / terminfo 항목이없는 원격 시스템에 로그인 한 경우에만 문제를 일으 킵니다. 원격 시스템의 홈 디렉토리에 항목을 복사 할 수 있습니다. 이것은 대부분의 최신 terminfo 구현에서 작동합니다.

# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/

나는 설명을 이해하지만, 그것이 내 질문을 목표로 삼고 있는지 확실하지 않습니다. 글쎄, 나는 내 질문이 상당히 광범위하다는 데 동의하지만, tmux에 특별히 초점을 맞추지 않았습니다 . 실제로 tmux 는 기대에 따라 행동하는 유일한 사람이었습니다. 훨씬 더 신비로운 것은 8이라고 말 xterm했지만 256 색을 표시 하는 방법 이었습니다. tput colors이 특정 질문에 대한 대답은 질문 에 대한 그의 의견에서 @terdon 에 의해 해결 된 것 같습니다 .
Atcold

@Atcold 그것은 긴 질문이지만, 내가 말할 수있는 한 대답했습니다. 비 TMUX 관련 부분은 terdon과 내가 링크 한 (그리고 내가 쓴) 답변으로 덮여 있습니다. 귀하의 질문은 그것이 tmux 측면이 아니었다면 그 질문과 중복되었을 것입니다. 대답에서 무엇을 더 기대 했습니까?
Gilles 'SO- 악의를 그만두십시오'

1
@Gilles , 나는 소리를 말하고 싶지 않았습니다. 나는 그가 다른 질문에서 당신의 대답을 언급하더라도 "수용되는 대답" 을 @terdon 으로 인정하려고했습니다 . 그럼에도 불구하고이 set -g default_terminal "screen-256color"명령은 tmux 에서 256 색을 활성화하기에 충분하지 않습니다 . alias tmux='export TERM=screen-256color; /usr/bin/tmux'( 참조 ) 가 필요합니다 .
Atcold

@Atcold 아니요, 별칭이 필요하지 않습니다 (테스트했습니다). 또한이 별칭은 의미가 없습니다. 화면 또는 tmux에서 실행중인 것으로 가장합니다. 그러나 tmux -2tmux가 현재 터미널이 256 색을 지원하지 않는다고 생각하면 이전 단락에 따라 실행해야 하므로 alias tmux='tmux -2'의미가 있습니다.
Gilles 'SO- 악의를 멈춰라'

2
U & L 대답했다고 @Atcold TERM=xterm-256color tmux달리, 감각적 인 TERM=screen-256color tmux. 로컬 terminfo 데이터베이스에없는 tmux -2경우에도 작동하기 때문에 우수 screen-256color합니다.
Gilles 'SO- 악마 그만해'

20

나는 답변 (및 질문!)이 얼마나 풍부하고 형식화되어 있는지에 대해 깊은 인상을 받았습니다. 그들은 당신이 언급 한 도구에 대한 귀중한 정보와 솔루션을 제공하지만 , 도대체 무슨 일이 일어나고 있는지 , 그리고 가장 중요하게는 어떤 도구가 작동하지 않아야 하는지에 대한 통찰력을 거의 제공 하지 않습니다.

기본적인 질문에 대한 통찰력은 다음과 같습니다.

  • 터미널이 지원하는 내용 과보고하는 내용 이 다릅니다. 예를 들어 그놈 터미널은 256 색을 표시 할 수 있지만 에뮬레이터 (8 색) 로 변수 를 통해 환경에 알립니다 .$TERMxterm

  • 설정 tput한대로 수행하는 것과 같은 도구 TERM: 터미널이 실제로 이러한 기능을 지원 하는지 여부에 관계없이 tput colors8 env TERM=xterm-256color tput colors을 인쇄하고 256을 인쇄 합니다.

  • vim도에 따라 TERM기본적으로,하지만 같은 당신이 (플래그 또는를 통해 256 색을 사용하도록했다 set t_Co=256), 그것은 256 색을 사용합니다. 터미널이 실제로 지원 하기 때문에 작동 합니다.

  • tmux그놈 터미널과 마찬가지로 기본적으로 8 색 터미널로보고됩니다. 그러나 Gnome Terminal과 달리 플래그 를 사용하는 경우 256 색 기능 만 활성화 하므로 호환되는 에뮬레이터 로 보고 됩니다 .-2xterm-256color

  • xtermX11 용 터미널 에뮬레이터 소프트웨어 에서와 같이 256 색을 지원합니다. 그러나 8 색 "표준"도 xterm마찬가지입니다 TERM=xterm. 그것은 원래 의 기능을 의미합니다 xterm. 오래 전에 256 색을 지원하도록 업그레이드되었을 때, 그 xterm-256color용어와 일치했습니다.

따라서 모든 것은 다음과 같습니다.

  • 터미널이 실제로 지원하는 기능 (가능한 기능)

  • 이를 통해 그러한 기능을 환경에보고하는 방법 TERM

  • 도구가 TERM그에 따라 자신을 해석 하고 조정 하는 방법

  • 위의 추론 수 있듯이, 망치 피하기 export TERM=xterm-256color당신에 ~/.bashrc와 같은 스크립트 . 이러한 파일은 실제로 사용하는 터미널에 관계없이 실행되므로 Putty를 통한 Windows의 원격 연결, Linux 콘솔 터미널 등을 포함한 모든 터미널이 xterm-256color 호환으로보고됩니다. 어떤 경우에는 맞지만 모두에게 해당되는 것은 아닙니다. 예를 들어,으로 getty액세스하는 Linux 콘솔 CTRL+ALT+1..6은 그렇지 않습니다.

  • 터미널은 가장 "표준"으로 자신을보고해야합니다. 256 색을 처리 할 수 ​​있다는 것을 알면 그와 같이 광고하도록 구성하십시오.

마지막으로 TERM256 색 에 대한 놀라운 수치는 다음 과 같습니다.

http://blog.sanctum.geek.nz/term-strings/

http://blog.sanctum.geek.nz/256-colour-terminals/


이 시나리오에는 예제 시나리오 1-2가 추가되어 있습니다.
Elijah Lynn

5

솔라 라이즈 된 디렉토리 색상 과 관련된 추가 실험 만 다루는 보완적인 답변을 제공 할 것 입니다.

설정

테스트 스크립트에서 동일한 색상이 출력됩니다. 유일한 차이점은 내가 사용하는 것입니다 lxterminalOPENBOX슬림 , xcompmgr 없이 DM. 따라서 터미널 에뮬레이터가 GUI에서 해당 설정을 제공하지 않으며 특정 테마 가 없기 때문에 사용자 정의 팔레트를 쉽게 설정할 수 없습니다 (몇 가지 터미널 에뮬레이터에만 해당). 그래서 나는 반투명하고 장식되지 않은 터미널과 파란색을 파란색 젠투 배경을 가진 전경색으로 사용합니다 . 컬러 파일 의 ansi 버전을 사용할 수 없으므로 dircolors.256dark"저하 된"단순 버전으로 결과를 얻는 데만 집중했습니다 .

다음과 같은 관련 구성과 비콘 솔라 타 중간 글꼴을 사용했습니다.

echo $TERM
xterm

.bashrc:
eval `dircolors /path/to/dircolors.256dark`

.vimrc:
set t_Co=256
let g:solarized_termcolors=256
syntax enable
set background=dark
colorscheme solarized

.tmux.conf:
nothing at all related to colors!
start tmux with "tmux -2"

이색

아래 이미지는 이러한 설정 에서 tmux의 내부와 외부에서 발생하는 상황을 보여줍니다 . 왼쪽의 첫 번째 1/3은 장식되지 않은 lxterminal 창을 세로로 쌓아 놓은 모습입니다 (3). 오른쪽 에는 동일한 동일한 프로그램을 보여주는 tmux 어셈블리가 있습니다. (3) 또한 전체 패키지에 포함 된 .Xresources 파일을 사용하여 나노를 보여주는 태양 화 된 xterm1 도 포함했습니다 (및 샘플링 ).xrdb -load ~/.Xresources

여기에 이미지 설명을 입력하십시오 전체 해상도로 검사하려면 이미지를 마우스 오른쪽 버튼으로 클릭 /보기하십시오

왼쪽 상단의 첫 번째 터미널은 기본 디렉토리 색상을 보여줍니다. 아래는 성능이 저하 된 태양 화 된 버전입니다. .c내가 추가 한 파일의 파란색 배경에 분홍색을 제외하고는이 파일에서 예상 한 것과 동일합니다 (아래 이미지 참조). 기본값과 비교할 때 확장 된 속성, 즉 굵게 / 밝게 / 반전 등을 기반으로하며 색상이 분명히 다릅니다. .txt많은 배포판에서 파일 의 기본 색상 할당 은 녹색이지만 태양 광일 때는 대신 회색이어야합니다 . .txt 파일을 녹색으로 렌더링 하는 ansi 파일이 올바르게 렌더링되지 않거나 전혀 렌더링되지 않습니다. 표시 한 오른쪽 결과는 다음 참조와 관련하여 올바른 결과 (256dark)입니다.

여기에 이미지 설명을 입력하십시오 태양 화 된 "분해 된"dircolors 참조 맵

관찰

내가 사용한 구성을 사용 하면 결과가 tmux 내부와 외부에서 동일하게 나타납니다 (vi에서 주석 (#)을 취소했지만 플러그인은 정상적으로 작동하고 멀티플렉서는 이것에 영향을 미치지 않습니다). 글꼴은 태양 화 된 기능 정의 에서 큰 역할을 하며 경험을 최대화하려면 좋은 글꼴이 필요합니다. 의 솔라리 사용하여 디렉토리 색상 256dark의 파일은 기준과 일치하는 특정 터미널 에뮬레이터의 구성이 필요하지 않습니다.


결론

실제로 디렉토리 색상 의 ansi 렌더링은 저하 된 태양 광 (256dark)과 완전히 다릅니다 . ansi .txt 파일이 녹색이 되도록 너무 많이 . 하나는 다른 렌더링의 유효성을 검사하는 데 사용할 수 없습니다. 두 솔루션 모두 다른 구성이 필요하며 완전히 다른 결과를 생성합니다.


"실제로 솔라리스 디렉토리 목록을 생성하는 유일한 컬러 파일 인 256dark 인코딩에 많은주의를 기울이지 않았다는 결론을 이해하지 못합니까?" 혼란은 ansi-dark비정품 버전을 사용하기 때문에 올바른 출력 으로 간주 했기 때문에 발생합니다. 그런 다음의 출력을 참조하면 256dark마인드가 반전됩니다.
Atcold

"내가 사용한 구성을 사용하면 결과가 tmux 내부와 외부에서 동일하게 나타납니다."물론 256 색을 사용하는 경우 256 색을 지원하는 모든 위치에서 동일한 방식으로 렌더링됩니다. "이 맥락에서 ansi 솔루션이 무엇을 더 제공 할 것인지는 확실하지 않다 ..."그 결과는 근사치 대신 실제 태양 광을 갖는 결과가 될 것이다 .
Atcold

이해 했어요. 나는 ansi 부분을 실제로 조사하지 않았으므로 당신이 어디에서 왔는지 이해할 수 없었습니다. 어쨌든 나는 당신의 Q가 당신을 상당히 가능하게한다는 것을 알았습니다. 어쩌면 나는 그것을 꽤 lol 찾게 vi를 더 사용할 것입니다. 는 ANSI 결과에 관해서는, 실제로 지금은 어떻게 보이는지 본 적이 ... 그들은 단지 DIR-색상이 선보일 여기 . 왜 h. 그 아래에 다른 코딩이 있습니까? 나는 .txt 녹색을 볼 수 있습니다 ... 회색은 녹색에 얼마나 가깝습니까? 나는 그들의 프로젝트를 진지하게 이해하지 못한다.

네, 저자에게 개인적으로 연락을했는데 대답은 "그가 마음에 들었 기 때문에 그의 개인 맞춤화"였습니다. 나는 말문이 ... 내 Q가 누군가를 도와 줘서 기쁘다 :)
Atcold
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.