Ceci est une ancienne révision du document !
Résolution des problèmes d'ordre général avec les cartes graphiques ATI
Informations sur les erreurs
Consultez la sortie de dmesg | grep fglrx. Vous trouverez les logs des messages d'erreurs dans les fichiers /var/log/kern.log et /var/log/Xorg.0.log. Ces informations peuvent être utiles aux personnes qui essaieront de vous aider.
AGP
Si votre fichier /var/log/Xorg.0.log
révèle des problèmes à l'initialisation de l'AGP :
- Editez votre fichier
/etc/modules
et mettez ceci en premier:
agpgart nvidia-agp # Ou bien le module selon votre chipset : intel-agp / via-agp / sis-agp fglrx
en supprimant la ligne fglrx si vous l'aviez ajoutée en fin de fichier.
- Ensuite dans votre fichier
/etc/X11/xorg.conf
, ajoutez l'optionUseInternalAGPGART
dans la section[Device]
, ou si elle est existante mettez la à"no"
:
Driver "fglrx" Option "UseInternalAGPGART" "no"
Le pilote ATI version 8.12.10 est disponible dans Breezy, il devrait résoudre ce problème et permettre une amélioration des performances.
Ecran noir au démarrage (usplash)
Si vous avez un écran noir pendant le démarrage (l'écran Ubuntu avec la barre orange qui avance) depuis que vous avez installé les pilotes propriétaires, il va falloir modifier légèrement la configuration de usplash : voir ATI Usplash et également les problèmes d'ordre général sur Usplash.
Ecran noir en sortie de veille
Pour ceux qui ont des problèmes avec Compiz activer, et ce à la sortie de veille, voila une solution : Source : http://github.com/techarcana/fglrx-support/tree/master
Pour faire simple : Dans / etc/pm/config.d/ créer un fichier 50compiz-fglrx-noclear avec ça dedans :
# This file is /etc/pm/config.d/50compiz-fglrx-noclear # Disable the builtin 00clear because we need to kill off all compiz # instances before it does a chvt HOOK_BLACKLIST=00clear
Dans /etc/pm /sleep.d/ créer un fichier 00compiz-fglrx, le rendre exécutable et copier ça dedans :
#!/usr/bin/python # This file is /etc/pm/sleep.d/00compiz-fglrx import os import sys import time import cPickle as pickle import tempfile import re from math import ceil from subprocess import Popen, PIPE, check_call, CalledProcessError # get the stdout from executing the command made up of elements of cmd_args def backquote(cmd_args): if type(cmd_args) is str: cmd_args = cmd_args.split() process = Popen(cmd_args, stdout=PIPE) out = process.communicate()[0].rstrip() if process.returncode != 0: raise CalledProcessError(process.returncode, cmd_args) return out def psinfo(pid, field): return backquote(('ps --no-headers -ww -o %s %s' % (field, pid)).split()) def proc(pid, part): return open('/proc/%s/%s' % (pid,part)).read().rstrip('\0').split('\0') def psenviron(pid): return dict( x.split('=',1) for x in proc(pid,'environ') if '=' in x) # Change the following to something like # # LOG_FILE_NAME='/home/dave/suspend.log' # # in order to see some debug output LOG_FILE_NAME=None logfile=None def log(*args): if not LOG_FILE_NAME: return global logfile if not logfile: logfile = open(LOG_FILE_NAME,'a') logfile.write(' '.join([str(a) for a in args]) + '\n') logfile.flush() class TimeOutError(Exception): pass def try_kill(pid, signal, timeout = 1.0, step = .01): os.kill(pid, signal) for x in range(int(ceil(timeout/step))): if not os.path.exists('/proc/%d' % pid): return time.sleep(step) raise TimeOutError, 'failed to kill process: %d in %d second(s)' % (pid,timeout) number = re.compile(r'\d*$') stat_fields = re.compile( r'\s+'.join([ r'(?P<pid>\d+)', r'\((?P<comm>.+)\)', r'(?P<state>[RSDZTW])', r'(?P<ppid>\d+)' ])) class NotCompiz(Exception): pass def compiz_real_info(pid): stat = stat_fields.match(open('/proc/%d/stat' % pid).read()) if stat.group('comm') != 'compiz.real': raise NotCompiz, 'continue' # we'll just move on to the next process ppid = int(stat.group('ppid')) return ppid, (psenviron(ppid), proc(ppid, 'cmdline'), psinfo(ppid,'user')) # Given recorded information about the parent processes of killed # compiz.real processes, "un-kill" them def restart_compiz(compiz_info): if compiz_info: log('restarting compiz') for pid, (env,cmd,user) in compiz_info.items(): log('user:', user, 'command:', cmd) # Ensure we have the necessary environment to re-launch the parent process if 'DISPLAY' in env and 'XAUTHORITY' in env and os.path.isfile(env['XAUTHORITY']): # If the parent didn't die when compiz.real was killed, kill the parent now try: try_kill(pid,15) except: pass try: check_call(['sudo', '-E', '-b', '-u', user] + cmd, env=env) except Exception, e: log('failed to relaunch') log(traceback.format_exc()) print >>sys.stderr, traceback.format_exc() else: log('required environment missing', env) def suspend(): # locate all parent processes of compiz.real commands all_pids = [int(f) for f in os.listdir('/proc') if number.match(f)] compiz_info = {} try: # Gather up all the info about the processes that launch compiz.real for pid in all_pids: try: ppid, info = compiz_real_info(pid) except: continue # Skip if not compiz.real or if already dead try_kill(pid, 15) # Kill off the compiz.real process compiz_info[ppid] = info # Remember how to restart its parent # write out everything we need to restart the compiz # processes and restore the current virtual terminal fd, pickle_file_name = tempfile.mkstemp('.pck', 'compiz-fglrx', '/var/run') pickle.dump((backquote('fgconsole'), compiz_info), open(pickle_file_name, 'w'),2) log('pickle saved in', pickle_file_name) # Keep a record of the name of the pickle file using # facilities from pm-utils. Using repr below ensures that # the filename is quoted in a way that should be # appropriate for the shell check_call([ 'sh', '-c', '. ${PM_FUNCTIONS} && savestate compiz-fglrx ' + repr(pickle_file_name)]) except: log('failure to suspend!') restart_compiz(compiz_info) raise # Now switch the virtual terminal as would have been done by the # 00clear hook. If done with compiz running, this kills resume log('switching to vt 63') check_call(['chvt', '63']) def resume(): # Get all the information we need to re-start pickle_file_name = backquote([ 'sh', '-c', '. ${PM_FUNCTIONS} && restorestate compiz-fglrx']) saved_console,compiz_info = pickle.load(open(pickle_file_name)) restart_compiz(compiz_info) # This is the functionality from the 00clear hook log('switching back to vt', saved_console) check_call(['chvt', str(saved_console)]) check_call(['deallocvt', '63']) # Try to make sure the screen wakes up and actually shows us the # password dialog. Without this we might need to move the mouse # to see it. Doesn't work, though; probably I need more # environment setup in order to be able to do this. # check_call(['xset','dpms','force','on']) # if we can't get rid of this file for any reason, it's not a # serious problem, so do it last. os.unlink(pickle_file_name) # The check for an argument in the next line is a convenience for # development, so we can import this file and not have it try to do # anything. if __name__ == '__main__' and len(sys.argv) > 1: log('=====================', backquote('date'), '==================') log('in ', ' '.join(sys.argv)) try: if sys.argv[1] in ('suspend','hibernate'): suspend() elif sys.argv[1] in ('resume','thaw'): resume() elif sys.argv[1] == 'help': # Nothing to say pass else: raise AssertionError, 'unknown argument %s' % sys.argv[1] except Exception, e: import traceback log(sys.argv[0]+':', traceback.format_exc()) # if anything failed, try to inhibit suspension. if sys.argv[1] in ('suspend','hibernate'): inhibit_file = os.environ.get('INHIBIT') if inhibit_file: log('inhibiting with', inhibit_file) open(inhibit_file,'a') raise
N'oubliez pas de rendre ce fichier executable !
Un grand merci techarcana : http://github.com/techarcana pour ce superbe job.
Problèmes avec certains jeux
Avec certains jeux basés sur Quake 3 (Tremulous, OpenArena, …),
vous pourrez également rencontrer quelques problèmes de contrôles au clavier (précédés d'une sorte de flash discret sur l'écran) ou encore un affichage pas très beau sous Planeshift. L'astuce pour résoudre ces problèmes consiste à ajouter dans le fichier xorg.conf
, section "Module" :
SubSection "extmod" Option "omit xfree86-dga" EndSubSection #Load "extmod"
N'oubliez pas de commenter/enlever le Load "extmod".
Applications utilisant Gstreamer
Par exemple Totem.
Si Totem affiche une erreur "Resource or device busy" dès qu'on le lance, il faut ajouter deux paramètres dans /etc/X11/xorg.conf, dans la section "Device" :
Option "VideoOverlay" "on" Option "OpenGLOverlay" "off"
J'ai trouvé cette réponse à mon problème sur un forum et ça marche. Mais j'avoue ne pas avoir creusé les deux options. Voir d'autres infos en français ici.
Mauvaises couleurs avec les applications utilisant Gstreamer
Si les couleurs de vos vidéos ne sont pas correctes par rapport à l'original, il suffit de modifier un paramètre dans gstreamer-properties.
Assurez-vous d'avoir installé le paquet gstreamer0.10-ffmpeg.
Lancez les propriétés de Gstreamer:
gstreamer-properties
Dans l'onglet Vidéo, parmi la liste des greffons de sortie par défaut, sélectionner Personnalisé
Dans la case Pipeline, remplacez le contenu par:
ffmpegcolorspace ! video/x-raw-yuv,format=(fourcc)YV12 ! xvimagesink
Vidéos ne s'affichant pas correctement (noir) Gstreamer
Lancez les propriétés de Gstreamer:
gstreamer-properties
Puis dans l'onglet vidéo changer "Autodetect" par "X windows system sans XV"
Accélération OpenGL ?
Vous avez bien le fglrx chargé en module mais n'avez toujours pas d'accélération OpenGl ? A la sortie de $ fglrxinfo on vous parle de mesa3d.org ? Exemple:
mickael@mickael-laptop:~$ fglrxinfo display: :0.0 screen: 0 OpenGL vendor string: Mesa project: www.mesa3d.org OpenGL renderer string: Mesa GLX Indirect OpenGL version string: 1.4 (2.1 Mesa 7.0.1)
Il va vous falloir établir un simple lien symbolique par :
sudo ln -s /usr/lib/dri /usr/lib/xorg/modules/dri
Pour que ça marche, il faudra redémarrer !
DRI ou accélération 3D
Si vous avez des problèmes relatifs au DRI ou à l'accélération 3D et que les lignes suivantes apparaissent dans votre fichier /var/log/Xorg.0.log
.
(WW) fglrx(0): Kernel Module version does *not* match driver. (EE) fglrx(0): incompatible kernel module detected - HW accelerated OpenGL will not work
Alors, vérifiez que le paquet linux-restricted-modules
contenant les modules non libres est bien installé pour votre noyau. Pour l'installer, vous pouvez utiliser la commande suivante :
sudo apt-get install linux-restricted-modules-$(uname -r)
uname -r
renvoie le numéro de version de votre noyau. Par défaut, il se peut que vous ayez une version de votre noyau qui ne soit pas optimisée, il est possible en ce cas d'installer un noyau mieux optimisé.
Droits d'accès
Si fglrxinfo vous indique bien les pilotes ATI mais uniquement en root, vérifiez que le chemin d'accès aux modules DRI soit accessibles par vos utilisateurs. Pour cela, indiquer que les utilisateurs du groupe "video" ont le droit d'y accéder :
# chown root:video /usr/X11R6/lib/modules/dri -R # chmod 750 /usr/X11R6/lib/modules/dri -R
ou
# chown root:video /usr/lib/xorg/modules/dri -R # chmod 750 /usr/lib/xorg/modules/dri -R
selon l'existence du dossier.
Noyaux et architecture
Tapez :
$ uname -a Linux ubuntu 2.6.15-20-k7 #1 SMP PREEMPT Tue Apr 4 19:26:13 UTC 2006 i686 GNU/Linux
Si vous avez un AMD64 comme moi, préférez le noyau k7 plutôt que le 686 : sans ça, j'avais pas d'openGl. Rendez-vous donc dans synaptic, faites une recherche sur la chaîne 2.6.15-20-k7 et cocher tout (sinon 2.6.15-20-686 ou 2.6.15-20-386 selon votre processeur et 2.6.15-20-k8 selon votre architecture) puis rebootez sur le bon et dernier noyau.
Reconfigurer X
Voila l'installation s'est bien passée mais le serveur X plante ou alors se lance avec une résolution de 320x200. Avant de reprendre le Cd pour tout installer, taper les commande qui suivent : Ouvrir d'abord une nouvelle session (ou terminal) CTRL+ALT+F1 par exemple ou F2 F3 etc… Taper votre nom d'utilisateur et votre mot de passe.
sudo killall gdm
Tue l'interface X si elle est lancée d'un autre terminal
sudo dpkg-reconfigure xserver-xorg
Lance l'interface de configuration de X.
Plus de vidéo
A noter que si la commande
sudo aticonfig --initial
suivi du redémarrage fait planter votre serveur X ou votre écran ("out of range"), préférez cette méthode (en mode rescue), inspirée de cette page, en conservant les paquets installés précédemment :
sudo dpkg-reconfigure xserver-xorg // reconfigure serveur X sudo vi /etc/X11/xorg.conf // editer fichier de configuration
et remplacer "vesa" ou "ati" par "fglrx", avant de redémarrer, afin d'utiliser vos nouveaux pilotes graphiques :
Section "Device" Identifier "ATI Technologies, Inc. RV350 AS [Radeon 9600]" Driver "vesa" // ligne à remplacer BusID "PCI:1:0:0" EndSection
Edit: Commentaire réellement utile?
De plus j'ai moi même une x800 (R430) et c'est exactement l'inverse de vos propos. Apres installation des pilotes propriétaires X plante au reboot et il n'y a pas d'accélération materiel.
Lancer X lorsque le pilote plante
(Testé avec une Ati x850 sur 64 Bit)
Si vous n'arrivez pas à lancer X (donc vous n'avez pas d'interface graphique), vous n'arrivez pas à installer les pilotes ati, et si vous n'êtes pas très à l'aise dans le shell, essayez cette solution temporaire :
- Lancer l'interface de configuration de X comme décrit dans le paragraphe précédent
- Sélectionner le pilote de serveur X nommé vesa au lieu du ati lors du 2ème écran.
- Terminer la configuration
- Lancer X
startx
Il se peut que cela vous permette de lancer un serveur X (sans accélération 3D mais fonctionnel) de manière à tenter d'autres méthodes avec une interface graphique.
Le pilote est installé sous Hardy Heron mais n'est pas utilisé
Si après avoir installé les pilotes propriétaires par le menu Administration, ou bien manuellement par le fichier run fourni par ATI, vous voyez MESA à la place d'ATI après un fgl_gears, ou encore dans le gestionnaire de périphériques propriétaire une icone rouge pour le pilote ATI (non utilisé), cette astuce peut fonctionner (mais si quelqu'un pourrait expliquer pourquoi ça marche….)
Dans le fichier /etc/modprobe.d/lrm-video, mettre en commentaire la ligne suivante :
#install fglrx /sbin/lrm-video fglrx $CMDLINE_OPTS
Raies rouges et/ou vertes juste avant le login
L'installation des pilotes propriétaires peut entraîner un bug très gênant. Lors du démarrage, le usplash s'affiche, la barre de chargement progresse jusqu'au trois quarts, puis l'affichage bascule sur un écran noir strié de raies rouges ou vertes en haut de l'écran, agrémentée de deux logos Ubuntu en bleu situés juste en-dessous des raies. Outre le côté artistique de la chose, cet écran ne présente pas grand intérêt, puisque tout est freezé (pas d'accès aux consoles, pas de login automatique…). Deux solutions s'offrent à vous : installer les pilotes libres RadeonHD, ou réinstaller les pilotes fglrx. (À savoir : les pilotes libres gèrent mal, voire pas du tout l'accélération 3D, mais sont par ailleurs très stables.) Commençons par quelques préliminaires communs aux deux solutions :
Préliminaires
Rester devant un écran freezé ne fera certainement pas avancer le problème. Redémarrez donc votre PC, puis sélectionnez le démarrage en "Recovery Mode" grâce à l'utilitaire Grub. Un menu vous laissera le choix entre plusieurs options. Choisissez Drop to root shell prompt with networking afin de démarrer une console en mode root avec connexion Internet. Lorsque la console est prête, commencez par désinstaller tout ce qui a quelque-chose à voir avec fglrx grâce à la commande :
apt-get remove fglrx*
Si vous avez installé les pilotes Catalyst grâce aux binaires du sites ATI, il suffit de lancer le script de désinstallation :
sh /usr/share/ati/fglrx-uninstall.sh
Passons à la suite.
Installation des pilotes RadeonHD
Si vous avez opté pour les pilotes libres, voici la démarche à suivre. Installez les pilotes :
apt-get install xserver-xorg-video-radeonhd
Lorsque l'installation est terminée, appuyez sur [Ctrl] et D pour quitter la console et revenir au menu. Choisissez cette fois ci Try to auto repair graphic problems. Lorsque l'opération est finie, revenez sur la console root (avec ou sans connexion Internet, au choix), puis éditez xorg.conf :
nano /etc/X11/xorg.conf
Dans la section "Device", repérez la ligne Driver et remplacez le contenu entre guillemets par radeonhd. Tapez [Ctrl] X pour quitter, acceptez la sauvegarde, puis quitter à nouveau la console pour revenir sur le menu. Cette fois, choisissez l'option Resume normal boot. Tout devrait fonctionner.
Réinstallation des pilotes fglrx
Cette solution est la plus simple. Installez simplement les pilotes fglrx grâce à la commande :
apt-get install xorg-driver-fglrx
Appuyez sur [Ctrl] D pour quitter la console, puis choisissez l'option Resume normal boot. Tout est réparé.
Cas de récidive
Si l'une des deux solutions précédentes n'a pas fonctionné, il faudra peut-être réinstaller totalement xorg. Tapez ceci dans la console (en mode root, avec connexion Internet) :
apt-get autoremove xserver-xorg apt-get install xserver-xorg
Ceci peut être suivi d'un xfix dans le menu du Recovery Mode.
Cas de multi-récidive
Si fglrx ne semble pas décidé à vous laisser démarrer correctement votre PC, et qu vous ne souhaitez pas utiliser les pilotes RadeonHD, suivez ce fil de discussion et attendez une solution (qui sera écrite dans ce wiki dès que trouvée).
Gel de GDM / KDM à la déconnexion ou l'arrêt
sudo apt-get remove --purge xorg-driver-fglrx
A réordonner.
Voir :
Problèmes divers
installation du pilote pour ati 9800 Pro : http://forum.ubuntu-fr.org/viewtopic.php?id=248679
Problème minimisation des fenêtres (ati+compiz) :http://forum.ubuntu-fr.org/viewtopic.php?pid=2750364#p2750364