Désactiver les couleurs sur le terminal et SSH

11

Ma machine Linux locale a une sortie de terminal colorée comme celle-ci;

entrez la description de l'image ici

Lorsque je SSH vers une boîte pfSense / BSD, cela change les couleurs comme ceci;

entrez la description de l'image ici

Même lorsque je SSH vers une machine qui n'a pas de sortie de terminal local colorée, et SSH de là vers cette boîte pfSense / FreeBSD, il permet une sortie colorée et commence à produire une sortie colorée indésirable /

Y a-t-il quelque chose que je peux changer localement pour que lorsque je SSH vers la boîte pfSense depuis ma machine locale ou via une machine intermédiaire, mon client ignore les paramètres de couleur à distance. Idéalement, je veux rester en noir et blanc, en arrière-plan à deux tons et en couleur de texte uniquement?

jwbensley
la source
Quelle application de terminal utilisez-vous?
gertvdijk
1
Ici, je lance Mint Linux 13, il s'agit donc de Xfce Terminal Emulator 0.4.8.
jwbensley
Je sais que ce n'est pas ce que vous demandez, mais avez-vous envisagé de changer les paramètres de votre terminal en texte blanc [ou gris clair] sur fond noir? C'est le schéma de couleurs de base avec lequel la plupart des choses sont conçues pour fonctionner. Ou vous pouvez modifier vos paramètres d'invite sur la machine distante (probablement dans .bash_profile) pour avoir de meilleures couleurs ou pas de couleurs du tout.
Random832
1
Normalement, je fais quelque chose comme TERM=xterm-mono ssh user@hostobtenir ce paramètre dans l'environnement distant.
ott--

Réponses:

7

Les couleurs de votre terminal apparaissent car le tty envoie des séquences de contrôle codées ANSI pour indiquer à votre terminal de changer les couleurs. Certaines, sinon la plupart des applications de terminal peuvent être configurées pour ignorer cela et afficher simplement tout le texte dans une seule couleur.

Dans xterm, vous pouvez utiliser l' -cmoption. Pour Konsole, on peut changer le mappage de toutes les couleurs de la même manière. Votre application de terminal XFCE peut avoir des options similaires.

gertvdijk
la source
Cette réponse peut aider dans certains cas, mais ce n'est pas vraiment une réponse. Comme mentionné "Les couleurs de votre terminal apparaissent parce que le tty envoie des séquences de contrôle encodées ANSI pour dire à votre terminal de changer les couleurs". Étant donné que SSH peut fournir un ATS, SSH devrait également pouvoir ignorer les couleurs. Une idée de comment cela se fait?
patrik
SSH n'est pas vraiment conçu pour interférer avec les données sur le terminal. SSH met en place un canal sur lequel vous pouvez l'exécuter, je ne pense pas que cela devrait impliquer de modifier les données sur ce canal. Cependant, il fournit le contexte et les métadonnées, telles que les variables d'environnement qui sont passées du client au serveur pendant le temps de configuration d'un tel canal.
gertvdijk
7

La modification de la TERMvariable en une entrée compatible mais sans prise en charge des couleurs peut fonctionner. Comme:

TERM=xterm-old

Fondamentalement, vous avez besoin d'une TERMbase de données termcap ou terminfo du système FreeBSD pour laquelle TERM=the-term tput colorsne renvoie pas de nombre positif, et pour GNU ls, un pour lequeldircolors -p | grep -x 'TERM the-term' ne renvoie rien. Il peut toujours ne pas fonctionner pour les applications qui produisent des séquences d'échappement de couleur, que le terminal le prenne en charge ou non.

Alternativement, vous pouvez utiliser GNU screenpour désactiver les couleurs, comme (syntaxe zsh):

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

Cela permettrait à gras pour chaque tentative de définir la couleur de premier plan et inverser pour chaque tentative de définition de la -plan.

