Wyłącz kolory na terminalu i SSH

11

Moja lokalna maszyna Linux ma takie kolorowe wyjście wyjściowe;

wprowadź opis zdjęcia tutaj

Kiedy I SSH do pfSense / BSD zmienia kolory w ten sposób;

wprowadź opis zdjęcia tutaj

Nawet gdy I SSH do maszyny, która nie ma kolorowego lokalnego wyjścia terminala, a SSH stamtąd do tego pfSense / FreeBSD umożliwia kolorowe wydruki i zaczyna generować niepożądane kolorowe wydruki /

Czy jest coś, co mogę zmienić lokalnie, aby po podłączeniu SSH do skrzynki pfSense z mojego komputera lokalnego lub urządzenia pośredniczącego mój klient zignorował ustawienia kolorów zdalnych. Czy chciałbym pozostać tylko w czerni i bieli, dwukolorowym standardowym tle i kolorze tekstu?

jwbensley
źródło
Jakiej aplikacji terminalowej używasz?
gertvdijk
1
Tutaj uruchamiam Mint Linux 13, więc jest to emulator terminala Xfce 0.4.8.
jwbensley,
Wiem, że nie o to prosisz, ale czy zastanawiałeś się nad zmianą ustawień terminalu na biały [lub jasnoszary] tekst na czarnym tle? To podstawowy schemat kolorów, z którym większość rzeczy jest zaprojektowana do pracy. Możesz też zmienić ustawienia monitu na zdalnym komputerze (prawdopodobnie w pliku .bash_profile), aby uzyskać lepsze kolory lub nie mieć ich wcale.
Random832,
1
Zwykle robię coś takiego, TERM=xterm-mono ssh user@hostaby uzyskać to ustawienie w środowisku zdalnym.
ott--

Odpowiedzi:

7

Kolory w twoim terminalu pojawiają się, ponieważ tty wysyła sekwencje kontrolne zakodowane w ANSI, aby poinformować twój terminal o zmianie kolorów. Niektóre, jeśli nie większość aplikacji terminalowych, można skonfigurować tak, aby ignorowały to i wyświetlały cały tekst w jednym kolorze.

W xtermmożesz użyć -cmopcji. W przypadku Konsoli można zmienić odwzorowanie wszystkich kolorów na takie same. Twoja aplikacja terminalowa XFCE może mieć podobne opcje.

gertvdijk
źródło
Ta odpowiedź może w niektórych przypadkach pomóc, ale tak naprawdę nie jest odpowiedzią. Jak wspomniano, „Kolory w twoim terminalu pojawiają się, ponieważ tty wysyła sekwencje kontrolne zakodowane w ANSI, aby powiedzieć terminalowi, aby zmienił kolory”. Ponieważ SSH może zapewniać TTY, powinno być również możliwe ignorowanie kolorów przez SSH. Wiesz, jak to się robi?
patrik
Naprawdę SSH nie ma na celu zakłócania danych przez tty. SSH ustanawia kanał, na którym można go uruchomić, nie sądzę, że powinien on kiedykolwiek obejmować zmiany danych w tym kanale. Dostarcza jednak kontekstu i metadanych, takich jak zmienne środowiskowe przekazywane z klienta na serwer w czasie konfiguracji takiego kanału.
gertvdijk
7

Zmiana TERMzmiennej na wpis, który jest zgodny, ale nie obsługuje kolorów, może działać. Lubić:

TERM=xterm-old

Zasadniczo potrzebujesz TERMznanej przez system FreeBSD termcap lub bazy danych terminfo, dla której TERM=the-term tput colorsnie zwraca liczby dodatniej, a dla GNU ls, dla której dircolors -p | grep -x 'TERM the-term'nic nie zwraca. Może nadal nie działać w aplikacjach, które generują sekwencje specjalne kolorów, niezależnie od tego, czy terminal twierdzi, że je obsługuje, czy nie.

Alternatywnie możesz użyć GNU screendo wyłączenia kolorów, na przykład (składnia zsh):

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

Umożliwiłoby to pogrubienie dla każdej próby ustawienia koloru pierwszego planu i odwrócenie dla każdej próby ustawienia tła.

Myślę, że wszystko sprowadza się do faktu, że FreeBSD zakłada, że ​​tło terminala jest czarne (a przynajmniej ciemne). Jeśli używasz xtermzamiast xfce-terminal, możesz dynamicznie zmieniać kolor tła i pierwszego planu i / lub poszczególne kolory, aby ustawić różne profile kolorów. Odbywa się to poprzez sekwencje specjalne, ale można także użyć xtermcontrolpolecenia, które to ułatwia.

Stéphane Chazelas
źródło
Próbowałem tego - nie działa dla mnie. export TERM=vt100poprzedni ls --colornadal pokazuje kolorowe wydruki.
gertvdijk
@gertvdijk Dobra uwaga. Wygląda na to, że w GNU jest błąd, który domyślnie jest sztywnym kodem vt100jako terminal z obsługą kolorów. Zmieniłem to, xterm-oldco nie ma tego problemu, ale może nie mieć wpisu terminfo na FreeBSD.
Stéphane Chazelas,
Cóż, nie uniemożliwia to także innym programom wyświetlania kolorów - tj byobu. Jestem na Ubuntu 12.04 btw.
gertvdijk
1
@gertvdijk. Tak jak powiedziałem. Działa tylko w przypadku dobrze zachowujących się programów, które używają $TERMbaz danych termcap / terminfo (za pośrednictwem przekleństw lub innych interfejsów API terminali) zamiast kodować sekwencje specjalne.
Stéphane Chazelas,
czego mogę użyć, aby usunąć wszystkie sekwencje specjalne, które mogą zmienić stan terminala po EOF?
Janus Troelsen,
2

Wpisz następujące polecenie, aby je usunąć:

$ ls --color=none

lub użyj, unaliasaby go usunąć:

$ unalias ls
Len
źródło
1
Czy to nie tylko dla lscommad?
jwbensley,
ls jest aliasowany na „ls --color = tty”
Len
Tak. Wiem. Ale wszystkie moje wyjściowe dane wyjściowe to kolorowe wydruki, a nie tylko lspolecenie, więc zgodnie z moim poprzednim komentarzem: czy to nie po prostu przestanie lsprodukować kolorowe wydruki, ale wszystko inne nadal będzie kolorowe?
jwbensley,
tak, tylko część ls
Len
1
używasz xterm? xterm -cm
Len
1

W przypadku, gdy nie chcesz modyfikować pliku ~ / .bashrc, który na pewno zawiera coś takiego export PS2=.....+colors......:

Na linux konsoli, spróbuj albo TERM=linux-m1balbo TERM=linux-m2dostać monochromatyczny jako „szary / biały / czarny i dim” dla systemu Linux-M1b lub „zielony / biały / czarny i niebieski” (rocznik!) Dla Linux-M2 ...

Z Putty (jest port dla użytkowników komputerów Mac), użyj, TERM=putty-m1ba TERM=putty-m2zamiast tego ...

To zrobi dokładnie to, czego potrzebujesz, ale: Będziesz potrzebować do tego najnowszej bazy danych terminfo lub w razie potrzeby pobierz ją stamtąd: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Alex. PS: xterm-mono wydaje się już nie istnieć.

Alexandre MONTARON
źródło
-1

Najpierw sprawdź domyślny alias:

alias

alias ls-'ls --color=auto

Jeśli to nie działa i potrzebujesz szybkiego obejścia problemu. Spróbuj tego lsi awkpotokuj:

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

ustaw perms 744.
Jednym bezpiecznym miejscem do tego byłoby /usr/local/bin Upewnij się, że Twoja ŚCIEŻKA obejmuje /usr/local/bin.

Ponownie użyj dyskrecji.

Jedna rzecz… kolory mają oznaczać katalogi… wyłączając ls="ls --color=auto"nazwy tylko liści… ls -aFlub ls -Fdodają nazwy katalogów /. Sugerowałbym więc, abyście byli świadomi. Mógłbyś alias ls="ls -aF"lub alias ls="ls -F".

Scott
źródło
2
W jaki sposób ta odpowiedź stanowi odpowiedź na pierwotne pytanie?
jwbensley,
Witamy w Stack Overflow! Polecam wybrać się na wycieczkę .
Stephen Rauch,