TTY z 256 kolorami?

25

Dzięki URxvt i xterm możliwe jest użycie wirtualnego terminala obsługującego 256 kolorów zamiast tylko ośmiu. Ponieważ moja karta graficzna Intel GMA jest dobrze obsługiwana przez sterownik bufora ramki KMS, pracuję wyłącznie na TTY. Niestety obsługuje tylko osiem kolorów, chociaż w MPlayerze (-vo fbdev / fbdev2) i innych narzędziach buforowania ramki można rozwiązać znacznie więcej. Czy istnieje sposób, aby powiedzieć TTY, aby używał więcej niż ośmiu kolorów?

timn
źródło

Odpowiedzi:

10

Ponownie sprawdzam swoją odpowiedź, skoro jestem pewien.

Błędem było stwierdzenie, że sekwencje ANSI były obsługiwane przez BIOS lub w inny sposób poza jądrem; w rzeczywistości są obsługiwane w jądrze. Znalazłem to, co wcześniej przegapiłem dzięki hnaz_ na kanale IRC LinuxNewbies: drivers/char/vt.cimplementuje emulację terminala VT102 Digital Equipment, który jest używany przez sterownik wirtualnego terminala.

Więc ... jako ostateczna odpowiedź, po zapoznaniu się z kodem źródłowym, który obsługuje sekwencje specjalne dla terminali wirtualnych: Jeśli chcesz obsługiwać 256 kolorów na terminalach wirtualnych, musisz zbudować własne jądro po rozszerzeniu kodu, który analizuje sekwencje specjalne do obsługi szerszej specyfikacji kolorów.

Funkcja nazywa się csi_m (). Zmiany będą musiały być podobne do tych, które rozszerzają emulatory terminali oparte na X, aby obsługiwały sekwencje specjalne określające bogatsze kody kolorów. Prawdopodobnie będą też potrzebne inne zmiany, ale od tego chciałbyś zacząć.

pbr
źródło
1
Zgadza się. Mówię o tych „wirtualnych terminalach niskiego poziomu”. Ponieważ jednak używam bufora ramki, myślę, że jest to moduł jądra fbcon. Zobacz dokumentację / fb / fbcon.txt. A może FBCON to tylko opakowanie wokół n_tty dodające dodatkowe funkcje? Patrząc na łatkę URxvt ( cvs.schmorp.de/rxvt-unicode/doc/… ), wydaje się, że dość łatwo jest rozszerzyć obsługę 256 kolorów. Nie jestem pewien, czy n_tty jest właściwym modułem jądra, ponieważ nie widzę tam żadnych definicji kolorów.
timn
myślę, że bufor ramki jest jednym urządzeniem, a tty drugim - terminal wirtualny wymaga urządzenia tty, a te używają bufora ramki jako urządzenia wyświetlającego, ale bufor ramki nie jest jedynym możliwym urządzeniem wyświetlającym.
quack quixote
+1 brzmi bardziej prawdopodobne (vt102 nie obsługuje rozszerzonych kolorów, a sterownik terminalu jest zakodowany na stałe w emulacji vt102). niezła część badań.
szarlatan
1
Taka sama sytuacja w 2017 roku. Uważam, że kmsconjest to terminal użytkownika, który próbuje ulepszyć terminal (w tym 24-bitowy kolor). Chociaż jego rozwój ulegał zastojowi na korzyść systemowej alternatywy.
jiggunjer
kmscon został rozwidlony i od tego postu jest aktywnie rozwijany: github.com/Aetf/kmscon
user3751385
7

Twój 256-kolorowy RXVT / xterm / URXVT / etc jest zdefiniowany przez terminfo i ustawienie TERMzmiennej. W większości dystrybucji Linuksa twoje wirtualne terminale są zdefiniowane /etc/inittabi używają domyślnego typu terminala, który określa, ile kolorów może używać terminal.

Czy istnieje sposób, aby powiedzieć TTY, aby używał więcej niż ośmiu kolorów?

Tak.

  • Upewnij się, że bufor ramki używa prawidłowej rozdzielczości / głębi bitów. Spróbuj dodać vga=773do opcji jądra, na przykład, aby uzyskać 1024 x 768 i 256 kolorów (8-bitowa głębia kolorów).

  • Ustaw inny TERM (np export TERM=foo.). Musisz eksperymentować, aby znaleźć właściwy. Jeśli znajdziesz taki, który działa, możesz go zmodyfikować, /etc/inittabtak aby wirtualne terminale uruchamiały go domyślnie (patrz następny rozdział).

  • W tym artykule omówiono inne opcje, które mogą Ci pomóc. Zaleca Qingy (Qingy nie jest GettY) jako getty zamiennik i może dać ci to, czego szukasz, jeśli zmiana zmiennych TERM nie jest opcją.

  • Mówiąc o zamianach getty, przysięgam, że widziałem instrukcje dotyczące zamiany getty GNU screengdzieś po drodze. W tej chwili nie znajduję linku, ale ponieważ istnieje 256-kolorowy TERM screen, możesz go sprawdzić.


