TTY con 256 colores?


25

Con URxvt y xterm es posible utilizar un terminal virtual que admita 256 colores en lugar de solo ocho. Como mi tarjeta gráfica Intel GMA está bien soportada por el controlador de framebuffer KMS, estoy trabajando exclusivamente en el TTY. Desafortunadamente, solo admite ocho colores, aunque con MPlayer (-vo fbdev / fbdev2) y otras herramientas de framebuffer se pueden abordar muchas más. ¿Hay alguna manera de decirle al TTY que use más de ocho colores?

Respuestas:


10

Estoy revisando mi respuesta ahora que estoy seguro de las cosas.

Era erróneo concluir que las secuencias ANSI se manejaban a través del BIOS o fuera del núcleo; de hecho, se manejan en el núcleo. Encontré lo que me había perdido antes gracias a hnaz_ en el canal IRC LinuxNewbies: drivers/char/vt.cimplementa una emulación de un terminal Digital Equipment VT102 que utiliza el controlador del terminal virtual.

Entonces ... como respuesta definitiva, después de haber revisado el código fuente que maneja las secuencias de escape para terminales virtuales: si desea un soporte de 256 colores en terminales virtuales, tendrá que construir su propio núcleo después de extender el código que analiza las secuencias de escape para manejar la especificación de color más amplia.

La función se llama csi_m (). Los cambios tendrán que ser similares a los que extienden los emuladores de terminal basados ​​en X para manejar secuencias de escape que especifican los códigos de color más ricos. Probablemente también habrá otros cambios necesarios, pero aquí es donde comenzaría.


1
Así es. Estoy hablando de estos "terminales virtuales de bajo nivel". Pero como estoy usando el framebuffer, creo que es el módulo del núcleo fbcon el que se está empleando. Consulte la documentación / fb / fbcon.txt. ¿O es fbcon solo un contenedor alrededor de n_tty que agrega algunas características adicionales? Mirando el parche URxvt ( cvs.schmorp.de/rxvt-unicode/doc/… ), parece ser bastante fácil extender el soporte de 256 colores. No estoy muy seguro de si n_tty es el módulo de kernel correcto, ya que no veo ninguna definición de color allí.
timn

Creo que el framebuffer es un dispositivo, y el tty es otro: el terminal virtual requiere el dispositivo tty, y esos usan el framebuffer como un dispositivo de visualización, pero el framebuffer no es el único dispositivo de visualización posible.
quack quijote

+1 esto suena más probable (vt102 no es compatible con los colores extendidos y el controlador del terminal está codificado para la emulación vt102). Un poco de investigación.
quack quijote

1
Misma situación en 2017. Creo que kmscones un terminal de usuario que intenta mejorar el terminal (incluido el color de 24 bits). Aunque su desarrollo se ha estancado a favor de una alternativa systemd.
jiggunjer

kmscon se ha bifurcado y, a partir de esta publicación, se está desarrollando activamente: github.com/Aetf/kmscon
user3751385

7

Sus RXVT / xterm / URXVT / etc de 256 colores están definidos por terminfo y la configuración de la TERMvariable. En la mayoría de las distribuciones de Linux, sus terminales virtuales están definidos /etc/inittaby usan un tipo de terminal predeterminado que define cuántos colores puede usar el terminal.

¿Hay alguna manera de decirle al TTY que use más de ocho colores?

Sí.

  • Asegúrese de que su framebuffer esté usando la resolución / profundidad de bits correcta. Intente agregar vga=773a las opciones del núcleo, por ejemplo, para obtener 1024x768 y 256 colores (profundidad de color de 8 bits).

  • Establecer un término diferente (por ejemplo, export TERM=foo). Tendrá que experimentar para encontrar el correcto. Si encuentra uno que funcione, puede modificarlo /etc/inittabpara que sus terminales virtuales lo ejecuten de manera predeterminada (consulte la siguiente sección).

  • Este artículo analiza otras opciones que pueden funcionar para usted. Recomienda Qingy (Qingy no es GettY) como reemplazo de getty, y puede darle lo que está buscando si cambiar las variables TERM no es una opción.

  • Hablando de reemplazos de getty, juro que he visto instrucciones para reemplazar a getty en GNU screenalgún lugar del camino. No estoy encontrando el enlace en este momento, pero dado que hay un TERM de 256 colores para screen, puedes buscarlo.


/etc/inittab usa líneas como esta para configurar terminales virtuales:

# 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

Aquí está la página de manual /sbin/getty(desde mi sistema Debian, por lo que técnicamente es el agettyprograma):

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

Tenga en cuenta que baud_rate,... port [term]hay al final. Eso coincide con el comando en la /etc/inittablínea ( /sbin/getty 38400 ttyN): tenga en cuenta que no hay [term]argumento, por lo que obtenemos un valor predeterminado (se ejecuta echo $TERMjusto después de iniciar sesión en una consola virtual para ver qué usa su sistema). De la página de manual nuevamente:

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.

Si encuentra un TERM que funciona, modifique las líneas de getty en su inittab y agregue el TERM apropiado al final:

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

1
~ grabe toda esta información increíble, pero no estoy seguro de que conducirá al éxito. Usted dice "Sí" pero luego dice "experimento" y "si encuentra uno". Tomé una ruta más directa; Busqué el código del núcleo. No he podido encontrar ningún código que maneje secuencias de escape para el color, en CUALQUIER LUGAR del núcleo. No en el código fb, no en el código tty ... en ninguna parte. Por lo tanto, mi conclusión de que se maneja en el BIOS. Esto es respaldado por mis recuerdos de usar exactamente las mismas secuencias de escape ANSI en DOS. Creo que las diversas secuencias de escape ANSI están siendo manejadas por el BIOS en ambos casos.
pbr

@pbr: también verifiqué el código del kernel. El código TTY no establece ningún límite en la cantidad de colores. El BIOS no entra en él : se trata del framebuffer, que puede tomar varias profundidades de bits (los detalles dependen del hardware, aunque haya deshabilitado el framebuffer ...). la limitación de 16 colores puede estar en GeTTY, por lo tanto, la recomendación de revisar Qingy, o puede estar en el material terminfo, por lo tanto, la recomendación de probar varias definiciones de TERM alternativas. No puedo aconsejar más allá de eso, pero su despotricado de BIOS está fuera de la base y no es útil .
quack quijote

1
~ quack: tiene razón en que no está en el BIOS (vea mi respuesta revisada a continuación) pero aún no recomienda recomendar la investigación de Qingy et al. El código del terminal virtual está codificado con la emulación vt102.
pbr

6

Eche un vistazo a fbterm: es un framebuffer de reemplazo que puede ejecutarse en modo de 256 colores (solo lo ejecuta como root desde un TTY)

He tenido un éxito mixto: algunas aplicaciones funcionan bien e informan 256 colores; sin embargo, Emacs (la razón principal por la que quería 256 colores en TTY) no parece funcionar; hay un poco de discusión al respecto aquí, pero en realidad no se resuelve:

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

Sin embargo, ¡mplayer debería funcionar!


Parece horrible ser comparado con cualquiera de los clientes X terminal.
phil pirozhkov

1
Se ejecuta en un framebuffer, por lo que solo tiene 256 colores disponibles para el framebuffer de todos modos.
Seb

¿Se pregunta si tiene alguna idea sobre este problema de fbterm? superuser.com/questions/892028/...
dtmland

Ejecutar emacsdentro tmuxpuede ayudar, ya que debería traducir secuencias de escape para la terminal circundante.
Tom Hale

1

kmscon

kmscon es una forma de obtener 256 colores y video sin tener instalado un sistema de Windows (X, Wayland).

Fue abandonado pero actualmente se mantiene a través de un tenedor .

La documentación sobre la instalación es escasa, pero la página README aquí debería ayudarlo.


Lo instalé y lo uso para aplicaciones de consola que requieren 256 colores (vim debido a mi configuración).

Lea atentamente las instrucciones de instalación.


-1

Las secuencias de escape ANSI para establecer los colores de primer plano y de fondo del texto son lo que limita las cosas aquí.

De memoria, estas secuencias se parecen a escapar [01; 34m. Hay códigos en los años 30 para el primer plano y creo que los 40 para el fondo.

Así que no creo que haya ninguna manera de lograr lo que estás buscando.


2
En realidad, es posible. De lo contrario, no podría usar mutt con 256 colores en URxvt. :) Véase también push.cx/2008/256-color-xterms-in-ubuntu Pero, ¿cómo obtengo el mismo efecto en un TTY?
timn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.