TTY con 256 colori?


25

Con URxvt e xterm è possibile utilizzare un terminale virtuale che supporta 256 colori anziché solo otto. Poiché la mia scheda grafica Intel GMA è ben supportata dal driver framebuffer KMS, sto lavorando esclusivamente su TTY. Sfortunatamente supporta solo otto colori, anche se con MPlayer (-vo fbdev / fbdev2) e altri strumenti framebuffer è possibile gestire molto di più. C'è un modo per dire al TTY di usare più di otto colori?

Risposte:


10

Sto rivedendo la mia risposta ora che sono sicuro delle cose.

Era errato concludere che le sequenze ANSI fossero gestite tramite BIOS o comunque al di fuori del kernel; infatti, sono gestiti nel kernel. Ho trovato quello che mi ero perso prima grazie a hnaz_ sul canale IRC di LinuxNewbies: drivers/char/vt.cimplementa un'emulazione di un terminale VT102 di apparecchiature digitali che viene utilizzato dal driver del terminale virtuale.

Quindi ... come risposta definitiva, dopo aver esaminato il codice sorgente che gestisce le sequenze di escape per i terminali virtuali: se si desidera un supporto a 256 colori sui terminali virtuali, è necessario creare il proprio kernel dopo aver esteso il codice che analizza le sequenze di escape per gestire le specifiche di colore più ampie.

La funzione si chiama csi_m (). Le modifiche dovranno essere simili a quelle che estendono gli emulatori di terminali basati su X per gestire le sequenze di escape specificando i codici colore più ricchi. Probabilmente ci saranno anche altri cambiamenti necessari, ma è qui che inizieresti.


1
Giusto. Sto parlando di questi "terminali virtuali di basso livello". Ma dal momento che sto usando il framebuffer, credo sia il modulo del kernel fbcon ad essere impiegato. Vedi documentazione / fb / fbcon.txt. Oppure fbcon è solo un wrapper per n_tty che aggiunge alcune funzionalità aggiuntive? Guardando la patch URxvt ( cvs.schmorp.de/rxvt-unicode/doc/… ), sembra essere abbastanza facile estendere il supporto a 256 colori. Non sono del tutto sicuro se n_tty sia il modulo del kernel giusto in quanto non vedo alcuna definizione di colore lì.
timn

penso che il framebuffer sia un dispositivo e tty sia un altro: il terminale virtuale richiede il dispositivo tty e quelli usano il framebuffer come dispositivo di visualizzazione, ma il framebuffer non è l'unico dispositivo di visualizzazione possibile.
Quack Quixote,