/etc/inittab używa takich linii do konfigurowania wirtualnych terminali:

# 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

Oto manpage na /sbin/getty(z mojego systemu Debian, więc technicznie jest to agettyprogram):

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

Zwróć uwagę na baud_rate,... port [term]tam na końcu. Jest to zgodne z poleceniem w /etc/inittablinii ( /sbin/getty 38400 ttyN) - zwróć uwagę, że nie ma [term]argumentu, więc otrzymujemy wartość domyślną (uruchom echo $TERMzaraz po zalogowaniu się do wirtualnej konsoli, aby zobaczyć, czego używa twój system). Z poziomu strony ponownie:

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.

Jeśli znajdziesz TERM, który działa, zmodyfikuj linie getty w inittab i dodaj odpowiedni TERM na końcu:

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors
2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors
quack quixote
źródło
1
~ poznaję wszystkie niesamowite informacje, ale nie jestem pewien, czy doprowadzi to do sukcesu. Mówisz „Tak”, a następnie „eksperymentuj” i „jeśli znajdziesz”. Wybrałem bardziej bezpośrednią trasę; Przeszukałem kod jądra. Nie byłem w stanie znaleźć żadnego kodu, który obsługiwałby sekwencje specjalne dla koloru - NIGDY w jądrze. Nie w kodzie fb, nie w kodzie tty ... nigdzie. Tak więc mój wniosek, że jest obsługiwany w systemie BIOS. Potwierdzają to moje wspomnienia użycia dokładnie tych samych sekwencji ucieczki ANSI w systemie DOS. Wierzę, że w obu przypadkach BIOS obsługuje różne sekwencje specjalne ANSI.
pbr
@pbr: sprawdziłem również kod jądra. Kod TTY nie nakłada żadnych ograniczeń na liczbę kolorów. BIOS nie wchodzi w to - masz do czynienia z framebufferem, który może zająć różne bitdepthy (specyfika zależy od sprzętu, np. Jeśli wyłączyłeś bufor ramki ...). ograniczenie 16 kolorów może być w GeTTY, więc zalecenie, aby sprawdzić Qingy, lub może być w terminfo, a zatem zalecenie wypróbowania różnych alternatywnych definicji TERM. nie mogę doradzić poza tym, ale twoje rantowanie BIOS -u jest poza bazą i nie jest pomocne .
quack quixote
1
~ kwak - masz rację, że nie ma go w BIOS-ie (zobacz moją poprawioną odpowiedź poniżej), ale nadal nie polecasz zbadania Qingy i in. Wirtualny kod terminala jest zakodowany na stałe za pomocą emulacji vt102.
pbr
6

Spójrz na fbterm - to zastępczy bufor ramki, który może działać w trybie 256 kolorów (po prostu uruchamiasz go jako root z TTY)

Mam z tym mieszany sukces - niektóre aplikacje działają dobrze i zgłaszają 256 kolorów; jednak Emacs (główny powód, dla którego chciałem 256 kolorów na TTY) wydaje się nie działać; tutaj jest trochę dyskusji na ten temat, ale tak naprawdę nie można go rozwiązać:

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

Jednak mplayer powinien działać!

Seb
źródło
Wygląda okropnie w porównaniu do któregokolwiek z klientów terminalu X.
phil pirozhkov
1
Działa w buforze ramki, więc i tak masz tylko 256 kolorów dostępnych dla bufora ramki.
Seb
Zastanawiasz się, czy masz jakiś wgląd w ten problem? superuser.com/questions/892028/...
dtmland
Uruchomienie w emacsśrodku tmuxmoże pomóc, ponieważ powinno tłumaczyć sekwencje specjalne dla otaczającego terminalu.
Tom Hale,
1

kmscon

Kmscon to sposób na uzyskanie 256 kolorów i wideo bez zainstalowanego systemu Windows (X, Wayland).

Został porzucony, ale obecnie jest utrzymywany przez widelec .

Dokumentacja dotycząca instalacji jest niewielka, ale strona README tutaj powinna Cię załatwić.


Zainstalowałem to i używam go do aplikacji konsolowych, które wymagają 256 kolorów (vim z powodu mojej konfiguracji).

Przeczytaj uważnie instrukcję instalacji.

użytkownik3751385
źródło
-1

Ograniczenia mają tu sekwencje specjalne ANSI do ustawiania kolorów pierwszego planu i tła tekstu.

Z pamięci te sekwencje wyglądają jak ucieczka [01; 34m. W latach 30. są kody dla pierwszego planu, a dla tła 40.

Więc nie sądzę, że jest jakiś sposób na osiągnięcie tego, czego szukasz.

pbr
źródło
2
W rzeczywistości jest to możliwe. W przeciwnym razie nie byłbym w stanie użyć mutta z 256 kolorami w URxvt. :) Zobacz także push.cx/2008/256-color-xterms-in-ubuntu Ale jak uzyskać taki sam efekt w TTY?
timn