<p class="spip">On peut tout d’abord se demander s’il est judicieux d’utiliser un driver propriétaire sur un système qui se veut entièrement libre (voir le <a href="http://www.fr.debian.org/social_contract" class="spip_out">contrat social de Debian </a>). La réponse dépend bien évidemment de vous, ce driver permettant essentiellement l’accélération graphique, l’utilisation de la sortie télé et la configuration de deux écrans.</p>

<p class="spip">Nous allons donc compiler et installer les drivers propriétaires nVidia fournis par Debian.</p>

<p class="spip">Nous détaillerons deux méthodes selon que :
<br /></p>
<li> le noyau n’a jamais été recompilé (noyau par défaut) ;
<br /><li> le noyau a été recompilé localement (noyau local).
<p class="spip">NOTES sur les commandes shell :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
l'indicateur "#" signifie que le commande est à exécuter sous root<br />
<br />
l'indicateur "$" signifie que le commande est à exécuter sous<br />
l'utilisateur normal<br />
</code></div>
<h2>Noyau par défaut</h2>
<p class="spip">Si vous utilisez le noyau par défaut, vous avez le choix entre :
<br /></p>
<li> mettre à jour le noyau ;
<br /><li> ne pas mettre à jour le noyau.
<p class="spip">Notez que la mise à jour du noyau est une bonne idée mais dépend de votre connexion internet. Si vous choisissez de pas mettre à jour le noyau passer directement à l’étape "Installation des sources".</p>

<h3>Mise à jour du noyau</h3>
<p class="spip">La mis à jour du noyau dépend essentiellement de votre architecture, vous devez donc  vous renseigner sur celle-ci.</p>

<p class="spip">TODO : [<a href="#nb1" name="nh1" id="nh1" class="spip_note" title='[1] un lien sur les différentes architectures' >1</a>]</p>

<p class="spip">Nous admettrons que l’architecture est un pentium IV ou compatible 32bits (i686).</p>

<p class="spip">Nous allons dans un premier temps rechercher l’image puis l’installer :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'>$ aptitude search kernel-image (architecture)
# aptitude install kernel-image-2.6.12-1-i686</textarea></div></form>
<p class="spip">Une fois l’installation effectuée, redémarrer afin d’utiliser votre nouveau noyau et ainsi vérifier que votre système le supporte.</p>

<h3>Installation des sources du driver</h3>
<p class="spip">Cette phase est relativement simple :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># aptitude install nvidia-kernel-source nvidia-kernel-common</textarea></div></form>
<p class="spip">Si vous ne trouvez pas de paquet candidat, mettez à jour vos sources apt en ajoutant éventuellement une <a href="http://www.apt-get.org/" class="spip_out">source non officielle </a>.</p>

<h3>Configuration des entêtes</h3>
<p class="spip">Si vous utilisez le noyau par défaut de la distribution, il faut d’abord se renseigner sur sa version :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'>$ uname -r</textarea></div></form>
<p class="spip">Exemple :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
$ uname -r<br />
2.6.12-1-686<br />
</code></div>
<p class="spip">Dans l’exemple, la version du noyau est <code class='spip_code' dir='ltr'>2.6.12-1-686</code>.</p>

<p class="spip">Nous allons maintenant installer les entêtes du noyau utilisé.</p>

<p class="spip">Note : les noms des entêtes et des sources du noyau ont changé depuis la version  <code class='spip_code' dir='ltr'>2.6.12</code>. Donc si vous cherchez :
<br /></p>
<li> les entêtes pour les versions antérieures à <code class='spip_code' dir='ltr'>2.6.12</code>, le nom sera du type <code class='spip_code' dir='ltr'>kernel-headers-`uname -r`</code> ;
<br /><li> les entêtes pour les versions égales ou postérieures, le nom sera du type <code class='spip_code' dir='ltr'>linux-headers-`uname -r`</code>.
<p class="spip">Pour la suite, il faudra tenir compte de la version de votre noyau, lors de la configuration des variables d’environnements.</p>

<p class="spip">Merci à <a href="mailto:tnorth@bluewin.ch" class="spip_out">TNorth</a> pour avoir souligné le problème.</p>

<p class="spip">Pour les sources, la règle est la même en substituant <code class='spip_code' dir='ltr'>-source-</code> à <code class='spip_code' dir='ltr'>-headers-</code>.</p>

