TTY với 256 màu?


25

Với URxvt và xterm, có thể sử dụng thiết bị đầu cuối ảo hỗ trợ 256 màu thay vì chỉ tám màu. Vì card đồ họa Intel GMA của tôi được hỗ trợ tốt bởi trình điều khiển bộ đệm khung KMS, tôi độc quyền làm việc trên TTY. Thật không may, nó chỉ hỗ trợ tám màu mặc dù với MPlayer (-vo fbdev / fbdev2) và các công cụ bộ đệm khung khác có thể được giải quyết nhiều hơn nữa. Có cách nào để bảo TTY sử dụng hơn tám màu không?

Câu trả lời:


10

Tôi đang xem lại câu trả lời của mình rằng tôi chắc chắn về mọi thứ.

Thật sai lầm khi kết luận rằng các chuỗi ANSI đang được xử lý thông qua BIOS hoặc bên ngoài hạt nhân; Thật vậy, chúng được xử lý trong kernel. Tôi đã tìm thấy những gì tôi đã bỏ lỡ trước đó nhờ vào hnaz_ trên kênh IRC của LinuxNew sở thích: drivers/char/vt.cthực hiện mô phỏng thiết bị đầu cuối Thiết bị kỹ thuật số VT102 được sử dụng bởi trình điều khiển thiết bị đầu cuối ảo.

Vì vậy, ... như một câu trả lời dứt khoát, đã xem xét mã nguồn xử lý các chuỗi thoát cho các thiết bị đầu cuối ảo: Nếu bạn muốn hỗ trợ 256 màu trên các thiết bị ảo, bạn sẽ phải xây dựng hạt nhân của riêng mình sau khi mở rộng mã phân tích các chuỗi thoát để xử lý các đặc điểm kỹ thuật màu rộng hơn.

Hàm được gọi là csi_m (). Các thay đổi sẽ phải tương tự như các thay đổi mở rộng trình giả lập thiết bị đầu cuối dựa trên X để xử lý các chuỗi thoát xác định mã màu phong phú hơn. Có thể sẽ có những thay đổi khác cần thiết, nhưng đây là nơi bạn sẽ bắt đầu.


1
Đúng rồi. Tôi đang nói về những "thiết bị đầu cuối ảo cấp thấp" này. Nhưng vì tôi đang sử dụng bộ đệm khung, nên nó là mô-đun hạt nhân fbcon đang được sử dụng. Xem Tài liệu / fb / fbcon.txt. Hoặc fbcon chỉ là một trình bao bọc xung quanh n_tty thêm một số tính năng bổ sung? Nhìn vào bản vá URxvt ( cvs.schmorp.de/rxvt-unicode/doc/ ,), có vẻ như khá dễ dàng để mở rộng hỗ trợ 256 màu. Tôi không hoàn toàn chắc chắn liệu n_tty có phải là mô-đun hạt nhân đúng hay không vì tôi không thấy bất kỳ định nghĩa màu nào ở đó.
hẹn giờ

Tôi nghĩ rằng bộ đệm khung là một thiết bị, và tty là một thiết bị khác - thiết bị đầu cuối ảo yêu cầu thiết bị tty và những thiết bị này sử dụng bộ đệm khung làm thiết bị hiển thị, nhưng bộ đệm khung không phải là thiết bị hiển thị duy nhất có thể.
quack quixote

+1 điều này nghe có vẻ nhiều hơn (vt102 không hỗ trợ các màu mở rộng và trình điều khiển đầu cuối được mã hóa cứng thành mô phỏng vt102). một chút tốt đẹp của nghiên cứu.
quack quixote

1
Tình hình tương tự vào năm 2017. Tôi tin kmsconlà một thiết bị đầu cuối người dùng cố gắng cải thiện thiết bị đầu cuối (bao gồm màu 24 bit). Mặc dù sự phát triển của nó đã bị đình trệ trong sự thay thế của systemd.
jiggunjer

