Deaktivieren Sie Farben auf Terminal und SSH

11

Mein lokaler Linux-Computer hat eine farbige Terminalausgabe wie diese.

Geben Sie hier die Bildbeschreibung ein

Wenn ich eine pfSense / BSD-Box SSH, ändert sich die Farbe wie folgt;

Geben Sie hier die Bildbeschreibung ein

Selbst wenn ich SSH von zu einem Computer ohne farbigen lokalen Terminalausgang und SSH von dort zu dieser pfSense / FreeBSD-Box verwende, wird die farbige Ausgabe aktiviert und es werden unerwünschte farbige Ausgaben erzeugt.

Gibt es etwas, das ich lokal ändern kann, sodass mein Client die Remote-Farbeinstellungen ignoriert, wenn ich von meinem lokalen Computer oder über einen Zwischencomputer zur pfSense-Box SSH. Idealerweise möchte ich nur in Schwarzweiß, zweifarbigem Standardhintergrund und Textfarbe bleiben?

jwbensley
quelle
Welche Terminalanwendung verwenden Sie?
Gertvdijk
1
Hier läuft Mint Linux 13, es ist also Xfce Terminal Emulator 0.4.8.
Jwbensley
Ich weiß, dass dies nicht das ist, wonach Sie fragen, aber haben Sie darüber nachgedacht, Ihre Terminaleinstellungen in weißen [oder hellgrauen] Text auf schwarzem Hintergrund zu ändern? Das ist das grundlegende Farbschema, mit dem die meisten Dinge arbeiten sollen. Oder Sie können Ihre Eingabeaufforderungseinstellungen auf dem Remotecomputer (wahrscheinlich in .bash_profile) ändern, um bessere oder gar keine Farben zu erhalten.
Random832
1
Normalerweise mache ich so etwas wie TERM=xterm-mono ssh user@host, um diese Einstellung in der Remote-Umgebung zu erhalten.
ott--

Antworten:

7

Farben in Ihrem Terminal werden angezeigt, weil das tty ANSI-codierte Steuersequenzen sendet, um Ihr Terminal anzuweisen, die Farben zu ändern. Einige, wenn nicht die meisten Terminalanwendungen können so konfiguriert werden, dass sie dies ignorieren und nur den gesamten Text in einer Farbe anzeigen.

In xtermkönnen Sie die -cmOption verwenden. Für Konsole kann die Zuordnung aller Farben zu derselben geändert werden. Ihre XFCE-Terminalanwendung verfügt möglicherweise über ähnliche Optionen.

gertvdijk
quelle
Diese Antwort kann in einigen Fällen hilfreich sein, ist aber keine wirkliche Antwort. Wie bereits erwähnt "Farben in Ihrem Terminal werden angezeigt, weil das tty ANSI-codierte Steuersequenzen sendet, um Ihr Terminal anzuweisen, die Farben zu ändern". Da SSH möglicherweise TTY bereitstellt, sollte es SSH auch möglich sein, Farben zu ignorieren. Irgendeine Idee, wie das gemacht wird?
Patrik
SSH ist eigentlich nicht dafür ausgelegt, die Daten über das tty zu stören. SSH setzt auf einen Kanal , auf dem es laufen kann, ich glaube nicht , es sollte immer bei der Veränderung von Daten über diesen Kanal betreffen. Es werden jedoch Kontext- und Metadaten bereitgestellt, z. B. welche Umgebungsvariablen während der Einrichtungszeit eines solchen Kanals vom Client an den Server übergeben werden.
Gertvdijk
7

Das Ändern der TERMVariablen in einen Eintrag, der kompatibel ist, aber keine Farbunterstützung bietet, funktioniert möglicherweise. Mögen:

TERM=xterm-old

Grundsätzlich benötigen Sie eine TERMvom FreeBSD-System bekannte termcap- oder terminfo-Datenbank, für die TERM=the-term tput colorskeine positive Zahl zurückgegeben wird, und für GNUs eine, für die dircolors -p | grep -x 'TERM the-term'nichts zurückgegeben wird. Es funktioniert möglicherweise immer noch nicht für Anwendungen, die Farb-Escape-Sequenzen ausgeben, unabhängig davon, ob das Terminal behauptet, dies zu unterstützen oder nicht.

Alternativ können Sie GNU verwenden screen, um Farben wie (zsh-Syntax) zu deaktivieren:

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

Das würde es ermöglichen , fett für jeden Versuch , die Vordergrundfarbe zu setzen und umgekehrt für jeden Versuch , den Hintergrund einen zu setzen.

Ich denke, alles läuft darauf hinaus, dass FreeBSD davon ausgeht, dass der Terminalhintergrund schwarz (oder zumindest dunkel) ist. Wenn Sie xtermanstelle von verwenden xfce-terminal, können Sie die Hintergrund- und Vordergrundfarbe und / oder die einzelnen Farben dynamisch ändern, um unterschiedliche Farbprofile festzulegen. Dies geschieht über Escape-Sequenzen, aber Sie können auch den xtermcontrolBefehl verwenden, der es einfacher macht.

Stéphane Chazelas
quelle
Versuchte das - funktioniert bei mir nicht. export TERM=vt100Das vorhergehende ls --colorzeigt immer noch die kolorierte Ausgabe.
Gertvdijk
@gertvdijk Guter Punkt. Es scheint, dass es einen Fehler in GNUs gibt, der standardmäßig vt100als Terminal mit Farbunterstützung gilt. Ich habe das Do geändert, xterm-olddas dieses Problem nicht hat, aber möglicherweise keinen terminfo-Eintrag in FreeBSD hat.
Stéphane Chazelas
Nun, es hindert andere Programme nicht daran, auch Farben auszugeben - dh byobu. Ich bin übrigens auf Ubuntu 12.04.
Gertvdijk
1
@gertvdijk. Wie ich sagte. Es funktioniert nur für gut erzogene Programme, die $TERMdie Termcap / Terminfo-Datenbanken verwenden (über Flüche oder andere Terminal-APIs), anstatt die Escape-Sequenzen fest zu codieren.
Stéphane Chazelas
Was kann ich verwenden, um alle Escape-Sequenzen zu entfernen, die den Terminalstatus nach EOF ändern können?
Janus Troelsen
2

Geben Sie den folgenden Befehl ein, um ihn zu entfernen:

$ ls --color=none

oder verwenden Sie unalias, um es zu entfernen:

$ unalias ls
Len
quelle
1
Ist das nicht nur für das lsKommando?
Jwbensley
ls ist alias "ls --color = tty"
Len
Ja. Ich kenne. Aber meine gesamte Terminalausgabe ist eine farbige Ausgabe, nicht nur der lsBefehl. Gemäß meinem vorherigen Kommentar: lsWird das nicht einfach aufhören , farbige Ausgaben zu produzieren, aber alles andere wird trotzdem farbig sein?
Jwbensley
ja nur der ls Teil
Len
1
Verwenden Sie xterm? xterm -cm
Len
1

Für den Fall, dass Sie Ihr ~ / .bashrc nicht ändern möchten, das sicher Folgendes enthält export PS2=.....+colors......:

Versuchen Sie auf der Linux-Konsole entweder TERM=linux-m1boder TERM=linux-m2erhalten Sie Monochrom als "Grau / Weiß / Schwarz und Dunkel" für Linux-m1b oder "Grün / Weiß / Schwarz und Blau" (Vintage!) Für Linux-m2 ...

Verwenden Sie mit Putty (es gibt einen Port für Mac-Benutzer) TERM=putty-m1bund TERM=putty-m2...

Dies wird genau das tun, was Sie brauchen, aber: Sie benötigen dafür eine aktuelle terminfo-Datenbank oder beziehen diese bei Bedarf von dort: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Alex. PS: xterm-mono scheint nicht mehr zu existieren.

Alexandre MONTARON
quelle
-1

Überprüfen Sie zunächst Ihren Standardalias:

alias

alias ls-'ls --color=auto

Wenn das nicht funktioniert und Sie eine schnelle Problemumgehung benötigen. Versuchen Sie dies lsund awkPipe:

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

Stellen Sie die Dauerwellen ein 744.
Ein sicherer Ort dafür wäre, /usr/local/bin sicherzustellen, dass Ihr PFAD enthält /usr/local/bin.

Verwenden Sie wieder Diskretion.

Eine Sache… die Farben sollen Verzeichnisse kennzeichnen ls="ls --color=auto"… nur die Namen der Blätter ausschalten … ls -aFoder ls -Fdie Verzeichnisnamen anhängen /. Daher würde ich vorschlagen, dass Sie sich dessen bewusst sind. Du könntest alias ls="ls -aF"oder alias ls="ls -F".

Scott
quelle
2
Wie gibt diese Antwort eine Antwort auf die ursprüngliche Frage?
Jwbensley
Willkommen bei Stack Overflow! Ich empfehle Ihnen die Tour zu machen .
Stephen Rauch