Desativar cores no terminal e SSH

11

Minha máquina Linux local possui saída de terminal colorida como esta;

insira a descrição da imagem aqui

Quando eu SSH em uma caixa pfSense / BSD, ele muda as cores assim;

insira a descrição da imagem aqui

Mesmo quando eu SSH de uma máquina que não possui uma saída de terminal local colorida e o SSH de lá para esta caixa do pfSense / FreeBSD, ele ativa a saída colorida e começa a produzir saídas coloridas indesejadas /

Existe algo que eu possa alterar localmente para que, quando eu SSH na caixa pfSense da minha máquina local ou através de uma máquina intermediária, meu cliente ignore as configurações de cores remotas. Idealmente, quero ficar em preto-e-branco, apenas dois tons de fundo e cores de texto padrão?

jwbensley
fonte
Qual aplicativo de terminal você está usando?
Gdvdijk
1
Aqui estou executando o Mint Linux 13, por isso é o Xfce Terminal Emulator 0.4.8.
jwbensley
Sei que não é isso que você está pedindo, mas você já pensou em alterar as configurações do terminal para texto em branco [ou cinza claro] em um fundo preto? Esse é o esquema de cores básico com o qual a maioria das coisas foi projetada para funcionar. Ou você pode alterar suas configurações de prompt na máquina remota (provavelmente em .bash_profile) para ter cores melhores ou nenhuma cor.
Random832
1
Normalmente, faço algo como TERM=xterm-mono ssh user@hostobter essa configuração no ambiente remoto.
#

Respostas:

7

As cores no seu terminal aparecem porque o tty envia sequências de controle codificadas em ANSI para solicitar ao seu terminal que mude as cores. Alguns, se não a maioria dos aplicativos de terminal, podem ser configurados para ignorar isso e apenas exibir todo o texto em uma cor.

Em xterm, você pode usar a -cmopção Para o Konsole, é possível alterar o mapeamento de todas as cores para a mesma. Seu aplicativo de terminal XFCE pode ter opções semelhantes.

gertvdijk
fonte
Essa resposta pode ajudar em alguns casos, mas não é realmente uma resposta. Como mencionado "As cores no seu terminal aparecem porque o tty envia seqüências de controle codificadas em ANSI para dizer ao seu terminal para mudar as cores". Como o SSH pode fornecer TTY, também deve ser possível que o SSH ignore as cores. Alguma idéia de como isso é feito?
patrik
O SSH não foi projetado para interferir com os dados sobre o tty, na verdade. O SSH configura um canal no qual você pode executá-lo, acho que nunca deveria envolver a alteração de dados nesse canal. No entanto, ele fornece contexto e metadados, como quais variáveis ​​de ambiente são passadas do cliente para o servidor durante o tempo de configuração desse canal.
gertvdijk
7

Alterar a TERMvariável para alguma entrada que seja compatível, mas não tenha suporte a cores, pode funcionar. Gostar:

TERM=xterm-old

Basicamente, você precisa de um TERMconhecido pelo banco de dados termcap ou terminfo do sistema FreeBSD, para o qual TERM=the-term tput colorsnão retorne um número positivo, e para o GNU ls, um para o qual dircolors -p | grep -x 'TERM the-term'não retorne nada. Ainda pode não funcionar para aplicativos que produzem seqüências de escape de cores, independentemente de o terminal reivindicar suporte ou não.

Como alternativa, você pode usar o GNU screenpara desativar cores, como (sintaxe zsh):

screen -c =(printf %s\\n "termcapinfo * 'AF=\E[1m:AB=\E[7m'") ssh ...

Isso permitiria negrito para todas as tentativas de definir a cor do primeiro plano e reverter para cada tentativa de definir a de segundo plano.

Eu acho que tudo se resume ao fato de o FreeBSD assumir que o fundo do terminal é preto (ou pelo menos escuro). Onde você estiver usando, em xtermvez de xfce-terminal, poderá alterar dinamicamente as cores de plano de fundo e primeiro plano e / ou as cores individuais para definir diferentes perfis de cores. Isso é feito por meio de seqüências de escape, mas você também pode usar o xtermcontrolcomando que facilita.

Stéphane Chazelas
fonte
Tentei isso - não funciona para mim. export TERM=vt100anterior ls --colorainda mostra a saída colorida.
gertvdijk
@gertvdijk Good point. Parece que há um bug no GNU ls que, por padrão, os códigos rígidos vt100são um terminal com suporte a cores. Eu mudei que fazer xterm-oldque não tem esse problema, mas pode não ter uma entrada terminfo no FreeBSD.
Stéphane Chazelas
Bem, isso não impede que outros programas produzam cores também - ie byobu. Estou no Ubuntu 12.04 btw.
gertvdijk
1
@gertvdijk. Como eu disse. Ele funciona apenas para programas bem comportados que usam $TERMe os bancos de dados termcap / terminfo (por meio de maldições ou outras APIs de terminal) em vez de codificar as seqüências de escape.
Stéphane Chazelas
o que posso usar para remover todas as seqüências de escape que podem alterar o estado do terminal após o EOF?
Janus Troelsen
2

Digite o seguinte comando para removê-lo:

$ ls --color=none

ou use unaliaspara removê-lo:

$ unalias ls
Len
fonte
1
Mas isso não é apenas para o lscamarada?
jwbensley
ls é alias de "ls --color = tty"
Len
Sim. Eu sei. Mas toda a minha saída do terminal é colorida, não apenas o lscomando, de acordo com o meu comentário anterior: isso não vai parar de lsproduzir uma saída colorida, todo o resto ainda será colorido?
jwbensley
sim apenas a parte ls
Len
1
você está usando o xterm? xterm -cm
Len
1

Caso você não queira modificar seu ~ / .bashrc, tenho certeza que contém algo como export PS2=.....+colors......:

No linux Console, tente um TERM=linux-m1bou TERM=linux-m2para obter monocromático como "cinza / branco / preto e Dim" para linux-M1b ou "verde / branco / preto e azul" (vintage!) Para linux-m2 ...

Com o Putty (existe uma porta para usuários de Mac), use TERM=putty-m1be em TERM=putty-m2vez disso ...

Isso fará exatamente o que você precisa, mas: Você precisará de um banco de dados terminfo recente para isso ou obtê-lo a partir daí, se necessário: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Alex. PS: O xterm-mono parece não existir mais.

Alexandre MONTARON
fonte
-1

Primeiro, verifique seu alias padrão:

alias

alias ls-'ls --color=auto

Se o não funcionar e você precisar de uma solução rápida. Tente isso lse faça o awkpipe:

vi /usr/local/bin/list
#!/bin/bash
ls $1
exit

defina as permissões 744.
Um lugar seguro para isso seria /usr/local/bin Verifique se o seu PATH inclui /usr/local/bin.

Mais uma vez, use discrição.

Uma coisa ... as cores são destinadas a sinalizar diretórios ... desativar os ls="ls --color=auto"nomes somente das folhas ... ls -aFou ls -Fanexará os nomes dos diretórios /. Então, eu sugiro que você esteja ciente. Você poderia alias ls="ls -aF"ou alias ls="ls -F".

Scott
fonte
2
Como essa resposta fornece uma resposta para a pergunta original?
precisa saber é o seguinte
Bem-vindo ao Stack Overflow! Eu recomendo que você faça o passeio .
Stephen Rauch