TTY mit 256 Farben?

25

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 werden nur acht Farben unterstützt, obwohl mit MPlayer (-vo fbdev / fbdev2) und anderen Framebuffer-Tools weitaus mehr angesprochen werden können. Gibt es eine Möglichkeit, dem TTY mitzuteilen, mehr als acht Farben zu verwenden?

timn
quelle

Antworten:

10

Ich überarbeite meine Antwort jetzt, da ich mir der Dinge sicher bin.

Es war falsch zu folgern, dass die ANSI-Sequenzen über das BIOS oder auf andere Weise außerhalb des Kernels verarbeitet wurden. in der Tat werden sie im Kernel gehandhabt. Ich fand, was ich dank hnaz_ im LinuxNewbies-IRC-Kanal verpasst hatte: drivers/char/vt.cImplementiert eine Emulation eines Digital Equipment VT102-Terminals, das vom virtuellen Terminaltreiber verwendet wird.

Als endgültige Antwort, nachdem Sie den Quellcode überprüft haben, der die Escape-Sequenzen für virtuelle Terminals verwaltet: Wenn Sie 256-Farben-Unterstützung für virtuelle 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 behandeln.

Die Funktion heißt csi_m (). Die Änderungen müssen denen ähneln, 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.

pbr
quelle
1
Korrekt. Ich spreche von diesen "Low-Level-virtuellen Terminals". Aber da ich den Framebuffer benutze, wird, glaube ich, das fbcon-Kernelmodul verwendet. 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 ( cvs.schmorp.de/rxvt-unicode/doc/… ), scheint es ziemlich einfach zu sein, die 256-Farben-Unterstützung zu erweitern. Ich bin nicht ganz sicher, ob n_tty das richtige Kernelmodul ist, da ich dort keine Farbdefinitionen sehe.
14.
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 einzig mögliche Anzeigegerät.
Quacksalber 15.
+1 Dies klingt wahrscheinlicher (VT102 unterstützt die erweiterten Farben nicht und der Terminaltreiber ist fest auf VT102-Emulation programmiert). gutes Stück Forschung.
Quack Quijote
1
Die gleiche Situation im Jahr 2017. Ich glaube, es kmsconhandelt sich um ein Userland-Terminal, das versucht, das Terminal zu verbessern (einschließlich 24-Bit-Farbe). Obwohl seine Entwicklung zugunsten einer Systemalternative stagniert hat.
Jiggunjer
kmscon wurde gegabelt und wird derzeit aktiv weiterentwickelt: github.com/Aetf/kmscon
user3751385 06.09.18
7

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, mehr als acht Farben zu verwenden?

Ja.

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

  • Legen Sie ein anderes TERM fest (z export TERM=foo. B. ). Sie müssen experimentieren, um die richtige zu finden. Wenn Sie eines finden, das funktioniert, können Sie es /etc/inittabso ändern , dass Ihre virtuellen Terminals es standardmäßig ausführen (siehe nächster Abschnitt).

  • Dieser Artikel beschreibt andere Optionen, die für Sie möglicherweise funktionieren. Es empfiehlt Qingy (Qingy ist nicht GettY) als Ersatz für getty und gibt Ihnen möglicherweise das, wonach Sie suchen, wenn das Wechseln von TERM-Variablen keine Option ist.

  • Apropos getty-Ersatz, ich schwöre, ich habe Anweisungen zum Ersetzen von getty durch GNU screenirgendwo auf dem Weg gesehen. Ich finde den Link im Moment nicht, aber da es einen TERM für 256 Farben gibt screen, können Sie sich das ansehen.


/etc/inittab Verwendet Zeilen wie diese, 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(von meinem Debian-System aus, 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 - es gibt kein [term]Argument, daher erhalten wir eine Standardeinstellung (wird ausgeführt, echo $TERMsobald Sie sich an einer virtuellen Konsole angemeldet haben, um zu sehen, was Ihr System verwendet). Von der Manpage nochmal:

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 einen TERM finden, der 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
Quacksalber
quelle
1
~ Quaken Sie all diese tollen Informationen, aber ich bin mir nicht sicher, ob sie zum Erfolg führen werden. Sie sagen "Ja", dann aber "Experimentieren" und "Wenn Sie eines finden". Ich nahm einen direkteren Weg; Ich habe den Kernel-Code durchsucht. Ich konnte keinen Code finden, der Escape-Sequenzen für Farbe handhabt - ÜBERALL im Kernel. Nicht im FB-Code, nicht im Tty-Code ... nirgendwo. Also meine Schlussfolgerung, dass es im BIOS gehandhabt wird. Dies wird durch meine Erinnerungen an die Verwendung der exakt 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
@pbr: Ich habe auch den Kernel-Code überprüft. Der TTY-Code schränkt die Anzahl der Farben nicht ein. BIOS gelangt nicht in sie - du mit dem Framebuffer zu tun hat , die können verschiedene bitdepths nehmen (Einzelheiten sind hardwareabhängig, tho , wenn Sie den Framebuffer deaktiviert haben ...). Die 16-Farben-Beschränkung kann in GeTTY, also der Empfehlung zum Auschecken von Qingy, oder in der Terminologie, also der Empfehlung zum Ausprobieren verschiedener alternativer TERM-Definitionen, enthalten sein. Ich kann nicht darüber hinaus raten, aber Ihr BIOS-Ranting ist Off-Base und nicht hilfreich .
Quack Quijote
1
~ quack - Sie haben Recht, dass es nicht im BIOS ist (siehe meine überarbeitete Antwort unten), aber immer noch nicht in der Empfehlung, die Untersuchung von Qingy et al. Der Code des virtuellen Terminals ist mit der VT102-Emulation fest codiert.
1.
6

Schauen Sie sich fbterm an - 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 einwandfrei und melden 256 Farben; Emacs (der Hauptgrund, warum ich 256 Farben für TTY wollte) scheint jedoch nicht zu funktionieren; Es wird hier ein wenig darüber diskutiert, aber es wird nicht wirklich gelöst:

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

Mplayer sollte aber funktionieren!

Seb
quelle
Sieht schrecklich aus, wenn man sie mit einem X-Terminal-Client vergleicht.
Phil Pirozhkov
1
Es wird in einem Framebuffer ausgeführt, sodass dem Framebuffer ohnehin nur 256 Farben zur Verfügung stehen.
Seb
Sie fragen sich, ob Sie einen Einblick in dieses Problem haben? superuser.com/questions/892028/...
dtmland
Es kann hilfreich sein, nach emacsinnen zu tmuxrennen, da es die Escape-Sequenzen für das umgebende Terminal übersetzen sollte.
Tom Hale
1

kmscon

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

Es wurde aufgegeben, wird aber derzeit über eine Gabel gewartet .

Die Dokumentation zur Installation ist schmal, aber die README-Seite hier sollte Ihnen weiterhelfen .


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

Lesen Sie die Installationsanweisungen sorgfältig durch.

user3751385
quelle
-1

Die ANSI-Escape-Sequenzen zum Festlegen der Vordergrund- und Hintergrundfarbe von Text sind hier einschränkend.

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 eine Möglichkeit gibt, das zu erreichen, wonach Sie suchen.

pbr
quelle
2
Eigentlich ist es möglich. Andernfalls wäre ich nicht in der Lage, Mutt mit 256 Farben in URxvt zu verwenden. :) Siehe auch push.cx/2008/256-color-xterms-in-ubuntu Aber wie bekomme ich den gleichen Effekt in einem TTY?
Timn