<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'>$ aptitude search linux-headers `uname -r`</textarea></div></form>
<p class="spip">Exemple :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
$ aptitude search linux-headers `uname -r`<br />
linux-headers-2.6.12-1-686 - Architecture-specific header files for Linux kernel 2.6.12 on PPro/Celeron/PII/PIII/P4 machines<br />
linux-headers-2.6.12-1-686-smp - Architecture-specific header files for Linux kernel 2.6.12 on PPro/Celeron/PII/PIII/P4 SMP machines<br />
</code></div>
<p class="spip">Installer ensuite le paquet qui correspond à votre version de noyau :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># aptitude install linux-headers-2.6.12-1-686</textarea></div></form>
<h3>Noyau local</h3>
Si vous avez recompilez vous-même votre noyau, vous devez simplement vérifiez que le lien symbolique <code class='spip_code' dir='ltr'>/usr/src/linux</code> pointe bien vers les sources que vous avez utisez.
<p class="spip">TODO : [<a href="#nb2" name="nh2" id="nh2" class="spip_note" title='[2] liens vers la compilation du noyau' >2</a>]</p>

<h3>Variables d’environnement</h3>
<p class="spip">À partir de cette étape, vous devez effectuer les commandes suivantes dans le même terminal.</p>

<p class="spip">Vous devez déclarer deux variables d’environnement :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># export KVERS=`uname -r`</textarea></div></form>
<p class="spip">Suivant votre noyau, il faut aussi déclarer les entêtes :
<br /></p>
<li> soit du noyau par défaut de version antérieure à 2.6.12 :
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># export KSRC=/usr/src/kernel-headers-`uname -r`</textarea></div></form>
<li> soit du noyau par défaut de version postérieure ou égale à 2.6.12 :
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># export KSRC=/usr/src/linux-headers-`uname -r`</textarea></div></form>
<li> soit du noyau local :
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># export KSRC=/usr/src/linux</textarea></div></form>
<h3>Compilation du driver</h3>
<p class="spip">Nous allons maintenant décompresser et compiler le driver :</p>

<li> décompression des sources :
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'># cd /usr/src/
# tar xvzf nvidia-kernel-source.tar.gz</textarea></div></form>
<li> compilation des sources :
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'># cd modules/nvidia-kernel
# debian/rules binary_modules</textarea></div></form>
<p class="spip">Normalement, vous devriez avoir un paquet debian dans le répertoire <code class='spip_code' dir='ltr'>/usr/src/modules</code>.</p>

<h3>Installation du driver</h3>
<p class="spip">Une étape simple, il faut installer le driver et vérifier les dépendances :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'># cd /usr/src/modules
# dpkg -i nvidia-kernel-`uname -r`*deb</textarea></div></form>
<p class="spip">Vérifions maintenant que tout va bien :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># depmod -a</textarea></div></form>
<p class="spip">Si depmod ne génère pas d’erreur, alors passer à l’étape suivante, sinon, 
vous n’avez peut-être pas redémarrer votre ordinateur après avoir mis à jour l’image du noyau, si c’est le cas, enlever le paquet (<code class='spip_code' dir='ltr'># dpkg -r nvidia-kernel-`uname -r`*deb</code>) redémarrer et reprennez à l’étape "Variables d’environnement".</p>

<p class="spip">TODO : [<a href="#nb3" name="nh3" id="nh3" class="spip_note" title='[3] liens vers réparer les dépendances' >3</a>]</p>

<h3>Installation du driver GLX</h3>
<p class="spip">Vérifier d’abord que le serveur graphique est bien installer :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'># aptitude search xserver-xorg
i   xserver-xorg                    - the X.Org X server</textarea></div></form>
<p class="spip">Ensuite, l’étape est assez simple :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># aptitude install nvidia-glx nvidia-glx-dev</textarea></div></form>
<h3>Chargement automatique du driver</h3>
<p class="spip">Pour que votre driver fonctionne, il faut qu’il soit charger en tant que module dans le noyau. Pour le faire de manière automatique, créez le fichier <code class='spip_code' dir='ltr'>/etc/modprobe.d/nvidia</code> et ajoutez :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'>alias /dev/nvidia* nvidia
alias char-major-195* nvidia</textarea></div></form>
<p class="spip">Ensuite, mettez à jour les modules :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># update-modules</textarea></div></form>
<p class="spip">Il ne vous reste plus qu’à déclarer au système l’utilisateur quel utilisateur a le droit d’utiliser l’accélaration graphique (ici <code class='spip_code' dir='ltr'>bibi</code>) :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># adduser bibi video</textarea></div></form>
<h4>Règles supplémentaires pour les noyaux 2.6.<strong class="spip">14</strong></h4>
<p class="spip">Pour les noyaux 2.6.14 (et 2.6.13), les entrées <code class='spip_code' dir='ltr'>/dev/nvidia*</code> et <code class='spip_code' dir='ltr'>/dev/nvidiactl</code> disparaissent lors d’un reboot. Une solution (temporaire) est d’ajouter une règle udev (si vous l’utilisez évidemment).
Tout d’abord, il faut créer un fichier /etc/udev/nvidia.rules contenant :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
# vim /etc/udev/nvidia.rules<br />
</code></div>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'>KERNEL="nvidia[0-9]*",  NAME="%k"
KERNEL="nvidiactl", NAME="%k"</textarea></div></form>
<p class="spip">Ensuite, il faut créer un lien symbolique ainsi :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
# cd /etc/udev/rules.d/<br />
# ln -s ../nvidia.rules 000_nvidia.rules<br />
</code></div>
<p class="spip">Le <code class='spip_code' dir='ltr'>000_</code> assure que cette règle sera lue avant les autres.</p>

<p class="spip">NOTE : l’auteur décline toute responsabilité quant à l’utilisation de cette règle (Disons que chez bibi, elle marche).</p>

<p class="spip">Voili, vous devez relancez votre machine avant de passer à la suite.</p>

<p class="spip">NOTE : vous devrez recompiler votre driver si vous changez de noyau.</p>

<h3>Utiliser le driver</h3>
<p class="spip">Il faut maintenant déclarer au serveur X d’utiliser le nouveau driver :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'># dpkg-reconfigure xserver-xorg</textarea></div></form>
<p class="spip">et choisissez "nvidia" lorsqu’il vous demande de sélectionner le driver.</p>

<p class="spip">Pour les modules :</p>

<li> Sélectionnez les modules du serveur <code class='spip_code' dir='ltr'>X.Org</code> chargés par défaut : ne modifiez pas la liste, sauf pour trois modules importants qui doivent être chargés ou pas selon les cas (ils concernent tous l’accélération 3D) :
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
 Driver nvidia:         dri:non        GLX:oui        GLcore:non<br />
</code></div>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
Mettre une section "Files" de référence dans la configuration ? <br />
</code></div>
<p class="spip">Répondez Oui.</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
Mettre une section "DRI" de référence dans la configuration ? : <br />
</code></div>
<p class="spip">répondez Non.</p>

<p class="spip">NOTE : si vous êtes suffisament à l’aise avec la manipulation de fichier de configuration, vous pouvez faire ces changements directement dans le fichier de configuration du serveur <code class='spip_code' dir='ltr'>X</code> :
<br /></p>
<li> <code class='spip_code' dir='ltr'>X.Org</code> : <code class='spip_code' dir='ltr'>/etc/X11/xorg.conf</code> ;
<br /><li> <code class='spip_code' dir='ltr'>XFree86</code> : <code class='spip_code' dir='ltr'>/etc/X11/XF86Config-4</code>.
<p class="spip">N’oubliez pas de faire une sauvegarde de l’ancien avant ;o).</p>

