ATS avec 256 couleurs?

24

Avec URxvt et xterm, il est possible d’utiliser un terminal virtuel prenant en charge 256 couleurs au lieu de huit. Étant donné que ma carte graphique Intel GMA est bien prise en charge par le pilote de tampon de trame KMS, je travaille exclusivement sur le TTY. Malheureusement, il ne prend en charge que huit couleurs, bien qu'avec MPlayer (-vo fbdev / fbdev2) et d'autres outils de tampon de mémoire, il soit possible de régler bien d'autres problèmes. Y a-t-il un moyen de dire au téléscripteur d'utiliser plus de huit couleurs?

timn
la source

Réponses:

10

Je révise ma réponse maintenant que je suis sûr de certaines choses.

Il était erroné de conclure que les séquences ANSI étaient gérées via le BIOS ou autrement en dehors du noyau; en effet, ils sont gérés dans le noyau. J'ai trouvé ce que j'avais raté auparavant grâce à hnaz_ sur le canal IRC LinuxNewbies: drivers/char/vt.cimplémente une émulation d'un terminal Digital Equipment VT102 utilisé par le pilote de terminal virtuel.

Alors ... comme réponse définitive, après avoir examiné le code source qui gère les séquences d'échappement des terminaux virtuels: Si vous souhaitez une prise en charge 256 couleurs sur des terminaux virtuels, vous devrez créer votre propre noyau après avoir étendu le code qui analyse les séquences d'échappement. pour gérer la spécification de couleur plus large.

La fonction s'appelle csi_m (). Les modifications devront être similaires à celles qui permettent aux émulateurs de terminal basés sur X de gérer des séquences d'échappement spécifiant des codes de couleur plus riches. D'autres modifications seront probablement nécessaires également, mais c'est par là que vous commenceriez.

pbr
la source
C'est vrai. Je parle de ces "terminaux virtuels de bas niveau". Mais depuis que j'utilise le framebuffer, je pense que c'est le module de noyau fbcon qui est utilisé. Voir Documentation / fb / fbcon.txt. Ou fbcon est-il juste un wrapper autour de n_tty ajoutant des fonctionnalités supplémentaires? En regardant le correctif URxvt ( cvs.schmorp.de/rxvt-unicode/doc/… ), il semble être assez facile d'étendre le support 256 couleurs. Je ne suis pas tout à fait sûr que n_tty soit le bon module de noyau car je n'y vois aucune définition de couleur.
Timn
Je pense que le framebuffer est un périphérique, et le tty en est un autre - le terminal virtuel requiert le périphérique tty, et ceux-ci utilisent le framebuffer comme périphérique d'affichage, mais le framebuffer n'est pas le seul périphérique d'affichage possible.
Quack Quotote
+1 cela semble plus probable (vt102 ne prenant pas en charge les couleurs étendues et le pilote de terminal codé en dur en émulation vt102). belle recherche.
Quack Quichotte
1
Même situation en 2017. Je pense qu'il kmscons'agit d'un terminal utilisateur qui tente d'améliorer le terminal (y compris la couleur 24 bits). Bien que son développement ait stagné en faveur d’une alternative systémique.
jiggunjer
kmscon a été créé et, à compter de ce poste, est activement développé: github.com/Aetf/kmscon
user3751385
7

Vos RXVT / xterm / URXVT / etc 256 couleurs sont définis par terminfo et par le réglage de la TERMvariable. Dans la plupart des distributions Linux, vos terminaux virtuels sont définis dans /etc/inittabet utilisent un type de terminal par défaut qui définit le nombre de couleurs que le terminal peut utiliser.

Y a-t-il un moyen de dire au téléscripteur d'utiliser plus de huit couleurs?

Oui.

  • Assurez-vous que votre framebuffer utilise la résolution / profondeur de bits correcte. Essayez d'ajouter vga=773des options au noyau, par exemple, pour obtenir 1024x768 et 256 couleurs (profondeur de couleur 8 bits).

  • Définissez un TERM différent (par exemple, export TERM=foo). Vous aurez besoin d'expérimenter pour trouver le bon. Si vous en trouvez un qui fonctionne, vous pouvez le modifier de /etc/inittabsorte que vos terminaux virtuels l’exécutent par défaut (voir la section suivante).

  • Cet article décrit d'autres options susceptibles de vous convenir. Il recommande Qingy (Qingy n'est pas GettY) comme remplacement de getty et peut vous donner ce que vous cherchez si le changement de variables TERM n'est pas une option.

  • En parlant de remplacement de getty, je jure avoir lu les instructions pour remplacer getty GNU screenquelque part au cours du processus. Je ne trouve pas le lien pour le moment, mais comme il existe un TERM de 256 couleurs screen, vous pouvez vous renseigner.


