TTY mit 256 Farben?

18169
timn

Mit URxvt und xterm ist es möglich, ein virtuelles Terminal zu verwenden, das 256 statt nur acht Farben unterstützt. Da meine Intel GMA-Grafikkarte vom KMS-Framebuffer-Treiber gut unterstützt wird, arbeite ich ausschließlich am TTY. Leider unterstützt es nur acht Farben, obwohl mit MPlayer (-vo fbdev / fbdev2) und anderen Framebuffer-Tools weit mehr angegangen werden können. Gibt es eine Möglichkeit, dem TTY mitzuteilen, dass er mehr als acht Farben verwenden soll?

20

5 Antworten auf die Frage

9
pbr

Ich überprüfe jetzt meine Antwort, da bin ich mir sicher.

Es war fälschlicherweise der Schluss, dass die ANSI-Sequenzen über das BIOS oder anderweitig außerhalb des Kernels gehandhabt wurden. In der Tat werden sie im Kernel gehandhabt. Ich habe dank hnaz_ auf dem IRC-Kanal von LinuxNewbies gefunden, was ich zuvor vermisst hatte: drivers/char/vt.cImplementiert eine Emulation eines Digital Equipment VT102-Terminals, das vom virtuellen Terminaltreiber verwendet wird.

Als endgültige Antwort also, nachdem Sie den Quellcode überprüft haben, der die Escape-Sequenzen für virtuelle Terminals verarbeitet: Wenn Sie die Unterstützung für 256 Farben auf virtuellen Terminals wünschen, müssen Sie nach der Erweiterung des Codes, der die Escape-Sequenzen analysiert, einen eigenen Kernel erstellen um die breitere Farbspezifikation zu handhaben.

Die Funktion heißt csi_m (). Die Änderungen müssen denen ähnlich sein, die die X-basierten Terminalemulatoren erweitern, um Escape-Sequenzen zu verarbeiten, die die reicheren Farbcodes angeben. Es werden wahrscheinlich auch andere Änderungen erforderlich sein, aber hier würden Sie beginnen.

Stimmt. Ich spreche von diesen "Low-Level-virtuellen Terminals". Aber da ich den Framebuffer verwende, denke ich, ist das fbcon-Kernel-Modul im Einsatz. Siehe Dokumentation / fb / fbcon.txt. Oder ist fbcon nur ein Wrapper um n_tty, der einige zusätzliche Funktionen hinzufügt? Betrachtet man den URxvt-Patch (http://cvs.schmorp.de/rxvt-unicode/doc/urxvt-8.2-256color.patch?view=markup), scheint es ziemlich einfach zu sein, die 256-Farben-Unterstützung zu erweitern. Ich bin nicht ganz sicher, ob n_tty das richtige Kernel-Modul ist, da ich dort keine Farbdefinitionen sehe. timn vor 15 Jahren 0
Ich denke, der Framebuffer ist ein Gerät und das tty ist ein anderes - das virtuelle Terminal benötigt das tty-Gerät, und diese verwenden den Framebuffer als Anzeigegerät, aber der Framebuffer ist nicht das einzige mögliche Anzeigegerät. quack quixote vor 15 Jahren 0
+1 Dies klingt wahrscheinlicher (vt102 unterstützt nicht die erweiterten Farben und der Terminaltreiber ist für die vt102-Emulation hartcodiert). schönes Stück Forschung. quack quixote vor 14 Jahren 0
Dieselbe Situation im Jahr 2017. Ich glaube, dass "kmscon" ein Benutzerland-Terminal ist, das versucht, das Terminal zu verbessern (einschließlich 24-Bit-Farbe). Allerdings stagnierte die Entwicklung zugunsten einer systemdeten Alternative. jiggunjer vor 7 Jahren 1
kmscon wurde gegabelt und wird seit diesem Zeitpunkt aktiv entwickelt: https://github.com/Aetf/kmscon user3751385 vor 6 Jahren 0
7
quack quixote

Ihre 256-Farben-RXVT / xterm / URXVT / etc werden durch terminfo und die Einstellung der TERMVariablen definiert. In den meisten Linux-Distributionen sind Ihre virtuellen Terminals definiert /etc/inittabund verwenden einen Standard-Terminaltyp, der definiert, wie viele Farben das Terminal verwenden kann.

Gibt es eine Möglichkeit, dem TTY mitzuteilen, dass er mehr als acht Farben verwenden soll?

Ja.

  • Stellen Sie sicher, dass Ihr Framebuffer die richtige Auflösung / Bittiefe verwendet. vga=773Fügen Sie zum Kernel Optionen hinzu, um beispielsweise 1024 x 768 und 256 Farben (8 Bit Farbtiefe) zu erhalten.

  • Stellen Sie einen anderen TERM ein (z export TERM=foo. B. ). Sie müssen experimentieren, um den richtigen zu finden. Wenn Sie eines gefunden haben, das funktioniert, können Sie /etc/inittabIhr virtuelles Terminal standardmäßig so einstellen, dass es funktioniert (siehe nächster Abschnitt).

  • Dieser Artikel beschreibt andere Optionen, die für Sie möglicherweise funktionieren. Es empfiehlt Qingy (Qingy ist nicht GettY) als getty-Ersatz. Möglicherweise erhalten Sie das, wonach Sie suchen, wenn das Umschalten von TERM-Variablen nicht möglich ist.

  • Wo wir gerade von getty-Ersetzungen sprechen, ich schwöre, ich habe Anweisungen für den Ersatz von getty durch GNU screenirgendwo auf dem Weg gesehen. Ich finde den Link momentan nicht, aber da es ein TERM mit 256 Farben gibt screen, können Sie sich das genauer ansehen.


/etc/inittab verwendet solche Zeilen, um virtuelle Terminals einzurichten:

# 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 

Hier ist die Manpage /sbin/getty(aus meinem Debian-System, also technisch gesehen das agettyProgramm):

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

Beachten Sie das baud_rate,... port [term]dort am Ende. Das stimmt mit dem Befehl in der /etc/inittabZeile ( /sbin/getty 38400 ttyN) überein. Beachten Sie, dass es keine [term]Argumente gibt. Wir erhalten einen Standardwert (werden ausgeführt, echo $TERMsobald Sie sich an einer virtuellen Konsole angemeldet haben, um zu sehen, was Ihr System verwendet). Wieder aus der Manpage:

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. 

Wenn Sie ein TERM finden, das funktioniert, ändern Sie die getty-Zeilen in Ihrer inittab und fügen Sie am Ende den richtigen TERM hinzu:

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors 2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors 
~ quack diese großartige Information, aber ich bin nicht sicher, ob sie zum Erfolg führen wird. Sie sagen "Ja", aber dann "Experiment" und "Wenn Sie einen finden". Ich nahm einen direkteren Weg; Ich habe den Kernel-Code durchsucht. Ich konnte keinen Code finden, der Escape-Sequenzen für Farben verarbeitet - ÜBERALL im Kernel. Nicht im fb-Code, nicht im tty-Code ... nirgendwo. Daher meine Schlussfolgerung, dass es im BIOS gehandhabt wird. Dies wird durch meine Erinnerungen an die Verwendung der gleichen ANSI-Escape-Sequenzen unter DOS unterstützt. Ich glaube, dass die verschiedenen ANSI-Escape-Sequenzen in beiden Fällen vom BIOS verarbeitet werden. pbr vor 15 Jahren 1
@pbr: Ich habe auch den Kernel-Code überprüft. Mit dem TTY-Code werden der Anzahl der Farben keine Grenzen gesetzt. __BIOS geht nicht darauf ein__ - Sie haben es mit dem Framebuffer zu tun, der __kann verschiedene Bitdepths aufnehmen kann (Besonderheiten sind hardwareabhängig, dh, wenn Sie den Framebuffer deaktiviert haben ...). Die 16-Farben-Einschränkung kann in GeTTY sein, also die Empfehlung, Qingy auszuprobieren, oder in den terminfo-Zeugs, also die Empfehlung, verschiedene alternative TERM-Definitionen auszuprobieren. Ich kann nicht weiter beraten, aber Ihr BIOS-Ranting ist __off-base und nicht hilfreich__. quack quixote vor 15 Jahren 0
~ quack - du hast recht, dass es nicht im BIOS ist (siehe meine überarbeitete Antwort unten), aber immer noch nicht empfohlen, Qingy et al. Der virtuelle Terminalcode ist mit der vt102-Emulation hartcodiert. pbr vor 14 Jahren 1
6
Seb

Werfen Sie einen Blick auf fbterm - es handelt sich um einen Ersatz-Framebuffer, der im 256-Farben-Modus ausgeführt werden kann (Sie führen ihn einfach als root von einem TTY aus).

Ich hatte gemischten Erfolg damit - einige Anwendungen funktionieren gut und zeigen 256 Farben. Emacs (der Hauptgrund, warum ich 256 Farben auf TTY wollte) scheint jedoch nicht zu funktionieren; Es gibt eine kleine Diskussion darüber, aber es wird nicht wirklich gelöst:

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

Mplayer sollte jedoch funktionieren!

Es sieht schrecklich aus, wenn man es mit einem X-Terminal-Client vergleicht. phil pirozhkov vor 10 Jahren 0
Es läuft in einem Framebuffer, so dass Sie ohnehin nur die 256 für den Framebuffer verfügbaren Farben haben. Seb vor 10 Jahren 1
Fragen Sie sich, ob Sie Einblick in dieses langfristige Problem haben? http://superuser.com/questions/892028/fbterm-expected-behavior-at-launch dtmland vor 9 Jahren 0
Das Ausführen von "emacs" in "tmux" kann hilfreich sein, da es Escape-Sequenzen für das umgebende Terminal übersetzen soll. Tom Hale vor 5 Jahren 0
0
user3751385

kmscon

Mit kmscon können Sie 256 Farben und Videos erhalten, ohne dass ein Windows-System (X, Wayland) installiert ist.

Es wurde aufgegeben, wird aber derzeit über eine Gabelung gepflegt .

Die Dokumentation zur Installation ist dünn, aber die README-Seite hier sollte Ihnen helfen.


Ich habe dies installiert und verwende es für Konsolen-Apps, die 256 Farben benötigen (aufgrund meiner Konfiguration vim).

Lesen Sie die Installationsanweisungen sorgfältig durch.

-1
pbr

Die ANSI-Escape-Sequenzen zum Einstellen der Vordergrund- und Hintergrundfarben von Text beschränken hier die Dinge.

Aus dem Gedächtnis sehen diese Sequenzen wie Flucht aus [01; 34m] Es gibt Codes in den 30ern für den Vordergrund und ich denke, 40er für den Hintergrund.

Ich glaube nicht, dass es einen Weg gibt, das zu erreichen, wonach Sie suchen.

Eigentlich ist es möglich. Andernfalls könnte ich mutt mit 256 Farben in URxvt nicht verwenden. :) Siehe auch http://push.cx/2008/256-color-xterms-in-ubuntu Aber wie bekomme ich den gleichen Effekt in einem TTY? timn vor 15 Jahren 2