<h3>Relancer le serveur X</h3>
<p class="spip">Quitter votre session, et une fois à l’écran de démarrage : utilisez la combinaison de touche : "Ctrl-Alt + Ret.Arr"</p>

<p class="spip">Si tout va bien, le serveur devrait se relancer sans problème, vous pouvez alors tester l’accélération graphique ainsi :</p>

<p class="spip">tester d’abord sa présence :</p>
<form action="/" method="get"><div><textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'>$ glxinfo | grep direct</textarea></div></form>
<p class="spip">Si vous avez la ligne :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
$ glxinfo | grep direct<br />
direct rendering: Yes<br />
</code></div>
<p class="spip">Vous pouvez lancer <code class='spip_code' dir='ltr'>glxgears</code> pour tester l’affichage.</p>

<p class="spip">Pour finir, quelques liens vers des méthodes plus propres :
<br /></p>
<li> sur le <a href="http://wiki.debian.org/NvidiaHowTo" class="spip_out">Wiki Debian </a> ;
<br /><li> sur le site <a href="http://www.andesi.org/index.php?node=83" class="spip_out">Andesi </a>.
<p class="spip">SOURCES : cet article est la traduction de <a href="http://www.members.tripod.com/~saneous/debiansargenvidia.html" class="spip_out">saneous </a>
 avec des apports de <a href="http://people.via.ecp.fr/~alexis/formation-linux/xfree.html#AEN5747" class="spip_out">Formation GNU/Linux </a> et de <a href="http://permalink.gmane.org/gmane.org.user-group.linux.france.nantes/951" class="spip_out">ce poste </a> pour la rustine udev du noyau 2.6.14.</p>

<p class="spip">NOTE : configuration utilisée dans cet article :</p>

<p class="spip">OS :
<br /></p>
<li> Noyau : 2.6.12-686 (recompilé) ; 
<br /><li> Distribution : Debian Testing ;
<br /><li> Serveur X : X.Org 6.8.2 ;
<br /><li> Driver nVidia : nvidia 1.0-7174.
<p class="spip">Matériel
<br /></p>
<li> Processeur : P4 ;
<br /><li> Carte vidéo : nVidia GForce4 TI 4200.