/etc/inittab utilise des lignes comme celle-ci pour configurer des terminaux virtuels:

# 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

Voici la page de manuel sur /sbin/getty(de mon système Debian, donc techniquement c'est le agettyprogramme):

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

Notez le baud_rate,... port [term]à la fin. Cela correspond à la commande dans la /etc/inittabligne ( /sbin/getty 38400 ttyN) - notez qu'il n'y a pas d' [term]argument, nous obtenons donc un défaut (exécuté echo $TERMjuste après vous être connecté à une console virtuelle pour voir ce que votre système utilise). De nouveau dans la page de manuel:

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 vous trouvez un TERM qui fonctionne, modifiez les lignes getty dans votre inittab et ajoutez le bon TERM à la fin:

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors
2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors
Quack Quack
la source
1
~ Calmer toutes ces informations géniales mais je ne suis pas sûr que cela conduira au succès. Vous dites "Oui" mais dites ensuite "expérimenter" et "si vous en trouvez un". J'ai pris un itinéraire plus direct; J'ai cherché le code du noyau. Je n'ai pas trouvé de code capable de gérer les séquences d'échappement pour la couleur - PARTOUT dans le noyau. Pas dans le code fb, pas dans le code tty ... nulle part. Ainsi, ma conclusion est que cela est géré dans le BIOS. Ceci est corroboré par mes souvenirs d'utilisation des mêmes séquences d'échappement ANSI sous DOS. Je crois que les différentes séquences d'échappement ANSI sont gérées par le BIOS dans les deux cas.
pbr
@pbr: J'ai également vérifié le code du noyau. Le code ATS ne limite pas le nombre de couleurs. Le BIOS n'y entre pas - vous avez affaire au framebuffer, qui peut prendre plusieurs longueurs de bits (les spécificités dépendent du matériel, même si vous avez désactivé le framebuffer ...). la limite de 16 couleurs peut être dans GeTTY, donc la recommandation de vérifier Qingy, ou peut être dans le contenu terminfo, donc la recommandation d'essayer diverses définitions TERM alternatives. Je ne peux pas vous conseiller au-delà de cela, mais votre raz- de- marée sur le BIOS n’est pas utile ni utile .
Quack Quichotte
1
~ charlatan - vous avez raison de dire que ce n'est pas dans le BIOS (voir ma réponse révisée ci-dessous), mais qu'il est toujours inactif dans la recommandation d'enquêter sur Qingy et al. Le code du terminal virtuel est codé en dur avec l'émulation vt102.
pbr
6

Regardez fbterm - c'est un framebuffer de remplacement qui peut fonctionner en mode 256 couleurs (il vous suffit de l'exécuter en tant que root à partir d'un ATS)

J'ai eu un succès mitigé avec cela - certaines applications fonctionnent bien et rapportent 256 couleurs; Cependant, Emacs (la principale raison pour laquelle je voulais 256 couleurs sur TTY) ne semble pas fonctionner; il y a un peu de discussion à ce sujet ici, mais cela ne se résout pas vraiment:

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

Cependant, mplayer devrait fonctionner!

Seb
la source
On dirait que c'est horrible d'être comparé à n'importe lequel des clients du terminal X.
phil pirozhkov
1
Il fonctionne dans un framebuffer, de sorte que vous ne disposez de toute façon que des 256 couleurs disponibles pour le framebuffer.
Seb
Vous vous demandez si vous avez un aperçu de ce problème de fréquence? superuser.com/questions/892028/…
dtmland
Courir à l' emacsintérieur tmuxpeut aider car il devrait traduire les séquences d'échappement du terminal environnant.
Tom Hale
1

kmscon

kmscon vous permet d'obtenir 256 couleurs et vidéo sans avoir à installer un système Windows (X, Wayland).

Il a été abandonné mais est actuellement maintenu via une fourchette .

La documentation sur l'installation est mince, mais la page LISEZMOI ici devrait vous guider.


Je l'ai installé et je l'utilise pour les applications de la console nécessitant 256 couleurs (vim en raison de ma configuration).

Lisez attentivement les instructions d'installation.

utilisateur3751385
la source
-1

Les séquences d'échappement ANSI pour définir les couleurs de premier plan et d'arrière-plan du texte sont ce qui limite ici.

De mémoire, ces séquences ressemblent à une évasion [01; 34m. Il y a des codes dans les années 30 pour le premier plan et je pense 40 pour les antécédents.

Donc, je ne pense pas qu'il y ait un moyen de réaliser ce que vous recherchez.

pbr
la source
2
En fait, c'est possible. Sinon, je ne pourrais pas utiliser Mutt avec 256 couleurs dans URxvt. :) Voir aussi push.cx/2008/256-color-xterms-in-ubuntu Mais comment puis-je obtenir le même effet dans un ATS?
Timn