Disabilita i colori sul terminale e SSH


11

La mia macchina Linux locale ha un output dei terminali colorato come questo;

inserisci qui la descrizione dell'immagine

Quando SSH in una scatola pfSense / BSD cambia i colori in questo modo;

inserisci qui la descrizione dell'immagine

Anche quando SSH da una macchina che non ha un'uscita terminale locale colorata e SSH da lì a questa scatola pfSense / FreeBSD abilita l'output colorato e inizia a produrre output colorato indesiderato /

C'è qualcosa che posso cambiare localmente in modo che quando eseguo SSH nella casella pfSense dal mio computer locale o tramite un computer intermedio, il mio client ignorerà le impostazioni del colore remoto. Idealmente, voglio rimanere in bianco e nero, con due colori di sfondo e solo testo standard?


Quale applicazione terminale stai usando?
gertvdijk,

1
Qui sto usando Mint Linux 13, quindi è Xfce Terminal Emulator 0.4.8.
jwbensley,

So che questo non è ciò che stai chiedendo, ma hai considerato di cambiare le impostazioni del tuo terminale in testo bianco [o grigio chiaro] su uno sfondo nero? Questa è la combinazione di colori di base con cui la maggior parte delle cose è progettata per funzionare. Oppure puoi modificare le impostazioni del prompt sul computer remoto (probabilmente in .bash_profile) per avere colori migliori o nessun colore.
Casuale 832,

1
Normalmente faccio qualcosa di simile TERM=xterm-mono ssh user@hostper ottenere quell'impostazione nell'ambiente remoto.
ott--

Risposte:


7

I colori nel terminale vengono visualizzati perché tty invia sequenze di controllo con codifica ANSI per indicare al terminale di cambiare colore. Alcuni, se non la maggior parte delle applicazioni terminali, possono essere configurati per ignorare questo e visualizzare solo tutto il testo in un colore.

In xterm, è possibile utilizzare l' -cmopzione. Per Konsole, si può cambiare la mappatura di tutti i colori allo stesso. L'applicazione del terminale XFCE potrebbe avere opzioni simili.


Questa risposta può aiutare in alcuni casi, ma in realtà non è una risposta. Come detto "I colori nel tuo terminale appaiono perché il tty invia sequenze di controllo con codifica ANSI per dire al tuo terminale di cambiare colore". Poiché SSH può fornire TTY, dovrebbe anche essere possibile che SSH ignori i colori. Qualche idea su come sia fatto?
Patrik,

SSH non è progettato per interferire con i dati su tty, davvero. SSH imposta un canale su cui è possibile eseguirlo, non credo che dovrebbe mai comportare l'alterazione dei dati su quel canale. Fornisce tuttavia contesto e metadati, ad esempio quali variabili di ambiente vengono passate dal client al server durante il tempo di installazione di tale canale.
gertvdijk,

7

La modifica della TERMvariabile in una voce compatibile ma che non ha il supporto del colore potrebbe funzionare. Piace:

TERM=xterm-old

Fondamentalmente, hai bisogno di un TERMnoto dal termcap del sistema FreeBSD o dal database terminfo per il quale TERM=the-term tput colorsnon restituisce un numero positivo, e per GNU ls, uno per il quale dircolors -p | grep -x 'TERM the-term'non restituisce nulla. Potrebbe non funzionare ancora per le applicazioni che producono sequenze di escape colore indipendentemente dal fatto che il terminale dichiari di supportarlo o meno.

In alternativa, puoi usare GNU screenper disabilitare i colori, come (sintassi zsh):

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

Ciò consentirebbe il grassetto per ogni tentativo di impostare il colore di primo piano e il contrario per ogni tentativo di impostare quello di sfondo.

Penso che tutto si riduce al fatto che FreeBSD presume che lo sfondo del terminale sia nero (o almeno scuro). Dove si utilizza xterminvece di xfce-terminal, è possibile modificare dinamicamente il colore di sfondo e di primo piano e / o i singoli colori per impostare diversi profili di colore. Ciò avviene tramite sequenze di escape, ma è anche possibile utilizzare il xtermcontrolcomando che lo rende più semplice.


Ho provato che non funziona per me. export TERM=vt100precedente ls --colormostra ancora output colorato.
gertvdijk,

@gertvdijk Ottimo punto. Sembra che ci sia un bug in GNU ls che, di default, codifica vt100come un terminale con supporto colore. Ho cambiato quella cosa xterm-oldche non ha quel problema ma potrebbe non avere una voce terminfo su FreeBSD.
Stéphane Chazelas,

Bene, non impedisce anche ad altri programmi di produrre colore - vale a dire byobu. Sono su Ubuntu 12.04 a proposito.
gertvdijk,

1
@gertvdijk. Come ho detto. Funziona solo con programmi ben educati che utilizzano $TERMe con i database termcap / terminfo (tramite maledizioni o altre API terminali) invece di codificare le sequenze di escape.
Stéphane Chazelas,

cosa posso usare per rimuovere tutte le sequenze di escape che possono cambiare lo stato del terminale dopo EOF?
Janus Troelsen,

2

Digita il seguente comando per rimuoverlo:

$ ls --color=none

o usa unaliasper rimuoverlo:

$ unalias ls

1
Non è solo per il lscomune?
jwbensley,

ls è chiamato "ls --color = tty"
Len il

Sì. Lo so. Ma tutto il mio output del terminale è output colorato, non solo il lscomando, quindi come per il mio commento precedente: non smetterà solo di lsprodurre output colorato, ma tutto il resto sarà comunque colorato?
jwbensley,

sì, solo la parte ls
Len

1
stai usando xterm? xterm -cm
Len il

1

Nel caso in cui non desideri modificare il tuo ~ / .bashrc, che sicuramente contiene qualcosa del tipo export PS2=.....+colors......:

Sulla console linux, prova TERM=linux-m1bo TERM=linux-m2per ottenere monocromatico come "Grigio / Bianco / Nero e Dim" per Linux-m1b o "Verde / Bianco / Nero e Blu" (vintage!) Per Linux-m2 ...

Con Putty (c'è una porta per utenti Mac), usa TERM=putty-m1be TERM=putty-m2invece ...

Questo farà esattamente ciò di cui hai bisogno ma: Avrai bisogno di un database terminfo recente per farlo o ottenerlo da lì se necessario: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Alex. PS: xterm-mono sembra non esistere più.


-1

Innanzitutto, controlla l'alias predefinito:

alias

alias ls-'ls --color=auto

Se non funziona e hai bisogno di una soluzione rapida. Prova questo lse awkpipe:

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

impostare i permanenti 744.
Un posto sicuro per questo sarebbe /usr/local/bin assicurarsi che il PATH includa /usr/local/bin.

Usa di nuovo discrezione.

Una cosa ... i colori hanno lo scopo di contrassegnare le directory ... disattivando le ls="ls --color=auto"foglie solo i nomi ... ls -aFo ls -Faggiungeranno i nomi delle directory /. Quindi suggerirei di essere consapevole. Potresti alias ls="ls -aF"o alias ls="ls -F".


2
In che modo questa risposta fornisce una risposta alla domanda originale?
Jwbensley,

Benvenuto in Stack Overflow! Ti consiglio di fare il tour .
Stephen Rauch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.