10.3. Utilisation du pilote frame buffer du noyau

Si par malheur votre carte graphique n'est gérée par aucun des pilotes de XFree86 (cas relativement exceptionnel), vous serez sans doute obligé d'utiliser le pilote vesa. Ce pilote permet d'utiliser toutes les cartes compatibles avec le standard VESA 2.0 (c'est-à-dire la plupart des cartes graphiques, mais il existe des exceptions notables).

Il existe une alternative à ce pilote, qui se base sur les fonctionnalités « frame buffer » du noyau de Linux. Cette fonctionnalité permet d'utiliser Linux complètement en mode graphique, en fournissant un accès linéaire direct à la mémoire vidéo de la carte graphique grâce au fichier spécial de périphérique /dev/fb0. Il existe un pilote XFree86 pour le frame buffer du noyau, qui permet donc de démarrer le serveur X en s'appuyant complètement sur le noyau. L'avantage du frame buffer du noyau est que même les consoles en mode texte feront leur affichage en mode graphique (cela est aussi un inconvénient du point de vue des performances). En revanche, vous ne pourrez pas changer de résolution une fois que le système aura démarré.

Pour accéder à la mémoire vidéo, le noyau se base également sur l'interface de programmation du standard VESA 2.0, qui est gérée par le BIOS de la plupart des cartes graphiques récentes. Cela signifie également que vous ne disposerez pas d'accélération matérielle en général, sauf pour quelques cartes graphiques courantes reconnues par le noyau.

10.3.1. Configuration du noyau et installation du pilote

La mise en œuvre du pilote pour le frame buffer se fait évidemment dans la configuration du noyau. Les options à activer sont toutes dans le menu « Console drivers ». En plus de l'option « VGA text console », vous devez impérativement activer « Video mode selection support ». Cette option vous permettra de choisir le mode VESA à utiliser lors du démarrage de l'ordinateur. Vous devrez également cocher l'option « Support for frame buffer devices (EXPERIMENTAL) » (cette option ne vous sera proposée que si vous avez validé l'option « Prompt for development and/or incomplete code/drivers » du menu « Code maturity level options »). Les options suivantes du gestionnaire du frame buffer du noyau devront également être activées :

Il faut ensuite vérifier que le fichier spécial de périphérique /dev/fb0 a été créé par le programme d'installation de votre distribution. Si ce n'est pas le cas, vous devez le créer à l'aide de la commande mknod. Le numéro de périphérique majeur de ce fichier est 29. Le numéro mineur à utiliser est le numéro du périphérique. Par exemple, le fichier spécial de périphérique /dev/fb0 porte les numéros 29 et 0, le fichier /dev/fb1 porte les numéros 29 et 1, etc. Ces fichiers sont tous de type caractère, la ligne de commande pour créer un de ces fichiers est donc la suivante :

mknod fbn c 29 n
n est le numéro du fichier spécial de périphérique à créer.

Il est également recommandé de créer un lien symbolique /dev/fb vers /dev/fb0 afin d'assurer la compatibilité avec de vieux programmes utilisant ce nom pour accéder au fichier spécial de périphérique du gestionnaire du frame buffer du noyau.

Une fois ces opérations réalisées, vous devez compiler le noyau et l'installer, en suivant la méthode décrite dans la partie décrivant la compilation du noyau. Lors du redémarrage du système, vous pourrez passer l'option suivante au noyau pour préciser le mode graphique VESA à utiliser :

vga=mode

mode est le numéro du mode graphique désiré. Les numéros valides sont indiqués dans le tableau donné ci-dessous :

Tableau 10-2. Numéros des modes graphiques VESA

CouleursRésolution
 640x480800x6001024x7681280x10241600x1200
256769771773775796
32768784787790793797
65536785788791794798
16,8M786789792795799

Si tout se passe correctement, votre système devrait démarrer dans le mode graphique indiqué et afficher le logo de Linux (un pingouin nommé « Tux », pour ceux qui ne le sauraient pas encore). Lorsque vous aurez déterminé le mode graphique qui vous convient, vous pourrez modifier le fichier de configuration de Lilo et spécifier le numéro de ce mode dans la ligne « vga=... ». De cette manière, votre système redémarrera automatiquement dans ce mode graphique.

10.3.2. Configuration du serveur X

Les manipulations précédentes n'ont pas grand intérêt si vous ne désirez travailler qu'avec la console. En effet, l'affichage en mode graphique est beaucoup plus lent que l'affichage en mode texte, et l'affichage du pingouin Tux au démarrage ne vous apportera pas grand chose. C'est pour cela que l'étape suivante est normalement de configurer le serveur X de XFree86 pour le pilote frame buffer, afin d'utiliser l'environnement graphique XWindow et son système de fenêtrage.

La configuration du serveur X est élémentaire. Il faut avant tout s'assurer que l'on dispose bien du pilote permettant au serveur X d'utiliser l'interface /dev/fb0. Ce pilote se nomme fbdev, et utilise un autre module spécifique au système d'exploitation nommé fbdevhw. Il faut ensuite modifier ou créer le fichier XF86Config pour utiliser ce pilote. Les seules sections à modifier pour utiliser le pilote frame buffer sont la section « Device » et la section « Screen ».

La section « Device » est réduite à sa plus simple expression, puisque tous les paramètres sont fixés par le mode VESA choisi au démarrage d'une part, et parce que le serveur X ne saurait pas les exploiter d'autre part. Il suffit donc simplement d'indiquer que le pilote à utiliser est le pilote fbdev, et de donner l'adresse de la carte vidéo sur le bus à l'aide du mot-clef « BusID » :

Section "Device"
    Identifier "Carte 1"
    Driver "fbdev"
    BusID  "PCI:1:5:0"
EndSection

Vous pourrez déterminer l'adresse de votre carte graphique à l'aide de la commande lspci, ou en demandant au serveur X de scanner les bus PCI en lui passant l'option -scanpci en paramètre :

XFree86 -scanpci

La section « Screen » est elle aussi très simplifiée, puisque le seul mode graphique utilisable est le mode choisi au démarrage de la machine. La liste des modes utilisables peut donc être franchement omise, ou se réduire à la valeur spéciale « default » :

Section "Screen"
    Device    "Carte 1"
    Monitor   "Moniteur 1"
    DefaultDepth 16
    SubSection "Display"
        Depth 16
        Modes "default"
    EndSubSection
EndSection

Notez qu'il est impératif que la profondeur de couleur de la sous-section « Display » soit la même que celle du mode VESA indiqué au démarrage. Prenez garde à ne pas utiliser une profondeur de couleur trop élevée, car cela dégraderait encore un peu plus les performances. Par ailleurs, comme aucun mode n'est spécifié dans la section « Screen », les lignes de mode des sections « Monitor » sont à présent facultatives. Ces sections peuvent donc être simplifiées également.

Une fois ces modifications réalisées, vous devrez pouvoir démarrer XWindow simplement avec la commande startx. Vous disposerez alors de toutes les fonctionnalités de XWindow, avec des performances quelques peu inférieures à celles que vous auriez avec un serveur X adapté à votre carte graphique. Il est conseillé de suivre l'actualité de XFree86 afin de savoir si un tel serveur est en cours de développement et, si oui, d'en récupérer une version finale dès que possible.