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=\Ec
bằ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 $TERMINFO
hoặc ~/.terminfo
nế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 TERMCAP
biế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