Nonaktifkan warna pada terminal dan SSH


11

Mesin Linux lokal saya memiliki keluaran terminal berwarna seperti ini;

masukkan deskripsi gambar di sini

Ketika saya SSH ke kotak pfSense / BSD itu mengubah warna seperti ini;

masukkan deskripsi gambar di sini

Bahkan ketika saya SSH dari ke mesin yang tidak memiliki keluaran terminal lokal berwarna, dan SSH dari sana ke kotak pfSense / FreeBSD ini memungkinkan keluaran berwarna, dan mulai menghasilkan keluaran berwarna yang tidak diinginkan /

Apakah ada sesuatu yang bisa saya ubah secara lokal sehingga ketika saya SSH ke kotak pfSense dari mesin lokal saya atau melalui mesin perantara, klien saya akan mengabaikan pengaturan warna jarak jauh. Idealnya saya ingin tetap dalam hitam dan putih, latar belakang standar dua nada dan hanya warna teks?


Aplikasi terminal apa yang Anda gunakan?
gertvdijk

1
Di sini saya menjalankan Mint Linux 13, jadi Xfce Terminal Emulator 0.4.8.
jwbensley

Saya tahu ini bukan yang Anda minta, tetapi apakah Anda sudah mempertimbangkan mengubah pengaturan terminal Anda menjadi teks putih [atau abu-abu terang] dengan latar belakang hitam? Itu adalah skema warna dasar yang sebagian besar dirancang untuk bekerja dengannya. Atau Anda dapat mengubah pengaturan prompt Anda pada mesin jarak jauh (mungkin dalam .bash_profile) untuk memiliki warna yang lebih baik atau tanpa warna sama sekali.
Acak832

1
Biasanya saya melakukan sesuatu seperti TERM=xterm-mono ssh user@hostmendapatkan pengaturan itu di lingkungan yang jauh.
ott--

Jawaban:


7

Warna di terminal Anda muncul karena tty mengirimkan urutan kontrol yang dikodekan ANSI untuk memberitahu terminal Anda untuk mengubah warna. Beberapa, jika tidak sebagian besar aplikasi terminal dapat dikonfigurasi untuk mengabaikan ini dan hanya menampilkan semua teks dalam satu warna.

Di xterm, Anda dapat menggunakan -cmopsi. Untuk Konsole, seseorang dapat mengubah pemetaan semua warna menjadi sama. Aplikasi terminal XFCE Anda mungkin memiliki opsi serupa.


Jawaban ini mungkin membantu dalam beberapa kasus, tetapi itu sebenarnya bukan jawaban. Seperti disebutkan "Warna di terminal Anda muncul karena tty mengirimkan urutan kontrol yang dikodekan ANSI untuk memberitahu terminal Anda untuk mengubah warna". Karena SSH menyediakan TTY, SSH juga mungkin mengabaikan warna. Adakah yang tahu bagaimana hal ini dilakukan?
patrik

SSH tidak dirancang untuk mengganggu data selama tty, sungguh. SSH membuat saluran di mana Anda dapat menjalankannya, saya tidak berpikir itu harus terlibat dalam mengubah data melalui saluran itu. Namun, ia menyediakan konteks dan metadata, seperti variabel lingkungan mana yang diteruskan dari klien ke server selama waktu setup saluran tersebut.
gertvdijk

7

Mengubah TERMvariabel ke beberapa entri yang kompatibel tetapi tidak memiliki dukungan warna mungkin berfungsi. Suka:

TERM=xterm-old

Pada dasarnya, Anda memerlukan TERMtermcap sistem FreeBSD yang dikenal atau database terminfo yang TERM=the-term tput colorstidak mengembalikan angka positif, dan untuk GNU ls, yang dircolors -p | grep -x 'TERM the-term'tidak mengembalikan apa pun. Mungkin masih tidak berfungsi untuk aplikasi yang menghasilkan urutan pelepasan warna terlepas dari apakah terminal mengklaim mendukungnya atau tidak.

Atau, Anda dapat menggunakan GNU screenuntuk menonaktifkan warna, seperti (sintaks zsh):

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

Itu akan memungkinkan cetak tebal untuk setiap upaya untuk mengatur warna latar depan dan membalikkan untuk setiap upaya untuk mengatur warna latar belakang.

Saya pikir itu semua bermuara pada kenyataan bahwa FreeBSD mengasumsikan bahwa latar belakang terminal adalah hitam (atau setidaknya gelap). Di mana Anda menggunakan xtermalih-alih xfce-terminal, Anda bisa secara dinamis mengubah latar belakang dan warna foreground dan / atau warna individual untuk mengatur profil warna yang berbeda. Itu dilakukan melalui urutan melarikan diri, tetapi Anda juga dapat menggunakan xtermcontrolperintah yang membuatnya lebih mudah.


Mencoba itu - tidak bekerja untuk saya. export TERM=vt100sebelumnya ls --colormasih menunjukkan keluaran berwarna.
gertvdijk

@ gertvdijk Poin bagus. Tampaknya ada bug di GNU ls yang secara default kode keras vt100sebagai terminal dengan dukungan warna. Saya telah mengubah do xterm-oldyang tidak memiliki masalah itu tetapi mungkin tidak memiliki entri terminfo di FreeBSD.
Stéphane Chazelas

Yah, itu tidak mencegah program lain dari keluaran warna juga - yaitu byobu. Saya di Ubuntu 12,04 btw.
gertvdijk

1
@gertvdijk. Seperti yang saya katakan. Ini hanya bekerja untuk program berperilaku baik yang menggunakan $TERMdan termcap / terminfo database (melalui kutukan atau API terminal lainnya) alih-alih hardcoding urutan melarikan diri.
Stéphane Chazelas

apa yang bisa saya gunakan untuk menghapus semua urutan escape yang dapat mengubah status terminal setelah EOF?
Janus Troelsen

2

Ketik perintah berikut untuk menghapusnya:

$ ls --color=none

atau gunakan unaliasuntuk menghapusnya:

$ unalias ls

1
Bukankah itu hanya untuk lskomad?
jwbensley

ls adalah alias "ls --color = tty"
Len

Iya. Aku tahu. Tapi semua output terminal saya adalah output berwarna, bukan hanya lsperintah, jadi seperti komentar saya sebelumnya: bukankah itu hanya akan berhenti lsmenghasilkan output berwarna, semuanya masih akan berwarna?
jwbensley

ya hanya bagian ls
Len

1
Apakah Anda menggunakan xterm? xterm -cm
Len

1

Jika Anda tidak ingin memodifikasi ~ / .bashrc Anda yang saya yakin mengandung sesuatu seperti export PS2=.....+colors......:

Di Konsol linux, coba salah satu TERM=linux-m1batau TERM=linux-m2untuk mendapatkan monokrom sebagai "Abu-abu / Putih / Hitam dan Dim" untuk linux-m1b atau "Hijau / Putih / Hitam dan Biru" (antik!) Untuk linux-m2 ...

Dengan Putty (ada port untuk pengguna Mac), gunakan TERM=putty-m1bdan TERM=putty-m2alih - alih ...

Ini akan melakukan apa yang Anda butuhkan tetapi: Anda akan memerlukan database terminfo terbaru untuk itu atau mendapatkannya dari sana jika perlu: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Alex PS: xterm-mono sepertinya tidak ada lagi.


-1

Pertama, periksa alias default Anda:

alias

alias ls-'ls --color=auto

Jika tidak berhasil dan Anda perlu solusi cepat. Coba ini lsdan awkpipa:

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

atur perms 744.
Satu tempat aman untuk ini adalah /usr/local/bin Pastikan PATH Anda termasuk /usr/local/bin.

Sekali lagi gunakan kebijaksanaan.

Satu hal ... warnanya dimaksudkan untuk menandai direktori ... mematikan ls="ls --color=auto"hanya nama daun ... ls -aFatau ls -Fakan menambahkan nama direktori /. Jadi saya sarankan agar Anda waspada. Anda bisa alias ls="ls -aF"atau alias ls="ls -F".


2
Bagaimana jawaban ini memberikan jawaban untuk pertanyaan awal?
jwbensley

Selamat Datang di Stack Overflow! Saya sarankan Anda mengikuti tur .
Stephen Rauch
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.