Vô hiệu hóa màu sắc trên thiết bị đầu cuối và SSH


11

Máy Linux cục bộ của tôi có đầu ra màu như thế này;

nhập mô tả hình ảnh ở đây

Khi tôi SSH tới hộp pfSense / BSD, nó sẽ thay đổi màu như thế này;

nhập mô tả hình ảnh ở đây

Ngay cả khi tôi SSH từ một máy không có đầu ra cục bộ có màu và SSH từ đó đến hộp pfSense / FreeBSD này, nó cho phép đầu ra có màu và bắt đầu tạo đầu ra có màu không mong muốn /

Có điều gì tôi có thể thay đổi cục bộ để khi tôi SSH vào hộp pfSense từ máy cục bộ của mình hoặc qua máy trung gian, khách hàng của tôi sẽ bỏ qua các cài đặt màu từ xa. Lý tưởng nhất là tôi muốn ở trong màu đen và trắng, chỉ có hai tông màu nền và màu văn bản?


Bạn đang sử dụng ứng dụng thiết bị đầu cuối nào?
gertvdijk

1
Ở đây tôi đang chạy Mint Linux 13, vì vậy đó là Trình giả lập Xfce Terminal 0.4.8.
jwbensley

Tôi biết đây không phải là những gì bạn đang yêu cầu, nhưng bạn đã xem xét việc thay đổi cài đặt thiết bị đầu cuối của mình thành văn bản [hoặc xám nhạt] trên nền đen chưa? Đó là bảng màu cơ bản mà hầu hết mọi thứ được thiết kế để làm việc. Hoặc bạn có thể thay đổi cài đặt nhắc nhở của mình trên máy từ xa (có thể là .bash_profile) để có màu tốt hơn hoặc không có màu nào cả.
Random832

1
Thông thường tôi làm một cái gì đó TERM=xterm-mono ssh user@hostđể có được cài đặt đó trong môi trường từ xa.
ott--

Câu trả lời:


7

Màu sắc trong thiết bị đầu cuối của bạn xuất hiện vì tty gửi các chuỗi điều khiển được mã hóa ANSI để báo cho thiết bị đầu cuối của bạn thay đổi màu sắc. Một số, nếu không phải hầu hết các ứng dụng đầu cuối có thể được cấu hình để bỏ qua điều này và chỉ hiển thị tất cả văn bản trong một màu.

Trong xterm, bạn có thể sử dụng -cmtùy chọn. Đối với Konsole, người ta có thể thay đổi ánh xạ của tất cả các màu thành giống nhau. Ứng dụng đầu cuối XFCE của bạn có thể có các tùy chọn tương tự.


Câu trả lời này có thể giúp ích trong một số trường hợp, nhưng nó không thực sự là một câu trả lời. Như đã đề cập "Màu sắc trong thiết bị đầu cuối của bạn xuất hiện do tty gửi các chuỗi điều khiển được mã hóa ANSI để báo cho thiết bị đầu cuối của bạn thay đổi màu sắc". Vì SSH có thể cung cấp TTY, nên SSH cũng có thể bỏ qua màu sắc. Bất cứ ý tưởng làm thế nào điều này được thực hiện?
patrik

SSH thực sự không được thiết kế để can thiệp vào dữ liệu trên tty. SSH thiết lập một kênh mà bạn có thể chạy nó, tôi không nghĩ nó nên liên quan đến việc thay đổi dữ liệu trên kênh đó. Tuy nhiên, nó cung cấp ngữ cảnh và siêu dữ liệu, chẳng hạn như các biến môi trường nào được truyền từ máy khách đến máy chủ trong thời gian thiết lập kênh như vậy.
gertvdijk

7

Thay đổi TERMbiến thành một số mục tương thích nhưng không có hỗ trợ màu có thể hoạt động. Giống:

TERM=xterm-old

Về cơ bản, bạn cần một TERMcơ sở dữ liệu termcap hoặc terminfo hệ thống FreeBSD được biết đến mà TERM=the-term tput colorskhông trả về số dương và đối với GNU ls, một trong đó dircolors -p | grep -x 'TERM the-term'không trả về gì. Nó vẫn có thể không hoạt động đối với các ứng dụng xuất ra các chuỗi thoát màu bất kể thiết bị đầu cuối có yêu cầu hỗ trợ hay không.

Ngoài ra, bạn có thể sử dụng GNU screenđể tắt màu, như (cú pháp zsh):

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

Điều đó sẽ cho phép in đậm cho mọi nỗ lực để đặt màu nền trước và đảo ngược cho mọi nỗ lực để đặt nền sau.

Tôi nghĩ tất cả đều hiểu rõ rằng FreeBSD cho rằng nền thiết bị đầu cuối có màu đen (hoặc ít nhất là tối). Khi bạn sử dụng xtermthay vì xfce-terminal, bạn có thể tự động thay đổi màu nền và màu nền trước và / hoặc các màu riêng lẻ để đặt các cấu hình màu khác nhau. Điều đó được thực hiện thông qua các chuỗi thoát, nhưng bạn cũng có thể sử dụng xtermcontrollệnh làm cho nó dễ dàng hơn.


Đã thử điều đó - không làm việc cho tôi. export TERM=vt100trước đó ls --colorvẫn hiển thị đầu ra màu.
gertvdijk

@gertvdijk Điểm tốt. Dường như có một lỗi trong GNU ls mà theo mặc định mã cứng vt100là thiết bị đầu cuối có hỗ trợ màu. Tôi đã thay đổi điều xterm-oldđó không có vấn đề đó nhưng có thể không có mục terminfo trên FreeBSD.
Stéphane Chazelas

Chà, điều đó cũng không ngăn các chương trình khác xuất ra màu sắc - tức là byobu. Tôi đang dùng Ubuntu 12.04 btw.
gertvdijk

1
@gertvdijk. Như tôi đã nói. Nó chỉ hoạt động cho các chương trình hoạt động tốt sử dụng $TERMvà cơ sở dữ liệu termcap / terminfo (thông qua các lời nguyền hoặc các API thiết bị đầu cuối khác) thay vì mã hóa các chuỗi thoát.
Stéphane Chazelas

Tôi có thể sử dụng gì để loại bỏ tất cả các chuỗi thoát có thể thay đổi trạng thái đầu cuối sau EOF?
Janus Troelsen

2

Nhập lệnh sau để loại bỏ nó:

$ ls --color=none

hoặc sử dụng unaliasđể loại bỏ nó:

$ unalias ls

1
Không phải đó chỉ là cho lscommad sao?
jwbensley

ls được đặt bí danh là "ls --color = tty"
Len

Đúng. Tôi biết. Nhưng tất cả đầu ra đầu cuối của tôi là đầu ra màu, không chỉ là lslệnh, vì vậy theo nhận xét trước đây của tôi: không phải là sẽ ngừng lssản xuất đầu ra màu, mọi thứ khác vẫn sẽ được tô màu chứ?
jwbensley

có chỉ phần ls
Len

1
bạn đang sử dụng xterm? xterm -cm
Len

1

Trong trường hợp bạn không muốn sửa đổi ~ / .bashrc mà tôi chắc chắn có chứa một cái gì đó như export PS2=.....+colors......:

Trên Bảng điều khiển linux, hãy thử TERM=linux-m1bhoặc TERM=linux-m2để có được màu đơn sắc là "Xám / Trắng / Đen và Dim" cho linux-m1b hoặc "Green / White / Black và Blue" (cổ điển!) Cho linux-m2 ...

Với Putty (có một cổng cho người dùng Mac), hãy sử dụng TERM=putty-m1bTERM=putty-m2thay vào đó ...

Điều này sẽ làm chính xác những gì bạn cần nhưng: Bạn sẽ cần một cơ sở dữ liệu terminfo gần đây cho điều đó hoặc lấy nó từ đó nếu cần thiết: wget http://canal.chez.com/linux.ti ; tic -x linux.ti

Alex. PS: xterm-mono dường như không tồn tại nữa.


-1

Đầu tiên, hãy kiểm tra bí danh mặc định của bạn:

alias

alias ls-'ls --color=auto

Nếu không hoạt động và bạn cần một cách giải quyết nhanh chóng. Hãy thử điều này lsawkđường ống:

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

đặt các perm 744.
Một nơi an toàn cho việc này sẽ là /usr/local/bin Đảm bảo PATH của bạn bao gồm /usr/local/bin.

Một lần nữa sử dụng tùy ý.

Một điều mà màu sắc có nghĩa là gắn cờ các thư mục, việc tắt các ls="ls --color=auto"lá chỉ có tên là tên lửa ls -aFhoặc ls -Fsẽ nối các tên thư mục với /. Vì vậy, tôi sẽ đề nghị bạn nhận thức được. Bạn có thể alias ls="ls -aF"hoặc alias ls="ls -F".


2
Làm thế nào để câu trả lời này cung cấp một câu trả lời cho câu hỏi ban đầu?
jwbensley

Chào mừng bạn đến với Stack Overflow! Tôi khuyên bạn nên đi tour .
Stephen Rauch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.