Je pense que tout se résume au fait que FreeBSD suppose que l'arrière-plan du terminal est noir (ou au moins sombre). Lorsque vous utilisez xtermau lieu de xfce-terminal, vous pouvez modifier dynamiquement la couleur d'arrière-plan et de premier plan et / ou les couleurs individuelles pour définir différents profils de couleurs. Cela se fait via des séquences d'échappement, mais vous pouvez également utiliser la xtermcontrolcommande qui le rend plus facile.

Stéphane Chazelas
la source
J'ai essayé - ça ne marche pas pour moi. export TERM=vt100le précédent ls --colormontre toujours la sortie colorisée.
gertvdijk
@gertvdijk Bon point. Il semble qu'il y ait un bogue dans GNU ls qui, par défaut, code dur vt100comme étant un terminal avec prise en charge des couleurs. J'ai changé cela, ce xterm-oldqui n'a pas ce problème mais peut ne pas avoir d'entrée terminfo sur FreeBSD.
Stéphane Chazelas
Eh bien, cela n'empêche pas d'autres programmes de produire également des couleurs - c'est-à-dire byobu. Je suis sur Ubuntu 12.04 btw.
gertvdijk
1
@gertvdijk. Comme je l'ai dit. Il ne fonctionne que pour les programmes qui se comportent bien $TERMet les bases de données termcap / terminfo (via des curses ou d'autres API de terminal) au lieu de coder en dur les séquences d'échappement.
Stéphane Chazelas
que puis-je utiliser pour supprimer toutes les séquences d'échappement qui peuvent changer l'état du terminal après EOF?
Janus Troelsen
2

Tapez la commande suivante pour la supprimer:

$ ls --color=none

ou utilisez unaliaspour le supprimer:

$ unalias ls
Len
la source
1
N'est-ce pas seulement pour la lscommade?
jwbensley
ls est aliasé à "ls --color = tty"
Len
Oui. Je sais. Mais toute ma sortie de terminal est une sortie colorée, pas seulement la lscommande, donc selon mon commentaire précédent: cela ne va-t-il pas simplement arrêter de lsproduire une sortie colorée, tout le reste sera quand même coloré?
jwbensley
oui seulement la partie ls
Len
1
utilisez-vous xterm? xterm -cm
Len
1

Dans le cas où vous ne souhaitez pas modifier votre ~ / .bashrc qui contient certainement quelque chose comme export PS2=.....+colors......:

Sur la console Linux, essayez soit TERM=linux-m1bou TERM=linux-m2pour obtenir monochrome comme « Gris / Blanc / Noir et Dim » pour linux-M1B ou « Vert / Blanc / Noir et bleu » (vintage!) Pour linux m2 ...

Avec Putty (il y a un port pour les utilisateurs Mac), utilisez TERM=putty-m1bet à la TERM=putty-m2place ...

Cela fera exactement ce dont vous avez besoin, mais: Vous aurez besoin d'une base de données terminfo récente pour cela ou l'obtenir si nécessaire: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Alex. PS: xterm-mono ne semble plus exister.

Alexandre MONTARON
la source
-1

Tout d'abord, vérifiez votre alias par défaut:

alias

alias ls-'ls --color=auto

Si cela ne fonctionne pas et que vous avez besoin d'une solution rapide. Essayez ceci lset awkpipe:

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

définissez les perms 744.
Un endroit sûr pour cela serait de /usr/local/bin vous assurer que votre CHEMIN comprend /usr/local/bin.

Encore une fois, utilisez la discrétion.

Une chose… les couleurs sont destinées à signaler les répertoires… en désactivant ls="ls --color=auto"uniquement les noms de feuilles… ls -aFou ls -Fajoutera les noms de répertoire avec /. Je suggère donc que vous soyez au courant. Vous pourriez alias ls="ls -aF"ou alias ls="ls -F".

Scott
la source
2
Comment cette réponse apporte-t-elle une réponse à la question d'origine?
jwbensley
Bienvenue dans Stack Overflow! Je vous recommande de faire le tour .
Stephen Rauch