kmscon đã được rẽ nhánh và kể từ bài đăng này đang được tích cực phát triển: github.com/Aetf/kmscon
user3751385

7

RXVT / xterm / URXVT / etc 256 màu của bạn được xác định bởi terminfo và cài đặt của TERMbiến. Trong hầu hết các bản phân phối Linux, các thiết bị đầu cuối ảo của bạn được xác định /etc/inittabvà sử dụng loại thiết bị đầu cuối mặc định xác định số lượng thiết bị đầu cuối có thể sử dụng.

Có cách nào để bảo TTY sử dụng hơn tám màu không?

Vâng.

  • Đảm bảo bộ đệm khung của bạn đang sử dụng độ phân giải / độ sâu bit chính xác. Thử thêm vga=773vào các tùy chọn kernel, ví dụ, để có được 1024x768 và 256 màu (độ sâu màu 8 bit).

  • Đặt một HẠN khác nhau (ví dụ export TERM=foo:). Bạn sẽ cần phải thử nghiệm để tìm đúng. Nếu bạn tìm thấy một cái hoạt động, bạn có thể sửa đổi /etc/inittabđể các thiết bị đầu cuối ảo của bạn chạy nó theo mặc định (xem phần tiếp theo).

  • Bài viết này thảo luận về các lựa chọn khác có thể làm việc cho bạn. Nó khuyến nghị Qingy (Qingy không phải là GettY) như một sự thay thế nhỏ và có thể cung cấp cho bạn những gì bạn đang tìm kiếm nếu chuyển đổi các biến TERM không phải là một lựa chọn.

  • Nói về việc thay thế getty, tôi thề tôi đã thấy hướng dẫn thay thế getty bằng GNU screenmột nơi nào đó trên đường đi. Hiện tại tôi không tìm thấy liên kết, nhưng vì có HẠN 256 màu screen, bạn có thể xem xét nó.


/etc/inittab sử dụng các dòng như thế này để thiết lập các thiết bị đầu cuối ảo:

# Format:
#  <id>:<runlevels>:<action>:<process>
#
1:2345:respawn:/sbin/getty 38400 tty1
2:2345:respawn:/sbin/getty 38400 tty2
3:2345:respawn:/sbin/getty 38400 tty3

Đây là trang hướng dẫn trên /sbin/getty(từ hệ thống Debian của tôi, vì vậy về mặt kỹ thuật là agettychương trình):

SYNOPSIS
       agetty [-8ihLmnw] [-f issue_file] [-l login_program] [-I init]
       [-t timeout] [-H login_host] baud_rate,...  port [term]

Lưu ý baud_rate,... port [term]có ở cuối. Nó khớp với lệnh trong /etc/inittabdòng ( /sbin/getty 38400 ttyN) - lưu ý không có [term]đối số, vì vậy chúng tôi nhận được mặc định (chạy echo $TERMngay sau khi bạn đăng nhập trên bảng điều khiển ảo để xem hệ thống của bạn sử dụng gì). Từ trang hướng dẫn lại:

ARGUMENTS
       term   The value to be used for the TERM environment variable.  This  over‐
              rides  whatever  init(8) may have set, and is inherited by login and
              the shell.

Nếu bạn tìm thấy một HẠN hoạt động, hãy sửa đổi các dòng nhỏ trong inittab của bạn và thêm TATE thích hợp ở cuối:

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors
2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors

1
~ bỏ qua tất cả thông tin tuyệt vời này nhưng tôi không chắc nó sẽ dẫn đến thành công. Bạn nói "Có" nhưng sau đó nói "thử nghiệm" và "nếu bạn tìm thấy". Tôi đã đi một con đường trực tiếp hơn; Tôi đã tìm kiếm mã hạt nhân. Tôi đã không thể tìm thấy bất kỳ mã nào xử lý các chuỗi thoát cho màu - MỌI NƠI trong kernel. Không phải trong mã fb, không phải trong mã tty ... không đâu cả. Vì vậy, kết luận của tôi rằng nó được xử lý trong BIOS. Điều này được hỗ trợ bởi những ký ức của tôi về việc sử dụng các chuỗi thoát ANSI chính xác tương tự trong DOS. Tôi tin rằng các chuỗi thoát ANSI khác nhau đang được BIOS xử lý trong cả hai trường hợp.
pbr

