Page suivantePage précédenteTable des matières

15. Gestion de la mémoire vidéo avec plusieurs écrans

Cette partie du document a été fournie gracieusement par Frederick A. Niles qui conserve tous ses droits sur les informations données.

15.1 Introduction

Les quelques pages qui suivent sont censées permettre une première prise en main des configurations à deux écrans sous Linux. Bien que le processus se déroule naturellement, les occasions de se tromper ne manquent pas.

Je me suis focalisé sur la mise en place d'un serveur X sur un second moniteur. L'intérêt en est que l'on croise de temps à autre des personnes se débarrassant de vieux moniteurs de 19 ou 20 pouces à fréquence fixe car ils ne peuvent plus s'en servir. On peut ainsi démarrer avec un petit moniteur multisync et disposer de X sur un moniteur de grandes dimensions.

Comme il s'agit d'un domaine en plein développement, l'information évolue rapidement. Le contenu de ce document pourrait très bien être dépassé, voire complètement faux, lorsque vous le lirez.

** ATTENTION ** Ce texte a été rédigé avant la sortie de la version 4.0 de la XFree86 qui devrait modifier pas mal de choses. Essayez d'obtenir une nouvelle version de ce document si elle existe.

15.2 Retour

Le retour de la part des utilisateurs sera plus que certainement le bienvenu. Sans vos remarques et vos questions, ce document n'existerait pas. N'hésitez donc pas à me contacter à l'adresse suivante : Frederick.A.Niles@gsfc.nasa.gov.

15.3 Contributions

Les personnes suivantes ont participé à l'élaboration de ce Mini-HOWTO :

15.4 Avertissements

L'auteur de ce document dégage toute responsabilité quant à son contenu. Vous employez les notions, exemples et tout ce qui figure ici à vos risques et périls. S'agissant d'une nouvelle version de ce document, des informations erronées ou inadéquates peuvent très bien entraîner la dégradation de votre matériel. Faîtes-y attention et, bien que ce soit hautement improbable, je me décharge de toute responsabilité à cet égard.

15.5 Propriété du document

Copyright (c) 1999 Frederick Niles

La distribution de ce document doit se conformer aux termes de la licence LDP tels que définis à l'adresse : sunsite.unc.edu/LDP/COPYRIGHT.html>.

15.6 Matériel supporté

La plupart des cartes vidéos supposent qu'elles assument seules cette fonction au sein du système. Elles occupent donc en permanence l'espace d'adressage de l'adaptateur graphique primaire. Il existe quelques exceptions :

Remarque : seul le second adaptateur graphique doit figurer dans la liste précédente.

15.7 Logiciels commerciaux

Ce Mini-HOWTO traite avant tout de logiciel libre. Certains serveurs X commerciaux sont néanmoins capables de gérer plusieurs moniteurs tels le serveur Metro-X de Metro Link (www.metrolink.com) et Accelerated-X de Xi Graphics (www.xig.com).

15.8 Logiciels nécessaires

Les patches et programmes suivants sont nécessaires :

15.9 Mise en route

Commencez par patcher votre version du noyau avec le patche "fbaddon". Ensuite, vous configurerez le noyau et activerez la gestion de la mémoire vidéo. Si vous disposez de cartes Matrox, incluez le pilote d'accélération unifié Matrox. Excluez le gestionnaire de mémoire vidéo VESA. Activez bien sûr la gestion de plusieurs adaptateurs, recompilez le noyau et réinitialisez le système.

A présent, installez l'utilitaire "fbset" et lisez attentivement la documentation relative à son paramètrage. La mise en place d'un fichier "/etc/fb.modes" est vivement recommandé une fois que vous vous serez décidé sur une configuration. Le paquetage fbset comprend un script Perl de conversion du fichier XF86Config en paramètres pour fb.modes. Vous trouverez mon script en shell Bourne dans les annexes A et B.

