OVH Cloud OVH Cloud

changer la couleur de fond d'une console

4 réponses
Avatar
mike
Bonjour à tous,

Comment changer la couleur de fond (et du texte) d'une console?
Je parle bien mode non graphique. J'utilise une RedHat 6.2.

Merci

4 réponses

Avatar
Stephane CHAZELAS
Le Mon, 13 Oct 2003 16:18:50 +0200, mike écrivait :
Comment changer la couleur de fond (et du texte) d'une console?
Je parle bien mode non graphique. J'utilise une RedHat 6.2.



#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/kd.h>

int main(int argc, char **argv)
{
int i, fd;
unsigned char buf[64];

if (argc != 4) {
fprintf(stderr, "Usage: %s <red> <green> <blue>n",
argc?argv[0]:"setbackground");
}

fd = open("/dev/console", O_WRONLY, 0);
if (fd < 0) {
perror("open /dev/console");
return 1;
}
i = ioctl(fd, GIO_CMAP, buf);
if (i < 0) {
perror("ioctl get palette");
return 1;
}
for (i = 0; i < 3; i++)
buf[i] = atoi(argv[i+1]);

i = ioctl(fd, PIO_CMAP, buf);
if (i < 0) {
perror("ioctl put palette");
return 1;
}
return 0;
}

Tu peux redéfinir les autres couleurs de la meme façon (buf[3],
buf[4]...).

--
Stéphane

Avatar
Stephane CHAZELAS
Le 13 Oct 2003 16:09:21 GMT, Stephane CHAZELAS écrivait :
Le Mon, 13 Oct 2003 16:18:50 +0200, mike écrivait :
Comment changer la couleur de fond (et du texte) d'une console?
Je parle bien mode non graphique. J'utilise une RedHat 6.2.


[en C]


Ou, de façon simplifiée en perl:

perl -le'ioctl STDIN,0x4B70,$n;@b=unpack"C48",$n;
(@b[0..2])= (123,12,1) ;$n=pack"C48",@b;
ioctl STDIN,0x4B71,$n' < /dev/console

pour changer le fond.

Pour changer la première couleur:

perl -le'ioctl STDIN,0x4B70,$n;@b=unpack"C48",$n;
(@b[21..23])=(1,12,123);$n=pack"C48",@b;
ioctl STDIN,0x4B71,$n' < /dev/console

Pour du noir sur fond gris:

perl -le'ioctl STDIN,0x4B70,$n;@b=unpack"C48",$n;
(@b[0..2,21..23])=(150,150,150,0,0,0);$n=pack"C48",@b;
ioctl STDIN,0x4B71,$n' < /dev/console

Évidemment, ceci est spécifique à Linux (et encore peut-etre que
certaines versions, et peut-etre que pour une console VGA sur un
ix86).

--
Stéphane


Avatar
Stephane CHAZELAS
Le Mon, 13 Oct 2003 16:18:50 +0200, mike écrivait :
Comment changer la couleur de fond (et du texte) d'une console?
Je parle bien mode non graphique. J'utilise une RedHat 6.2.


Sinon, une méthode qui marchera dans une certaine mesure pour
tous les terminaux couleur ansi est de modifier l'entrée
terminfo correspondant au terminal.

Exemple (syntaxe zsh et tic/infocmp de ncurses):

mkdir ~/.terminfo
TERMINFO=~/.terminfo tic =(
infocmp -1 | sed '2s/[^|]*/zzz/;/sgr0/s/,$/E[43m,/')
export TERM=~/.terminfo TERM=zzz
print -n 'e[43m'

sgr0 est la "capability" qui remet tout les attributs
d'affichage à la valeur par défaut (couleurs, bold,
underline...).

Si je rajoute E[43m à sa valeur, chaque fois qu'une application
utilisant "curses" (et la base terminfo) voudra remettre les
attributs d'affichage à 0, ça mettra la couleur du fond à jaune
(la couleur 3).

Ça marche pas mal ici sauf par exemple pour "ls --color" ou
"most" qui ont les valeurs de capabilities codées en dur.

(notez que je n'ai pas changé l'entrée terminfo de mon terminal
mais créé une nouvelle (zzz) stockée dans une base séparée
(~/.terminfo)).

--
Stéphane

Avatar
Qing Liu
mike writes:

Bonjour à tous,

Comment changer la couleur de fond (et du texte) d'une console?
Je parle bien mode non graphique. J'utilise une RedHat 6.2.


Bonjour,

Utiliser setterm. man setterm.

--
Liu