@pbr: tôi cũng đã kiểm tra mã kernel. Mã TTY không đặt bất kỳ giới hạn nào về số lượng màu. BIOS không tham gia vào nó - bạn đang xử lý bộ đệm khung, có thể mất nhiều bit khác nhau (chi tiết cụ thể phụ thuộc vào phần cứng, tho nếu bạn đã tắt bộ đệm khung ...). giới hạn 16 màu có thể có trong GeTTY, do đó, khuyến nghị nên kiểm tra Qingy hoặc có thể trong nội dung terminfo, do đó khuyến nghị nên thử các định nghĩa TATE thay thế khác nhau. Tôi không thể khuyên bạn điều đó, nhưng việc sử dụng BIOS của bạn không đúng và không hữu ích .
quack quixote

1
~ quack - bạn nói đúng là nó không có trong BIOS (xem câu trả lời sửa đổi của tôi bên dưới) nhưng vẫn đề nghị điều tra Qingy et al. Mã thiết bị đầu cuối ảo được mã hóa cứng với mô phỏng vt102.
pbr

6

Hãy xem fbterm - đó là bộ đệm khung thay thế có thể chạy ở chế độ 256 màu (bạn chỉ cần chạy nó dưới quyền root từ TTY)

Tôi đã thành công với nó - một số ứng dụng hoạt động tốt và báo cáo 256 màu; tuy nhiên Emacs (lý do chính tôi muốn 256 màu trên TTY) dường như không hoạt động; có một chút thảo luận về nó ở đây, nhưng nó không thực sự được giải quyết:

http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00989.html

Tuy nhiên, mplayer nên làm việc!


Có vẻ khủng khiếp khi được so sánh với bất kỳ khách hàng thiết bị đầu cuối X nào.
phil pirozhkov

1
Nó đang chạy trong bộ đệm khung vì vậy bạn chỉ có 256 màu có sẵn cho bộ đệm khung.
Seb

Tự hỏi nếu bạn có bất kỳ cái nhìn sâu sắc về vấn đề fbterm này? superuser.com/questions/892028/...
dtmland

Chạy emacsbên trong tmuxcó thể giúp vì nó sẽ dịch các chuỗi thoát cho thiết bị đầu cuối xung quanh.
Tom Hale

1

kmscon

kmscon là cách giúp bạn có 256 màu và video mà không cần cài đặt hệ thống cửa sổ (X, Wayland).

Nó đã bị bỏ rơi nhưng hiện đang được duy trì thông qua một ngã ba .

Tài liệu về cài đặt rất mỏng, nhưng trang README ở đây sẽ giúp bạn hiểu được.


Tôi đã cài đặt cái này và sử dụng nó cho các ứng dụng console yêu cầu 256 màu (vim do cấu hình của tôi).

Đọc hướng dẫn cài đặt cẩn thận.


-1

Trình tự thoát ANSI để thiết lập màu nền trước và màu nền của văn bản là những gì giới hạn mọi thứ ở đây.

Từ bộ nhớ, các chuỗi này trông giống như thoát [01; 34m Có các mã trong 30 giây cho tiền cảnh và tôi nghĩ 40 là cho nền.

Vì vậy, tôi không nghĩ có bất kỳ cách nào để đạt được những gì bạn đang tìm kiếm.


2
Trên thực tế, nó là có thể. Nếu không, tôi sẽ không thể sử dụng mutt với 256 màu trong URxvt. :) Xem thêm push.cx/2008/256-color-xterms-in-ubfox Nhưng làm cách nào để tôi có được hiệu ứng tương tự trong TTY?
hẹn giờ
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.