Mini-HOWTO Linux de XFree vers XInside
par Marco Melgazzi,
[email protected]
Traducteur: Sebastien Blondeel <
http://www.lifl.fr/~blon-
deel> (
[email protected])
version 1.3 / septembre 1997
Comment convertir une ligne de mode video XFree86 en ligne de mode
video XInside/XiGraphics
11.. IInnttrroodduuccttiioonn
Au printemps 1996, j'ai lu dans comp.os.linux.x (groupe de discussion
consacre a la partie graphique du systeme d'exploitation Linux)
beaucoup d'articles demandant comment convertir les modes video entre
XFree86 et une de ses alternatives commerciales: XInside (desormais
appele XiGraphics, mais vous remarquerez que dans ce document
j'utiliserai l'ancien nom de produit, puisque je me refere
principalement a cette version-la).
J'avais deja evalue le produit auparavant et j'avais encore sur mon
disque dur cette version d'evaluation: comme j'aime resoudre des
problemes, j'ai decide de m'y mettre et, apres quelques heures de
tatonnements et de calculs, j'ai redige un article cense etre
interessant, qui fut rapidement poste.
Les discussions parlant de la conversion prirent subitement fin et
j'ai recu 1 (un) courrier electronique me remerciant pour l'article de
telle sorte que, puisque quelqu'un d'autre risque de se poser ces
questions a l'avenir, j'ai decide de transformer cet article en ce
mini HOWTO.
Mettons tout de suite les choses au clair: je ne travaille PAS pour
XInside et je n'ai eu acces qu'a leur version d'evaluation 1.2 pour
Linux. Je sais que maintenant (en mai 1997) AccelX a atteint le numero
de version 3.1, mais je pense que l'information contenue dans ce
document est toujours utilisable, au prix peut-etre de quelques
modifications mineures.
Puisque ce HOWTO a ete mis au point a l'aide d'une version de XInside
assez vieille, il se peut que certaines donnees presentees ici ne
soient pas tout a fait exactes. Comme vous le lirez plus loin, grace a
l'avenement de XFree 3.2, je n'ai pas achete ce serveur commercial.
Aussi, si vous l'avez achete, et que vous remarquez des erreurs,
veuillez prendre le temps de me les communiquer par courrier
electronique.
Attention, bidouiller les reglages d'un moniteur est assez dangereux
et, pour cette raison, je ne garantis rien du tout. Si cela fonctionne
pour votre ordinateur, tant mieux. Si vous le faites exploser, ne m'en
tenez pas pour responsable.
22.. EEnn aaii--jjee vvrraaiimmeenntt bbeessooiinn??
Je ne comprends absolument pas le choix de XInside de ne pas proposer
d'utilitaire pour regler vos modes video (comme xvidtune) et/ou pour
importer vos modes video de XFree dans la version d'evaluation (qui
est, pour autant que je sache, commerciale). J'ai passe environ trois
heures a mettre tout ceci au point (indice: j'ai compare l'entree
concernant le VESA 1024x768 a 70Hz dans les deux formats (et je suis
presque ingenieur en electronique ;-)) alors qu'un programmeur de chez
XInside aurait pu ecrire un article comparatif en bien moins de
temps...
Je n'ai pas telecharge les versions d'evaluation a partir de la 1.3 et
j'espere vraiment qu'ils ont regle cela. Et si c'est le cas, on peut
penser que ce mini HOWTO est devenu inutile mais puisque vous le
lisez, esperons qu'il vous aidera a mieux comprendre comment tout cela
fonctionne...
33.. AAlllloonnss--yy
Supposons que vous ayez votre mode XFree86 bien aime et que vous
vouliez evaluer XInside dans les memes conditions: suivez les etapes
presentees ci-dessous et vous devriez pouvoir le faire; nous allons
utiliser a titre d'exemple vecu mon mode video par defaut et je vais
vous expliquer ce que vous devrez faire pour le convertir.
Une entree de XFree86 ressemble a ceci:
Modeline "blabla" DOTCLK A B C D a b c d
Chacun des nombres de A a D et de a a d a une signification precise:
si vous le voulez, vous pouvez faire des recherches dans le "Guide du
Rootard pour les modes video sous X386/XFree86"
(/usr/lib/X11/doc/VideoModes.doc) mais vous n'avez pas besoin de
connaitre toute la theorie sous-jacente pour realiser une conversion
couronnee de succes...
Mon entree dans /usr/lib/X11/XF86Config est:
Modeline "1168x876" 105 1168 1256 1544 1640 876 877 891 900
| | | | | | | | |
DOT_CLK A B C D a b c d
Sous XInside, il vous faut ajouter une entree dans le fichier
Xtimings, qui devrait se trouver dans etc/ (a partir de maintenant,
nous supposerons que vous vous trouvez dans le repertoire racine de
Xaccel, qui devrait etre quelque chose comme
/usr/X11/lib/X11/AcceleratedX).
! Quelque part dans le fichier, mettez ici le nom desire
[MODE_PREAJUSTE]
NomDuModePreajuste = "1168x876 @ 72Hz";
!
! Les quatre lignes suivantes sont evidentes... pour qui parle anglais
!
HorPixel = 1168; // pixels
VerPixel = 876; // lignes
PixelWidthRatio = 4; // taux de largeur des pixels
PixelHeightRatio = 3; // taux de hauteur des pixels
!
! hsync: DOT_CLK / D * 1000 [KHz]
!
! hsync = 105 / 1640 * 1000 = 64.024 KHz
!
! vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Hz]
!
! vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000
! ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Hz
!
HorFrequency = 64.180; // kHz
VerFrequency = 71.138; // Hz
! Type de balayage
ScanType = NONINTERLACED;
!
! Mettez ici les options de XFree86 +/-hsync et +/-vsync
!
HorSyncPolarity = POSITIVE;
VerSyncPolarity = POSITIVE;
! Cela ne devrait pas changer
CharacterWidth = 8; // largeur des caracteres, en pixels
! ici, c'est DOT_CLK
PixelClock = 105.000; // MHz
!
!
! section des reglages horizontaux: [usec, ou microsecondes]
!
HorTotalTime = D / DOT_CLK = 15.619;
HorAddrTime = A / DOT_CLK = 11.124;
HorBlankStart = A / DOT_CLK = 11.124;
HorBlankTime = HorTotalTime - HorBlankStart = 4.495;
HorSyncStart = B / DOT_CLK = 11.962;
HorSyncTime = C / DOT_CLK - HorSyncStart = 2.743;
!
! section des reglages verticaux: [msec, ou millisecondes]
!
VerTotalTime = ( HorTotalTime * d ) / 1000 = 14.057;
VerAddrTime = ( HorTotalTime * a ) / 1000 = 13.682;
VerBlankStart = ( HorTotalTime * a ) / 1000 = 13.682;
VerBlankTime = VerTotalTime - VerBlankStart = 0.375;
VerSyncStart = ( HorTotalTime * b ) / 1000 = 13.698;
VerSyncTime = ( HorTotalTime * ( c - b ) ) / 1000
= 0.219
! C'est tout !
Il vous faut maintenant positionner ce mode video nouvellement cree
dans les fichiers indiques dans la section suivante, au bon endroit.
44.. MMeettttrree lleess cchhoosseess aauu ppooiinntt
Dans les extraits ci-dessous, le signe -> vous indique ce qui a ete
modifie: ne l'incluez PAS dans vos fichiers!
Entree du moniteur (la mienne est monitors/mfreq/mfreq64.vda)
[MODES_ETABLIS]
"640x480 @ 60Hz",
"640x480 @ 72Hz",
"640x480 @ 75Hz",
"800x600 @ 56Hz",
"800x600 @ 60Hz",
"800x600 @ 72Hz",
"800x600 @ 75Hz",
"1024x768 Interlaced",
"1024x768 @ 60Hz",
"1024x768 @ 70Hz",
"1024x768 @ 75Hz",
"1152x900 Interlaced",
"1152x900 @ 60Hz",
"1152x900 @ 67Hz",
-> "1168x876 @ 72Hz",
"1280x1024 Interlaced",
"1280x1024 @ 60Hz",
"1600x1200 Interlaced";
Dans le fichier d'informations propre a la carte (la mienne est
(boards/s3/764-2.xqa, je me demande pourquoi ils ont presque toutes
les cartes Hercules sauf la mienne: Terminator 64/Dram).
[VISUEL]
BitsPerPixel = 8;
MemoryModel = Packed;
ColorModel = Indexed;
BitsRGB = 6;
NumberOfColors = 256;
[RESOLUTIONS]
640x480,
800x600,
1024x768,
-> 1168x876,
1152x900,
1280x1024
[BUREAUX]
640x480,
800x600,
1024x768,
1152x900,
-> 1168x876,
1280x1024,
1600x1200
Si la carte le permet (ce qui n'est PAS le cas pour ma carte) vous
pouvez meme mettre cette entree dans les sections 16bpp et 32bpp (bpp:
bit par pixel).
Le fichier etc/Xaccel.ini ressemblera a ce qui suit:
--------------------------------------------------------------
Board = "s3/764-2.xqa";
Monitor = "mfreq/mfreq64.vda";
Depth = 8;
-> Desktop = 1168x876;
[RESOLUTIONS]
-> 1168x876,
1024x768;
L'entree du mode correspondant pour XInside dans etc/Xtimings:
--------------------------------------------------------------
[MODE_PREAJUSTE]
NomDuModePreajuste = "1168x876 @ 72Hz";
HorPixel = 1168; // pixels
VerPixel = 876; // lignes
PixelWidthRatio = 4;
PixelHeightRatio = 3;
HorFrequency = 64.024; // kHz
VerFrequency = 71.138; // Hz
ScanType = NONINTERLACED;
HorSyncPolarity = POSITIVE;
VerSyncPolarity = POSITIVE;
CharacterWidth = 8; // pixels
PixelClock = 105.000; // MHz
HorTotalTime = 15.619; // (usec) = 205 caracteres
HorAddrTime = 11.124; // (usec) = 146 caracteres
HorBlankStart = 11.124; // (usec) = 146 caracteres
HorBlankTime = 4.495; // (usec) = 59 caracteres
HorSyncStart = 11.962; // (usec) = 157 caracteres
HorSyncTime = 2.743; // (usec) = 36 caracteres
VerTotalTime = 14.057; // (msec) = 900 lignes
VerAddrTime = 13.682; // (msec) = 876 lignes
VerBlankStart = 13.682; // (msec) = 876 lignes
VerBlankTime = 0.375; // (msec) = 24 lignes
VerSyncStart = 13.698; // (msec) = 877 lignes
VerSyncTime = 0.219; // (msec) = 14 lignes
Vous pouvez verifier votre conversion en lancant le programme vgaset
sans parametres alors que le serveur XInside tourne: cela produira une
ligne a la XFree et, si tout s'est bien passe, cette ligne sera la
meme que celle de laquelle vous etiez parti (sauf si b et c sont
egaux, je n'ai pas reussi a reproduire cette situation dans XInside:
le meilleur cas qui s'est produit etant c=b+1).
55.. LLaa ffiinn......
C'est tout pour cette fois-ci ! J'espere que cela vous sera utile. Je
ne pense pas acheter le serveur XiGraphics dans un futur proche pour
une raison simple: la sortie de XFree86 3.2 a resolu tous les
problemes de vitesse que je rencontrais avec mon humble carte video
Trio 64 ;)
Il semble toutefois que le serveur XiGraphics reconnait un ensemble de
puces et de cartes video bien plus large que XFree, aussi est-il
possible que l' "alternative commerciale" soit la seule disponible
pour vous. Si c'est le cas, et si vous avez achete le serveur
XiGraphics, j'aimerais vraiment avoir de vos nouvelles afin de savoir
si l'information presentee ici vous a ete utile, si vous l'avez
trouvee trop compliquee, ou quoi que ce soit.
66.. RReennddrree llee pprroocceessssuuss aauuttoommaattiiqquuee
Le petit script qui suit automatise la plupart du travail. Faites tres
attention au ScanType (type de balayage) et aux deux lignes Polarity
(polarite): le script ne les positionne pas et, si vous avez la
paresse de ne pas les corriger, les risques d'endommager votre
moniteur augmentent en fleche.
Remarquez que je ne sais pas si le drapeau "Doublescan" (balayage
double) a une signification quelconque dans XInside: si vous tentez de
convertir un mode de double balayage de faible resolution FAITES
ATTENTION, vous pouvez assez facilement casser votre moniteur puisque
le taux de rafraichissement que vous obtenez sera double (en fait mon
400x300 a 72Hz est devenu un 400x300 a 144Hz!).
#!/bin/sh
##########################################################################
# XF2XInside
#
# Ce script convertit les lignes de mode video du format XF86Config au
# format XInside pour remplir les besoins du fichier etc/Xtimings.
#
# C'est une bidouille vite programmee, n'en attendez pas des verifications
# d'erreurs fines (et ne parlons pas de l'interface utilisateur).
#
# Si vous l'appelez sans argument, il devrait vous dire quoi faire.
#
# (juillet 1996,
[email protected])
#
# Au fait: Les nouveaux modes crees comme expliques dans ce HOWTO
# fonctionnent, mais n'apparaissent pas dans le menu de Xsetup. Quelqu'un
# sait-il pourquoi ?
#
##########################################################################
#----------------------------------------------- On y va:
# Modifiez ceci si votre fichier de lignes de modes video est ailleurs:
XF=/usr/X11/lib/X11/XF86Config
if [ $# -ne 1 ] ; then
echo "utilisation: ${0##*/} <mode>"
echo " exemple: ${0##*/} 1024x764"
echo -e " role: convertit une entree de ligne de mode video de $XF au\nformat XInside (stdout, ou la sortie standard)"
exit 1
fi
egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config |
gawk '
NF < 11 { print "! mauvaise ligne:\n! " $0 "\n!"; next }
{
print "//", $0 ":"
name = $2
DOT_CLK = $3;
A = $4;
B = $5;
C = $6;
D = $7;
a = $8;
b = $9;
c = $10;
d = $11;
VerFrequency = 1000000 / ((D / DOT_CLK) * d)
print "[MODE_PREAJUSTE]"
printf " NomDuModePreajuste = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency
print " HorPixel\t\t= " A ";"
print " VerPixel\t\t= " a ";"
print " PixelWidthRatio\t= 4;\n PixelHeightRatio\t= 3;"
print " HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz"
print " VerFrequency\t\t= " VerFrequency ";\t// Hz"
print " ScanType\t\t= NONINTERLACED;\t\t// *VERIFIEZ*"
print " HorSyncPolarity\t= NEGATIVE;\t\t\t// *VERIFIEZ*"
print " VerSyncPolarity\t= NEGATIVE;\t\t\t// *VERIFIEZ*"
print " CharacterWidth\t= 8;"
print " PixelClock\t\t= " DOT_CLK ";"
HorTotalTime = D / DOT_CLK
print " HorTotalTime\t\t= " HorTotalTime ";"
print " HorAddrTime \t\t= " A / DOT_CLK ";"
print " HorBlankStart\t\t= " A / DOT_CLK ";"
print " HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";"
print " HorSyncStart\t\t= " B / DOT_CLK ";"
print " HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";"
VerTotalTime = ( HorTotalTime * d ) / 1000
print " VerTotalTime\t\t= " VerTotalTime ";"
print " VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";"
VerBlankStart = ( HorTotalTime * a ) / 1000
print " VerBlankStart\t\t= " VerBlankStart ";"
print " VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";"
print " VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";"
print " VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000
print ""
}'
77.. MMeerrccii aa
+o Heike Claudia Zimmerer
[email protected] pour m'avoir fait
remarquer une petite contradiction et pour m'avoir envoye un script
qui automatise une grande partie du travail.
+o Bartosz Maruszewski
[email protected] pour avoir
traduit ce mini HOWTO en polonais et pour m'avoir fait remarquer
une petite faute de frappe.
88.. CCooppyyrriigghhtt//ppooiinntt ddee vvuuee lleeggaall
(c)opyright 1996-7 par Marco Melgazzi (
[email protected]) - couvert par
la GPL (licence publique de GNU). Pour obtenir une copie de cette
licence, ecrivez a la Fondation pour un Logiciel Libre, a l'adresse:
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
USA.
Les marques deposees appartiennent a leurs proprietaires. Aucune
garantie ne couvre la justesse ou l'utilite de l'information que vous
trouverez dans ce document.