Quando você usa as opções -d -m , screen inicia no modo desanexado e, nesse caso, não tenta melhorar sua descrição do terminal com base na sua variável TERM atual. Ele procura apenas a variável TERM quando ela é iniciada normalmente (não desanexada). Quando você anexa à sessão que foi iniciada desanexada, é tarde demais para fazer essa inicialização com base em TERM .
A seção 16.1 Escolhendo a entrada termcap para uma janela no manual descreve algumas das correções que faz.
O que você viu para o caso que não funciona é assim:
TERMCAP=SC|screen|VT 100/ANSI X3.64 virtual terminal:\
: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:
enquanto o bom se parece com isso:
TERMCAP=SC|screen|VT 100/ANSI X3.64 virtual terminal:\
: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=00aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,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:
No caso positivo, screen notou que TERM foi definido como xterm e adicionou recursos a partir dessa descrição.
Você notará este problema com o FreeBSD porque o termcap distribuído com screen não tem cor, quando você limita a descrição ao limite de 1023 bytes assumido pelos aplicativos termcap (as configurações extras são descartadas). Em outras plataformas, você provavelmente estaria usando a descrição fornecida por ncurses, que faz dizer como usar cores. A diferença não é devida à biblioteca usada; Embora screen seja um aplicativo termcap , ele usa ncurses no FreeBSD:
$ 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)
Em vez disso, a diferença é devida a
- O FreeBSD constrói ncurses usando o banco de dados termcap em vez de terminfo (você pode obter o banco de dados terminfo usando uma porta) e
- O FreeBSD tem um arquivo termcap, que não corresponde a outros bancos de dados do terminal. Enquanto algumas correções foram feitas, ainda tem peculiaridades como VT100s com cor , e modificações para fazer as diferenças entre seu console com
TERM=xterme um xterm real menos aparente (exceto para pessoas que usam o xterm, é claro).
Um pouco irônico, pode-se notar que screen define TERMCAP para um formato de várias linhas. Isso foi usado em 4.2BSD e 4.3BSD, mas tornou obsoleto em 4.4BSD (cerca de 25 anos atrás), com a mudança para o uso de bancos de dados com hash e ao mesmo tempo descartando o espaço em branco (que contava com o limite de 1023 bytes no tamanho do termcap) . Desde que o FreeBSD mudou para o ncurses nos anos 90 , esse formato está mais desatualizado, com poucos aplicativos contando na variável TERMCAP . Mas ls é um desses.
screen tem uma opção -T que deve ajudar com isso especificando uma entrada termcap específica (que tem cor), mas ao testá-la, aparece que não pode resolver o problema. / p>
Leitura adicional: