在终端和SSH上禁用颜色


11

我的本地Linux机器的终端输出是这样的:

在此处输入图片说明

当我通过SSH连接到pfSense / BSD框时,它会更改如下颜色:

在此处输入图片说明

即使当我从没有本地彩色输出终端的机器SSH进行SSH,并从那里到此pfSense / FreeBSD框的SSH SSH时,它也会启用彩色输出,并开始产生不需要的彩色输出/

是否可以在本地更改某些内容,以便从本地计算机或通过中间计算机通过SSH SSH到pfSense框时,客户端将忽略远程颜色设置。理想情况下,我只想保留黑白,两种色调的标准背景和文本颜色?


您正在使用什么终端应用程序?
gertvdijk 2012年

1
在这里,我正在运行Mint Linux 13,因此它是Xfce Terminal Emulator 0.4.8。
jwbensley

我知道这不是您要的内容,但是您是否考虑过将终端设置更改为黑色背景上的白色[或浅灰色]文本?这是大多数事物设计要使用的基本配色方案。或者,您可以更改远程计算机上的提示设置(可能在.bash_profile中)以具有更好的颜色或根本没有颜色。
Random832

1
通常,我会TERM=xterm-mono ssh user@host在远程环境中进行设置。
ott--

Answers:


7

因为tty发送ANSI编码的控制序列来告诉您的终端更改颜色,所以您的终端会显示颜色。一些(如果不是大多数的话)终端应用程序可以配置为忽略此设置,而仅以一种颜色显示所有文本。

xterm,您可以使用该-cm选项。对于Konsole,可以将所有颜色的映射更改为相同。您的XFCE终端应用程序可能具有类似的选项。


在某些情况下,此答案可能会有所帮助,但这并不是真正的答案。如前所述,“由于tty发送ANSI编码的控制序列以告知您的终端改变颜色,因此终端中出现颜色”。由于SSH可能提供TTY,因此SSH也应该忽略颜色。任何想法如何做到这一点?
patrik

实际上,SSH并非旨在干扰tty上的数据。SSH设置了可在其上运行的通道,我不认为它应该曾经参与过该通道改变的数据。但是,它确实提供了上下文和元数据,例如,在此类通道的建立时间内,哪些环境变量从客户端传递到服务器。
gertvdijk

7

TERM变量更改为兼容但不支持颜色的某些条目可能会起作用。喜欢:

TERM=xterm-old

基本上,您需要TERMFreeBSD系统的termcap或terminfo数据库已知的TERM=the-term tput colors不返回正数,而对于GNU ls,则不返回任何正数dircolors -p | grep -x 'TERM the-term'。无论终端是否声称支持彩色转义序列,它对于输出颜色转义序列的应用程序仍然可能不起作用。

另外,您可以使用GNU screen禁用颜色,例如(zsh语法):

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

这将使每次设置前景色的尝试都以粗体显示,而为每次设置背景色的尝试均以反向显示。

我认为这全都归结为FreeBSD假定终端背景是黑色(或至少是深色)。在您使用xterm而不是的地方xfce-terminal,您可以动态更改背景和前景色和/或各个颜色以设置不同的颜色配置文件。这是通过转义序列完成的,但是您也可以使用xtermcontrol使它更容易的命令。


尝试过-对我不起作用。export TERM=vt100前面ls --color仍然显示彩色输出。
gertvdijk 2012年

@gertvdijk好点。似乎GNU ls中存在一个错误,默认情况下,该错误vt100为带有颜色支持的终端的硬编码。我已经更改了这样做xterm-old,但没有问题,但是在FreeBSD上可能没有terminfo条目。
斯特凡Chazelas

好吧,它不会阻止其他程序也输出颜色,即byobu。我在Ubuntu 12.04 btw上。
gertvdijk 2012年

1
@gertvdijk。就像我说的。它仅适用于使用行为良好的程序$TERM以及termcap / terminfo数据库(通过curses或其他终端API),而不是对转义序列进行硬编码。
斯特凡Chazelas

我可以用来删除所有在EOF之后可以更改终端状态的转义序列吗?
Janus Troelsen,2015年

2

键入以下命令将其删除:

$ ls --color=none

或用于unalias删除它:

$ unalias ls

1
这不只是为了for ls迷吗?
jwbensley 2012年

ls别名为“ ls --color = tty”
2012年

是。我知道。但是我所有的终端输出都是彩色输出,而不仅仅是ls命令,所以按照我之前的评论:不是只是停止ls产生彩色输出,其他所有东西还是会彩色的吗?
jwbensley 2012年

是的,只有ls部分
2012年

1
您在使用xterm吗?xterm的-cm
莱恩

1

如果您不想修改〜/ .bashrc,我确定其中包含类似以下内容 export PS2=.....+colors......

在linux控制台上,尝试TERM=linux-m1bTERM=linux-m2获得单色作为Linux的-M2“灰/白/黑和点心”为Linux的M1B或“绿色/白色/黑色和蓝色”(老式!)...

使用Putty(Mac用户有一个端口),使用TERM=putty-m1bTERM=putty-m2代替...

这将完全满足您的需要,但是:您将需要一个最新的terminfo数据库,或者在需要时从那里获取它: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

亚历克斯 PS:xterm-mono似乎不再存在。


-1

首先,检查您的默认别名:

alias

alias ls-'ls --color=auto

如果该方法不起作用,则需要快速解决方法。试试这个lsawk管道:

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

设置烫发744
一个安全的地方是/usr/local/bin 确保您的PATH包含/usr/local/bin

再次使用判断力。

一件事……颜色是要标记目录的…… ls="ls --color=auto"仅关闭叶的名称…… ls -aFls -F将目录名称附加/。因此,我建议您注意。你可以alias ls="ls -aF"或者alias ls="ls -F"


2
这个答案如何提供对原始问题的答案?
jwbensley

欢迎使用Stack Overflow!我建议您参加游览
Stephen Rauch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.