Cette page n'a pas encore d'étiquettes.
Apportez votre aide…

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'option UseInternalAGPGART dans la section [Device], ou si elle est existante mettez la à "no" :
Driver    "fglrx"
Option    "UseInternalAGPGART" "no"
EXTREMEMENT IMPORTANT : REDEMARREZ LA MACHINE !!!

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 !

Si ça ne suffit pas, on peut se reporter a ce lien en anglais : http://wiki.cchtml.com/index.php/Ubuntu_Gutsy_Installation_Guide. En résumé, si la commande : DISPLAY=:0 glxinfo | grep render renvoie "ATI renderer" c'est qu'il faut sans doute désinstaller xserver-xgl.

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)
La commande 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

Concerne uniquement les versions Ubuntu Dapper Drake et antérieure.

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.

Depuis Ubuntu Gutsy 7.10, lorque X plante, c'est une interface graphique qui prend la main. Il est ainsi possible de reconfigurer les options d'affichage directement avec la souris.

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
Id2ndR : j'utilise fglrx et non pas ati sur une X800 (sinon je n'ai pas de vidéo).

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
X11 s'écrit avec les chiffres "un", et non pas les lettres "l"

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

Pour réinitialiser, accédez à la console en faisant ctrl + alt + F2 puis tapez "reboot". Rebootez en recovery mode avec grub puis tapez :
sudo apt-get remove --purge xorg-driver-fglrx

FIXME 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

  • ati_problemes.1249746270.txt.gz
  • Dernière modification: Le 18/04/2011, 14:49
  • (modification externe)