Tôi có thể đặt màu thiết bị đầu cuối của máy cục bộ của mình để sử dụng màu của máy tôi ssh không?


7

Tôi có một bảng màu mà tôi thích khi tôi ở trong một thiết bị đầu cuối, nhưng tôi ssh vào máy tôi làm việc từ nhiều nguồn (cục bộ, PuTTY, netbook của tôi, v.v.) và tôi muốn duy trì cùng một bảng màu . Điều này có thể không?

Tôi đặc biệt muốn nó trong PuTTY; thật khó để thay đổi màu PuTTY.

Câu trả lời:


9

Màu sắc trong các thiết bị đầu cuối được xác định theo hai bước:

  • chương trình đang chạy trong thiết bị đầu cuối báo cho thiết bị đầu cuối sử dụng một số màu nhất định;
  • thiết bị đầu cuối chuyển từng số màu thành một giá trị màu.

Xterm có một chuỗi thoát để thay đổi giá trị màu liên quan đến số màu. Tôi không nhớ liệu PuTTY có hỗ trợ trình tự này hay không; Tôi biết Mintty .

set_color_value () {
  printf "\\e]4;$1;$2\\a"
}
set_color_value 4 '#6495ed'  # set color 4 (blue) to CornflowerBlue

Các cài đặt này sẽ không tồn tại trong thiết lập lại thiết bị đầu cuối. Bạn có thể khắc phục khó khăn này bằng cách nối thêm chuỗi thay đổi cấu hình con trỏ vào chuỗi đặt lại của thiết bị đầu cuối.

  • Trên hệ thống dựa trên terminfo bằng cách sử dụng ncurses, hãy lưu cài đặt terminfo của thiết bị đầu cuối của bạn vào một tệp với infocmp >>~/etc/terminfo.txt. Chỉnh sửa mô tả để thay đổi trình tự rs1(thiết lập lại cơ bản), ví dụ thay thế rs1=\Ecbằng rs1=\Ec\E]4;4;#6495ed\E\\. Với một số chương trình và cài đặt, bạn cũng có thể cần phải thay đổi rs2(thiết lập lại toàn bộ). Sau đó biên dịch mô tả terminfo với tic ~/etc/terminfo.txt(phần này ghi trong thư mục $TERMINFOhoặc ~/.terminfonếu không được đặt).
  • Trên hệ thống dựa trên termcap, lấy các cài đặt termcap từ cơ sở dữ liệu termcap của bạn (thông thường /etc/termcap). Thay đổi is(thiết lập lại cơ bản) và rs(full reset) trình tự để nối thêm các thiết lập của bạn, ví dụ :is=\Ec\Ec\E]4;4;#6495ed\E\\:. Đặt TERMCAPbiến môi trường thành giá trị được chỉnh sửa (bắt đầu và kết thúc bằng :).

Bây giờ bạn có thể đặt một cái gì đó như thế này trong ~/.profile:

if [ "$(ps -p $PPID -o comm=)" = sshd ] &&
   [ "$TERM" = "xterm" ]; then
  set_color_value … # set color scheme
  TERMCAP=…  # if necessary
fi

trừ khi tôi hiểu nhầm câu hỏi của anh ấy .... Tôi nghĩ rằng điều này có cách quá phức tạp.
xenoterracide

@xeno: Tôi nghĩ bạn đang hiểu nhầm câu hỏi. Tôi tin rằng Gilles đã làm đúng.
sepp2k

@ sepp2k có thể là
xenoterracide

Đây là một chút trên đầu của tôi; Tôi vẫn còn khá mới với Linux. Tôi có nên đặt mã cho set_color_value () vào .bashrc của mình không? Và làm thế nào để tôi biết nếu tôi đang sử dụng terminfo hoặc termcap?
Glacials

1
@ skoh-fley: Bắt đầu với việc đặt những set_color_valuethứ trong của bạn .bashrc. Nếu bạn không chắc chắn về .bashrcvs .profilevs .bash_profile, hãy tìm kiếm trên trang web này, Super UserHỏi ubfox nơi chủ đề đã được thảo luận dài. Bạn có thể thấy rằng bảng màu biến mất khi bạn khởi động một ứng dụng toàn màn hình; chỉ sau đó bạn nên lo lắng về bit về thiết lập lại thiết bị đầu cuối. Nếu bạn không biết, có lẽ bạn có terminfo.
Gilles 'SO- ngừng trở nên xấu xa'

0

Bạn đang sshvào một hộp phải không? Tại sao không chỉ đặt PS1biến trên hộp đó để sử dụng màu sắc bạn muốn? Nếu bạn giữ nó ở mức 16 màu, bạn không nên gặp vấn đề với bất kỳ màu hiện đại nào TERM, hầu hết nên hỗ trợ 256 màu, nhưng hầu hết không đặt TERM=xterm-256colorra khỏi hộp và một số kẻ ngu ( ho chủ nhân của tôi ho ) vệ sinh TERMthành dạng số alpha chỉ có. Thật không may, những gì để đặt trong PSlọ của bạn , phụ thuộc rất nhiều vào vỏ bạn đang sử dụng.


Xin lỗi, nhưng nếu tôi hiểu chính xác thì PS1 chỉ dành cho lời nhắc, phải không? Tôi muốn thay đổi mọi thứ - nền, văn bản, vim, v.v.
Glacials

@xenoterracide Nếu bạn đặt biến đó trên một hộp từ xa, sau đó ssh vào từ một hộp không có màu, bạn sẽ nhận được đầu ra màu?
Bắt đầu

Nếu trình giả lập thiết bị đầu cuối hỗ trợ thì có
xenoterracide 19/07/2015
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.