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?


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.


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.


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

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ć.


-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".


2
W jaki sposób ta odpowiedź stanowi odpowiedź na pierwotne pytanie?
— jwbensley,

Witamy w Stack Overflow! Polecam wybrać się na wycieczkę .
— Stephen Rauch,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.