Mini-HOWTO Linux de XFree vers XInside par Marco Melgazzi, marco@techie.com Traducteur: Sebastien Blondeel (sebastien.blondeel@lifl.fr) 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, hcz@tazlwurm.bb.bawue.de) # # 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##*/} " 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 hcz@tazlwurm.bb.bawue.de 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 B.Maruszewski@zsmeie.torun.pl 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 (marco@techie.com) - 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. .