Vous devez vous mettre au point sur l'emploi du pilote de mémoire vidéo avec un seul adaptateur et bien identifier tout ce qui n'a rien à voir avec la gestion de plusieurs. Vous vous épargnerez ainsi pas mal de noeuds au cerveau. Je me focalise surtout sur la mise en place de X au niveau du second moniteur vu que la plupart des autres opérations de configuration en forment un sous-ensemble.

Déplacement d'une console

Compilez le programme "con2fb". Lancé sans arguments, il fournit le message suivant : "usage: con2fb fbdev console". Une commande telle que "con2fb /dev/fb1 /dev/tty6" attacherait la console virtuelle numéro 6 au second gestionnaire de mémoire vidéo. Ctrl-Alt-F6 vous basculera dans cette console qui s'affichera sur le second moniteur.

"fbset" et le paramètrage du second moniteur

La mise en place des paramètres "fbset" doit se cantonner au moniteur avec lequel "fbset" est employé. Faîtes donc attention à bien employer l'option "-fb" avec le second moniteur. Plus précisément, si vous ne voulez rien faire d'autre qu'accorder la résolution verticale virtuelle avec la résolution verticale réelle : "fbset -fb /dev/fb1 -vyres 600" (par exemple). L'affichage en mode texte en est sérieusement ralenti mais sans cela X reste vraiment hideux.

X et le gestionnaire de mémoire vidéo

Le fichier framebuffer.txt explique bien mieux que je ne puis le faire mais voici les deux points essentiels :

Par exemple :
# Serveur X s'appuyant sur le gestionnaire de mémoire vidéo.
Section "Screen"
 Driver      "fbdev"
 Device      "Millennium"
 Monitor     "NEC MultiSync 5FGp"
 Subsection "Display"
 Depth       8
 Modes       "default"
 ViewPort    0 0
 EndSubsection
 Subsection "Display"
 Depth       16
 Modes       "default"
 ViewPort    0 0
 EndSubsection
 Subsection "Display"
 Depth       24
 Modes       "default"
 ViewPort    0 0
 EndSubsection
 Subsection "Display"
 Depth       32
 Modes       "default"
 ViewPort    0 0
 EndSubsection
EndSection

Restreignez vous aux modes "default" car je ne pense pas qu'il y en ait d'autres qui fonctionnent avec le pilote de mémoire vidéo Matrox.

Exécution du serveur X sur le second moniteur

Positionnez la variable d'environnement FRAMEBUFFER sur le second périphérique de mémoire vidéo : "export FRAMEBUFFER=/dev/fb1" ou : "setenv FRAMEBUFFER /dev/fb1" X doit être lancé avec des paramètres lui spécifiant à la fois la profondeur souhaitée au niveau des couleurs et un numéro correspondant à la console virtuelle employée. Par exemple : "startx -- :0 -bpp 16 vt06". Le serveur X en 16 bits par pixel d'identifiant ":0" est attaché à la console virtuelle numéro 6. Utilisez ":1" au lancement d'un autre serveur X en le liant à une console dépendant de l'autre gestionnaire de mémoire vidéo et vous disposerez de deux serveurs X fonctionnant simultanément.

15.10 Résumé

Les étapes de mise en place d'un serveur X sur un second moniteur peuvent être ainsi résumées :

A chaque redémarrage : Un alias de shell permet d'automatiser ces tâches. Un script ne conviendrait pas puisqu'on a besoin de déterminer le numéro de la console courante. Voici mon alias (en C-shell) :
alias startxfb = "
setenv FRAMEBUFFER /dev/fb\!*;  # l'argument passe a l'alias est recupere
con2fb $FRAMEBUFFER /dev/$tty;  # positionne le pilote sur la console courante
fbset -fb $FRAMEBUFFER 1280x1024@62;  # Cf /etc/fb.modes
startx -- :\!* -bpp 16 vt0`echo $tty | cut -dy f 2`' # execution de X
"

Ces lignes correspondent au contenu de mon .cshrc aux commentaires près mais ils aident, avec les sauts de ligne, à en faciliter la lecture. Je fournis le numéro du pilote de mémoire vidéo comme argument à l'alias.

Si quelqu'un me fournit un équivalent pour bash, je l'incluerai ici. La commande tty vous fournira le nom de la console courante.

15.11 Remarques et problèmes

Fonctionnement avec xdm

Je n'ai pas encore trouvé comment passer au niveau 5 dans une configuration à deux adaptateurs avec un serveur sur le second moniteur ou sur les deux. Bien que l'ajout d'une ligne au fichier Xservers de xdm/gdm soit aisé, la contrainte de démarrer le serveur X depuis la console gérée par le pilote de mémoire vidéo interdit cette solution. Si quelqu'un a une idée, qu'il m'en fasse part afin que je puisse l'ajouter.

L'utilitaire x2x

x2x vous permet de passer d'un serveur X à l'autre lorsque vous atteignez le bord d'un écran. Aux dernières nouvelles, ce programme se trouvait à l'adresse suivante : http://ftp.digital.com/pub/DEC/SRC/x2x/>. La distribution Debian en propose un paquetage. Je n'ai pas eu l'occasion de l'essayer mais plusieurs utilisateurs ont fait part d'expériences réussies.

Autres commandes utiles

Il est bon de garder présente à l'esprit l'existence de certaines commandes quand on dispose de plusieurs adaptateurs (surtout quand on écrit des scripts). * "chvt" permet de passer d'une console virtuelle (VT) à une autre. * "openvt" exécute un programme dans une console différente. * "tty" renvoie le nom de la console courante.

Annexe A. Script cvtmode.m pour Octave

Notez le positionnement de bpp.

#!/usr/bin/octave -q
bpp = 16;
DCF = sscanf(argv(1,:), "%f");
HR  = sscanf(argv(2,:), "%f");
SH1 = sscanf(argv(3,:), "%f");
SH2 = sscanf(argv(4,:), "%f");
HFL = sscanf(argv(5,:), "%f");
VR  = sscanf(argv(6,:), "%f");
SV1 = sscanf(argv(7,:), "%f");
SV2 = sscanf(argv(8,:), "%f");
VFL = sscanf(argv(9,:), "%f");
pixclock = 1000000 / DCF;
left_margin = HFL - SH2;
right_margin = SH1 - HR;
hsync_len = SH2 - SH1;
# 3) vertical timings:
upper_margin = VFL - SV2;
lower_margin = SV1 - VR;
vsync_len = SV2 - SV1;
RR = DCF / (HFL * VFL) *1e6;
HSF = DCF / HFL * 1e3;
printf("mode \"%dx%d\"\n",HR,VR);
printf("   # D: %3.2f MHz, H: %3.2f kHz, V: %2.2f Hz\n", DCF, HSF, RR);
printf("   geometry %d %d %d %d %d\n", HR, VR, HR, VR, bpp);
printf("   timings %d %d %d %d %d %d %d\n", ...
 pixclock, left_margin, right_margin, ...
 upper_margin, lower_margin, ...
 hsync_len, vsync_len);
printf("endmode\n");

Annexe B. Script "cvtfile" en Shell Bourne

Le script Octave "cvtmode" est utilisé.

#!/bin/sh
# Shell script to convert XF86Config file to fb.modes file.
# Uses octave script cvtmode.m
if [ -z $1 ]; then
 FILE=/etc/X11/XF86Config
else
 FILE=$1
fi
i=1
LEN=`grep Modeline $FILE | wc -l`
while expr $i \< $LEN> /dev/null ;
do
 CURLINE=`grep Modeline $FILE | cut -d'"' -f 3-20 | head -$i | tail -1 `
 ./cvtmode.m $CURLINE
 echo " "
 i=`expr $i + 1`
done


Page suivantePage précédenteTable des matières