+1 sembra più probabile (vt102 non supporta i colori estesi e il driver del terminale hardcoded all'emulazione vt102). bel po 'di ricerca.
Quack Quixote

1
Stessa situazione nel 2017. Credo che kmsconsia un terminale userland che tenta di migliorare il terminale (incluso il colore a 24 bit). Sebbene il suo sviluppo si sia ristagnato a favore di un'alternativa sistemica.
Jiggunjer,

kmscon è stato biforcato e al momento questo post è stato attivamente sviluppato: github.com/Aetf/kmscon
user3751385

7

RXVT / xterm / URXVT / etc a 256 colori sono definiti da terminfo e dall'impostazione della TERMvariabile. Nella maggior parte delle distribuzioni Linux sono definiti i vostri terminali virtuali /etc/inittabe usano un tipo di terminale predefinito che definisce quanti colori può usare il terminale.

C'è un modo per dire al TTY di usare più di otto colori?

Sì.

  • Assicurati che il tuo framebuffer stia utilizzando la risoluzione / profondità di bit corretta. Prova ad aggiungere vga=773alle opzioni del kernel, ad esempio, per ottenere 1024x768 e 256 colori (profondità di colore a 8 bit).

  • Impostare un termine diverso (ad es., export TERM=foo). Dovrai sperimentare per trovare quello giusto. Se ne trovi uno che funziona, puoi modificarlo in /etc/inittabmodo che i tuoi terminali virtuali lo eseguano per impostazione predefinita (vedi la sezione successiva).

  • In questo articolo vengono descritte altre opzioni che potrebbero funzionare per te. Raccomanda Qingy (Qingy non è GettY) come sostituto di getty e potrebbe darti quello che stai cercando se cambiare le variabili TERM non è un'opzione.

  • A proposito di sostituzioni di getty, giuro di aver visto le istruzioni per sostituire getty con GNU screenqualche posto lungo la strada. Al momento non trovo il link, ma poiché esiste un TERM a 256 colori per screen, potresti esaminarlo.


/etc/inittab usa linee come questa per configurare terminali virtuali:

# 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

Ecco la manpage su /sbin/getty(dal mio sistema Debian, quindi tecnicamente è il agettyprogramma):

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

Nota baud_rate,... port [term]lì alla fine. Questo corrisponde al comando nella /etc/inittabriga ( /sbin/getty 38400 ttyN) - nota che non ci sono [term]argomenti, quindi otteniamo un valore predefinito (eseguito echo $TERMsubito dopo aver effettuato l'accesso su una console virtuale per vedere cosa utilizza il tuo sistema). Dalla manpage di nuovo:

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.

Se trovi un TERM che funziona, modifica le linee getty nel tuo inittab e aggiungi il TERM appropriato alla fine:

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

1
~ Quack tutte queste informazioni fantastiche ma non sono sicuro che porterà al successo. Dici "Sì" ma poi "esperimento" e "se ne trovi uno". Ho preso un percorso più diretto; Ho cercato il codice del kernel. Non sono stato in grado di trovare alcun codice che gestisca le sequenze di escape per il colore - OVUNQUE nel kernel. Non nel codice fb, non nel codice tty ... da nessuna parte. Quindi la mia conclusione che è gestita nel BIOS. Questo è supportato dai miei ricordi dell'utilizzo delle stesse identiche sequenze di escape ANSI in DOS. Credo che le varie sequenze di escape ANSI siano gestite dal BIOS in entrambi i casi.
PBR

@pbr: ho controllato anche il codice del kernel. Il codice TTY non pone limiti al numero di colori. Il BIOS non entra in esso - hai a che fare con il framebuffer, che può richiedere vari bitdepth (i dettagli dipendono dall'hardware, anche se hai disabilitato il framebuffer ...). la limitazione di 16 colori può essere in GeTTY, quindi la raccomandazione di dare un'occhiata a Qingy, o potrebbe essere nella roba terminfo, quindi la raccomandazione di provare varie definizioni TERM alternative. non posso consigliare oltre a quello, ma il ranting del BIOS è off-base e non utile .
Quack Quixote,

1
~ ciarlatano - hai ragione nel dire che non si trova nel BIOS (vedi la mia risposta modificata di seguito) ma è ancora fuori nel raccomandare di indagare su Qingy et al. Il codice terminale virtuale è hardcoded con emulazione vt102.
pag

6

Dai un'occhiata a fbterm: è un framebuffer sostitutivo che può essere eseguito in modalità 256 colori (è sufficiente eseguirlo come root da un TTY)

Ho avuto un discreto successo con esso: alcune applicazioni funzionano bene e riportano 256 colori; tuttavia Emacs (il motivo principale per cui volevo 256 colori su TTY) non sembra funzionare; c'è un po 'di discussione qui, ma non si risolve davvero:

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

Tuttavia, mplayer dovrebbe funzionare!


Sembra terribile essere confrontato con uno qualsiasi dei client X terminal.
phil pirozhkov,

1
Funziona con un framebuffer, quindi hai comunque solo 256 colori disponibili per il framebuffer.
Seb,

Ti stai chiedendo se hai qualche idea su questo problema fbterm? superuser.com/questions/892028/…
dtmland

Correre emacsall'interno tmuxpuò essere d'aiuto in quanto dovrebbe tradurre le sequenze di escape per il terminale circostante.
Tom Hale,

1

kmscon

kmscon è un modo per ottenere 256 colori e video senza che sia installato un sistema Windows (X, Wayland).

È stato abbandonato ma attualmente è mantenuto tramite un fork .

La documentazione sull'installazione è snella, ma la pagina README qui dovrebbe aiutarti.


Ho installato questo e lo uso per le app della console che richiedono 256 colori (vim a causa della mia configurazione).

Leggere attentamente le istruzioni di installazione.


-1

Le sequenze di escape ANSI per l'impostazione dei colori di primo piano e di sfondo del testo sono ciò che limita le cose qui.

Dalla memoria queste sequenze assomigliano a escape [01; 34m Ci sono dei codici negli anni '30 per il primo piano e penso che gli anni '40 per lo sfondo.

Quindi non penso che ci sia modo di ottenere ciò che stai cercando.


2
In realtà, è possibile. Altrimenti non sarei in grado di usare mutt con 256 colori in URxvt. :) Vedi anche push.cx/2008/256-color-xterms-in-ubuntu Ma come posso ottenere lo stesso effetto in un TTY?
timn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.