Отключить цвета на терминале и SSH


11

Моя локальная машина с Linux имеет цветной вывод терминала, подобный этому;

введите описание изображения здесь

Когда я подключаю SSH к блоку pfSense / BSD, он меняет цвета следующим образом;

введите описание изображения здесь

Даже когда я отправляю SSH к машине, у которой нет цветного локального терминала, и SSH оттуда к этой коробке pfSense / FreeBSD, она разрешает цветной вывод и начинает выдавать нежелательный цветной вывод /

Есть ли что-то, что я могу изменить локально, чтобы при подключении SSH к коробке pfSense с локального компьютера или с компьютера-посредника мой клиент игнорировал настройки удаленного цвета. В идеале я хочу остаться только в черно-белом, двухцветном стандартном фоне и цвете текста?


Какое терминальное приложение вы используете?
— gertvdijk

1
Здесь я использую Mint Linux 13, так что это Xfce Terminal Emulator 0.4.8.
— jwbensley

Я знаю, что это не то, о чем вы просите, но рассматривали ли вы вопрос об изменении настроек терминала на белый [или светло-серый] текст на черном фоне? Это основная цветовая схема, с которой работает большинство вещей. Или вы можете изменить настройки подсказок на удаленном компьютере (возможно, в .bash_profile), чтобы иметь лучшие цвета или вообще не использовать их.
— Random832

1
Обычно я делаю что-то подобное TERM=xterm-mono ssh user@hostв удаленной среде.
— ot--

Ответы:


7

Цвета в вашем терминале появляются, потому что tty отправляет управляющие последовательности в кодировке ANSI, чтобы сообщить вашему терминалу об изменении цвета. Некоторые, если не большинство терминальных приложений могут быть настроены так, чтобы игнорировать это и отображать весь текст одним цветом.

В xterm, вы можете использовать -cmопцию. Для Konsole можно изменить отображение всех цветов на одно и то же. Ваше приложение терминала XFCE может иметь аналогичные параметры.


Этот ответ может помочь в некоторых случаях, но на самом деле это не ответ. Как уже упоминалось, «цвета в вашем терминале появляются, потому что tty отправляет управляющие последовательности в кодировке ANSI, чтобы сообщить вашему терминалу об изменении цвета». Поскольку SSH может предоставлять TTY, для SSH также должна быть возможность игнорировать цвета. Есть идеи, как это сделать?
— Патрик

На самом деле SSH не предназначен для вмешательства в данные через tty. SSH устанавливает канал , на котором вы можете запустить его, я не думаю , что это должно когда - либо включать в изменении данных по этому каналу. Однако он предоставляет контекст и метаданные, например, какие переменные среды передаются от клиента к серверу во время установки такого канала.
— gertvdijk

7

Изменение TERMпеременной на некоторую запись, которая совместима, но не имеет поддержки цвета, может работать. Подобно:

TERM=xterm-old

По сути, вам нужна TERMизвестная системой FreeBSD база данных termcap или terminfo, для которой TERM=the-term tput colorsне возвращается положительное число, и для GNU ls, для которой dircolors -p | grep -x 'TERM the-term'ничего не возвращается. Это может все еще не работать для приложений, которые выводят цветовые escape-последовательности независимо от того, заявляет ли терминал, поддерживает ли это или нет.

В качестве альтернативы вы можете использовать GNU screenдля отключения цветов, например (синтаксис zsh):

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

Это включит жирный шрифт для каждой попытки установить цвет переднего плана и обратный для каждой попытки установить цвет фона.

Я думаю, что все сводится к тому, что FreeBSD предполагает, что фон терминала черный (или, по крайней мере, темный). Где вы используете xtermвместо xfce-terminal, вы можете динамически изменять цвет фона и переднего плана и / или отдельные цвета, чтобы установить различные цветовые профили. Это делается с помощью escape-последовательностей, но вы также можете использовать xtermcontrolкоманду, которая делает это проще.


Попробовал это - не работает для меня. export TERM=vt100предыдущий по- ls --colorпрежнему показывает цветной вывод.
— gertvdijk

@gertvdijk Хороший вопрос. Кажется, есть ошибка в GNU ls, которая по умолчанию жестко кодирует vt100как терминал с поддержкой цвета. Я изменил то, xterm-oldчто не имеет этой проблемы, но может не иметь записи terminfo во FreeBSD.
— Стефан Шазелас

Что ж, это не мешает другим программам выводить цвет, то есть byobu. Я на Ubuntu 12.04, кстати.
— gertvdijk

1
@gertvdijk. Как я сказал. Он работает только для программ с хорошим поведением, которые используют $TERMбазы данных termcap / terminfo (через curses или другие терминальные API) вместо жесткого кодирования escape-последовательностей.
— Стефан Шазелас

Что я могу использовать, чтобы удалить все escape-последовательности, которые могут изменить состояние терминала после EOF?
— Янус Троелсен

2

Введите следующую команду, чтобы удалить его:

$ ls --color=none

или используйте unaliasдля его удаления:

$ unalias ls

1
Разве это не только для lsзапятой, хотя?
— jwbensley

У ls есть псевдоним "ls --color = tty"
— Лен,

Да. Я знаю. Но весь вывод моего терминала - цветной вывод, а не только lsкоманда, как и в моем предыдущем комментарии: разве это не остановит lsвыдачу цветного вывода, все остальное все равно будет цветным?
— jwbensley

да только часть ls
— Len

1
Вы используете Xterm? xterm -cm
— Лен,

1

Если вы не хотите изменять ваш ~ / .bashrc, который, я уверен, содержит что-то вроде export PS2=.....+colors......:

На Linux консоли, попробуйте либо TERM=linux-m1bили TERM=linux-m2получить монохромное как «серый / белый / черный и Dim» для Linux-M1b или «Зеленый / белый / черный и синий» (винтаж!) Для Linux , м2 ...

С Putty (есть порт для пользователей Mac) используйте TERM=putty-m1bи TERM=putty-m2вместо этого ...

Это будет делать именно то, что вам нужно, но: вам понадобится свежая база данных terminfo для этого или получите ее оттуда, если это необходимо: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Алекс. PS: xterm-mono, кажется, больше не существует.


-1

Сначала проверьте псевдоним по умолчанию:

alias

alias ls-'ls --color=auto

Если не работает, и вам нужно быстро обойти. Попробуйте это lsи awkтруба:

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

установить завивки 744.
Одним из безопасных мест для этого было бы /usr/local/bin убедиться, что ваш PATH включает /usr/local/bin.

Снова используйте усмотрение.

Одна вещь ... цвета предназначены для пометки каталогов ... отключение ls="ls --color=auto"листьев только имен ... ls -aFили ls -Fдобавление имен каталогов с помощью /. Поэтому я бы предложил, чтобы вы знали. Вы могли alias ls="ls -aF"или alias ls="ls -F".


2
Как этот ответ дает ответ на исходный вопрос?
— Jwbensley

Добро пожаловать в переполнение стека! Я рекомендую вам взять тур .
— Стивен Раух
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.