6. Rendre le processus automatique

Contenu de cette section

Le petit script qui suit automatise la plupart du travail. Faites très attention au ScanType (type de balayage) et aux deux lignes Polarity (polarité): 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 flèche.

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 résolution FAITES ATTENTION, vous pouvez assez facilement casser votre moniteur puisque le taux de rafraîchissement que vous obtenez sera doublé (en fait mon 400x300 à 72Hz est devenu un 400x300 à 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##*/} <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 ""
}'


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre