실행 방법에 따라 screen
올바른 TERMCAP 정보가 있거나 없습니다. 그 증상은 터미널에서 색상이 항상 올바르게 표시되지 않는다는 것입니다(예: ls, vim 구문 강조 표시 등).
이것은 잘 작동합니다:
$ echo $TERMCAP
<empty output>
$ screen -S foo
$ screen -r foo
<now I'm inside a screen session>
$ echo $TERMCAP
<long output>
$ ls
<nice pretty colors>
여기에 문제가 있습니다.
$ echo $TERMCAP
<empty output>
$ screen -d -m -S foo
$ screen -r foo
<now I'm inside a screen session>
$ echo $TERMCAP
<long output, but different than before>
$ ls
<no colors ):>
이제 이 문제를 해결할 수 있습니다. TERMCAP 등을 수동으로 수정할 수 있습니다.
하지만 저는 무슨 일이 일어나고 있는지 정말로 이해하고 싶습니다. 가능하다면 "깨끗한" 해결책을 찾고 싶습니다.
무슨 일인지 아는 사람 있나요? -d -m
달리면서 사용 하면 어떤 변화가 있을까요 screen
?
그것이 중요하다면 이것은 FreeBSD에 있습니다.
답변1
-d -m
이 옵션을 사용할 때는 screen
다음으로 시작하세요.탁월한이 경우 TERM
현재 변수를 기반으로 터미널 설명을 개선하려는 시도가 이루어지지 않습니다. TERM
정상적인 시작(분리되지 않음)에서만 변수를 찾습니다 . 분리 모드에서 시작된 세션에 연결하면 초기화를 수행하기에는 너무 늦습니다 TERM
.
이 부분16.1 창에 대한 termcap 항목 선택수정 사항 중 일부는 설명서에 설명되어 있습니다.
작동하지 않는 예는 다음과 같습니다.
TERMCAP=SC|화면|VT 100/ANSI X3.64 가상 터미널:\ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\ :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\ :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ :li#24:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\ :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\ :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\ :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\ :ti=\E[?1049h:te=\E[?1049l:k0=\E[10~:k1=\EOP:k2=\EOQ:\ :k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:\ :k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\ :kh=\E[1~:@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~ :\ :kI=\E[2~:kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:
그리고 좋은 것들은 다음과 같습니다:
TERMCAP=SC|화면|VT 100/ANSI X3.64 가상 터미널:\ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\ :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\ :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ :li#25:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\ :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\ :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\ :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\ :ti=\E[?1049h:te=\E[?1049l:us=\E[4m:ue=\E[24m:so=\E[3m:\ :se=\E[23m:md=\E[1m:mr=\E[7m:me=\E[m:ms:\ :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:G0:\ :as=\E(0:ae=\E(B:\ :ac=\140\140aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:\ :k0=\E[10~:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:\ :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\ :F1=\E[23~:F2=\E[24~:kb=^H:K2=\EOE:kB=\E[Z:kh=\E[1~:\ :@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~:kI=\E[2~ :\ :kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:km:
좋은 경우에는 로 설정되어 있는지 screen
확인 하고 해당 설명에서 기능을 추가하세요.TERM
xterm
screen
FreeBSD에서는 termcap 응용 프로그램에서 가정한 1023바이트 제한으로 설명을 제한할 때 termcap 배포에 색상이 없기 때문에 이 문제를 알 수 있습니다 (추가 설정은 폐기됨). 다른 플랫폼에서는 사용할 수 있습니다.설명하다ncurses에서 제공, 여기서하다컬러 활용법을 알려주세요. 차이점은 사용된 라이브러리 때문이 아닙니다. screen
그것은 비록용어 적용, FreeBSD에서 ncurses를 사용합니다:
$ ldd `which screen`
/usr/local/bin/screen:
libncurses.so.8 => /lib/libncurses.so.8 (0x80086a000)
libelf.so.1 => /usr/lib/libelf.so.1 (0x800ab6000)
libutil.so.9 => /lib/libutil.so.9 (0x800ccb000)
libulog.so.0 => /lib/libulog.so.0 (0x800edd000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x8010df000)
libc.so.7 => /lib/libc.so.7 (0x8012ff000)
libmd.so.6 => /lib/libmd.so.6 (0x801698000)
대신 차이점은 다음과 같습니다.
- FreeBSD는 terminfo보다 우선적으로 termcap 데이터베이스를 사용하여 ncurses를 구축합니다(포트를 사용하여 terminfo 데이터베이스를 얻을 수 있습니다).
- FreeBSD에는 다른 터미널 데이터베이스와 일치하지 않는 termcap 파일이 있습니다. 일부 수정이 이루어졌지만 여전히 다음과 같은 몇 가지 단점이 있습니다.VT100s 색상, 그리고개정하다콘솔과 실제 xterm 사이의 차이를
TERM=xterm
덜 분명하게 만듭니다(물론 xterm을 사용하는 사람들은 제외).
다소 아이러니하게도 형식이 여러 줄로 screen
설정되어 있음을 알 수 있습니다 TERMCAP
. 이는 4.2BSD와 4.3BSD에서 사용되었지만 해시된 데이터베이스를 대신 사용하고 공백도 삭제하여 4.4BSD(약 25년 전)에서 더 이상 사용되지 않습니다(이는 termcap 크기의 1023바이트 제한과 비교됩니다). FreeBSD 이후1990년대에 ncurses로 전환됨, 이 형식은 더 이상 사용되지 않으며 이 TERMCAP
변수에 의존하는 애플리케이션은 거의 없습니다. 하지만 ls
그것은 그들 중 하나입니다.
screen
-T
실제로 옵션이 있습니다~해야 한다특정 termcap 항목(색상 포함)을 지정하여 이 문제를 해결하는 데 도움을 주려는 시도가 있지만 테스트해 보면 문제가 해결되지 않는 것 같습니다.
추가 자료:
답변2
글쎄, 거기에 없던 뭔가가 생겼어또한이 문제를 해결하는 데 무엇이 문제인가요?
세션을 생성하는 스크립트 의 screen
상단 근처에는 다음이 있습니다.
# This runs the commands:
# TERM=screen
# TERMCAP='...'
# with values appropriate for a 'screen' terminal
eval "$(tset - -s screen | tail -n+2)"
# Set up the SCREENCAP variable, which 'screen' will use for new sessions
SCREENCAP="$TERMCAP"; export SCREENCAP
# ...
screen -d -m -S my-session
my-session
이제 터미널 에 연결하면 색상이 작동합니다.
완전히 만족스럽진 않지만 충분히 효과적입니다.