Nvidia API ne correspond pas

27

J'avais prévu une journée de détente avec Portal 2 mais au démarrage de Steam (pour la première fois depuis deux semaines), j'ai été accueilli avec le message suivant dans le terminal:

Error: API mismatch: the NVIDIA kernel module has version 270.41.19,
but this NVIDIA driver component has version 270.41.06.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.

Je vais avouer que je ne sais pas vraiment de quoi il parle quand il est dit pilote. La verion de nvidia-current est 270.41.19 . Je pensais que que était le pilote et le module, tout en un.

J'utilise le PPA X-SWAT et j'ai noté que le package nvidia-settings a été augmenté à 275.09.07 . Comme il ne s'agit que d'une application de paramètres, je ne pense pas que cette incompatibilité ait quelque chose à voir avec cela. Ce n'est pas la même version que le problème décrit.

Je préfère ne pas retourner au pilote Nvidia standard car il est plus que stable sur ma GTX580. J'accepterais une réponse qui prend la configuration manuelle et la recompile quand le noyau recompile (c.-à-d. Un peu de magie DKMS) mais cela doit fonctionner. Je ne veux pas revenir en mode texte chaque fois que je redémarre après une mise à niveau du noyau.

Modifier: Minecraft fonctionne sans une seule plainte concernant les versions des pilotes. Penumbra meurt avec à peu près la même erreur en entrant dans un jeu.

Modifier: voici ce que je traite en termes de fichiers 32 bits. Ils semblent tous être à la bonne version.

ls -l /usr/lib32/nvidia-current/ | awk '{ print  " "  " "  }'

libcuda.so -> libcuda.so.270.41.19
libcuda.so.1 -> libcuda.so.270.41.19
libcuda.so.270.41.19  
libGL.la  
libGL.so -> libGL.so.1
libGL.so.1 -> libGL.so.270.41.19
libGL.so.270.41.19  
libnvcuvid.so -> libnvcuvid.so.1
libnvcuvid.so.1 -> libnvcuvid.so.270.41.19
libnvcuvid.so.270.41.19  
libnvidia-cfg.so -> libnvidia-cfg.so.1
libnvidia-cfg.so.1 -> libnvidia-cfg.so.270.41.19
libnvidia-cfg.so.270.41.19  
libnvidia-compiler.so -> libnvidia-compiler.so.1
libnvidia-compiler.so.1 -> libnvidia-compiler.so.270.41.19
libnvidia-compiler.so.270.41.19  
libnvidia-glcore.so.270.41.19  
libnvidia-ml.so -> libnvidia-ml.so.1
libnvidia-ml.so.1 -> libnvidia-ml.so.270.41.19
libnvidia-ml.so.270.41.19  
libnvidia-tls.so.270.41.19  
libnvidia-wfb.so.1 -> libnvidia-wfb.so.270.41.19
libnvidia-wfb.so.270.41.19  
libOpenCL.so -> libOpenCL.so.1
libOpenCL.so.1 -> libOpenCL.so.1.0
libOpenCL.so.1.0 -> libOpenCL.so.1.0.0
libOpenCL.so.1.0.0  
libXvMCNVIDIA_dynamic.so.1 -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so.1 -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so.270.41.19  

Modifier 2: J'ai peut-être trouvé quelque chose.

En cherchant dans /usr/lib32/ correct (pas dans le sous-répertoire nvidia-current ), j'ai trouvé ce qui suit:

ls -l /usr/lib32/ | awk '{ print  " "  " "  }' | grep 270

libcuda.so.1 -> libcuda.so.270.41.06
libcuda.so.270.41.06  
libGL.so.1 -> libGL.so.270.41.06
libGL.so.270.41.06  
libnvidia-compiler.so.270.41.06  
libnvidia-glcore.so.270.41.06  
libnvidia-tls.so.270.41.06  
libvdpau.so.1 -> libvdpau.so.270.41.06
libvdpau.so.270.41.06  
libvdpau_trace.so -> vdpau/libvdpau_trace.so.270.41.06

Pour une raison quelconque, /usr/lib32/nvidia-current/ est la bonne version, mais il y a une charge de /usr/lib32/ qui pourrait ruiner la fête.

Edit 3: Echec de la recherche du package auquel appartiennent ces fichiers:

find /usr/lib32 -iname '*270.41.06*' -exec dpkg -S "{}" \;

dpkg-query: no path found matching pattern /usr/lib32/libnvidia-compiler.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libGL.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/vdpau/libvdpau_nvidia.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/vdpau/libvdpau_trace.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libvdpau.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/tls/libnvidia-tls.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libnvidia-tls.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libcuda.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libnvidia-glcore.so.270.41.06.

Avez-vous des astuces pour gérer ces versions brisées? Supprime-les? Supprimer puis lien symbolique vers ./nvidia-current/ versions?

    
posée Oli 25.06.2011 - 10:01
la source

8 réponses

14

En découvrant qu’il y avait beaucoup de vieux fichiers dans / usr / lib32 /, je les ai déplacés avec la commande suivante:

sudo find /usr/lib32 -iname '*270.41.06*' -exec mv {} {}.old \;

Et redémarré X. Cela a tout cassé en 3D. Huzzah. En utilisant une recommandation précédente, je pouvais voir qu'il y avait quatre liens rompus:

ls -l /usr/lib32/ | awk '{ print  " "  " "  }' | grep 270

libcuda.so.1 -> libcuda.so.270.41.06
libGL.so.1 -> libGL.so.270.41.06
libvdpau.so.1 -> libvdpau.so.270.41.06
libvdpau_trace.so -> vdpau/libvdpau_trace.so.270.41.06

Plutôt que de remplacer manuellement les liens de quatre fichiers, je suis allé chez Elrond, Lord of Rivendell et lui ai demandé de mettre en place une communauté capable de piéger Morhdorh, de monter à Mount Doom et par cela je veux dire nous tous) et dans les ténèbres nous lient.

Assez de ça. Voici la seule commande:

ls -l /usr/lib32/ | awk '{ print  " "  " "  }' | grep 270 | cut -d' ' -f1 | xargs -l1 sudo bash -c "rm /usr/lib32/$0 && ln -s /usr/lib32/nvidia-current/$0 /usr/lib32/$0"

N'est-ce pas spectaculaire? Et ça a marché. J'ai maintenant 4 nouveaux liens symboliques brillants:

ls -l /usr/lib32/ | awk '{ print  " "  " "  }' | grep '/nvidia-current'

libcuda.so.1 -> /usr/lib32/nvidia-current/libcuda.so.1
libGL.so.1 -> /usr/lib32/nvidia-current/libGL.so.1
libOpenCL.so -> nvidia-current/libOpenCL.so
libvdpau.so.1 -> /usr/lib32/nvidia-current/libvdpau.so.1
libvdpau_trace.so -> /usr/lib32/nvidia-current/libvdpau_trace.so

J'ai ensuite vérifié si tout avait fonctionné. Avant de redémarrer, je pensais que je devrais vérifier pour voir si les liens étaient corrects:

ls -l /usr/lib32/ | awk '{ print  " "  " "  }' | grep '/nvidia-current' | cut -d' ' -f3 | xargs file

/usr/lib32/nvidia-current/libcuda.so.1:      symbolic link to 'libcuda.so.270.41.19'
/usr/lib32/nvidia-current/libGL.so.1:        symbolic link to 'libGL.so.270.41.19'
/usr/lib32/nvidia-current/libvdpau.so.1:     ERROR: cannot open '/usr/lib32/nvidia-current/libvdpau.so.1' (No such file or directory)
/usr/lib32/nvidia-current/libvdpau_trace.so: ERROR: cannot open '/usr/lib32/nvidia-current/libvdpau_trace.so' (No such file or directory)

Génial. La méga-commande ne faisait donc que deux liens. Après avoir regardé un peu plus loin, il semble que les fichiers libvdpau vivent réellement dans /usr/lib32/nvidia-current/vdpau/ . Pas de soucis à propos de cette période:

sudo rm /usr/lib32/libvdpau{,_trace}.so*
sudo ln -s /usr/lib32/{nvidia-current/vdpau/,}libvdpau.so*
sudo ln -s /usr/lib32/{nvidia-current/vdpau/,}libvdpau_trace.so*

ls -l /usr/lib32/ | awk '{ print  " "  " "  }' | grep '/nvidia-current' | cut -d' ' -f3 | xargs file

/usr/lib32/nvidia-current/libcuda.so.1:                      symbolic link to 'libcuda.so.270.41.19'
/usr/lib32/nvidia-current/libGL.so.1:                        symbolic link to 'libGL.so.270.41.19'
/usr/lib32/nvidia-current/vdpau/libvdpau.so.270.41.19:       ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib32/nvidia-current/vdpau/libvdpau_trace.so.270.41.19: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped

Au moins, ils sont correctement liés (un peu mal). Temps de test.

Edit: Cela a fonctionné mais apprendre de ma lutte: restez simple.

    
réponse donnée Oli 25.06.2011 - 19:37
la source
17

Faire ce qui suit résout le problème pour moi sur Ubuntu 12.04 64bit avec le noyau 3.0.29. J'espère que ça aide.

sudo apt-get purge nvidia-current
sudo apt-get install nvidia-current
    
réponse donnée gsbabil 27.08.2012 - 10:56
la source
7

il suffit aussi de faire ceci:

$ dpkg --get-selections | grep nvidia

nvidia-common                   install
nvidia-current                  install
nvidia-current-updates              install
nvidia-experimental-x...            install
nvidia-settings                 install
nvidia-settings-updates             install

et ensuite:

$ sudo apt-get purge nvidia-experimental-x...
...
$ sudo reboot

tout va bien!

    
réponse donnée shgnInc 16.03.2013 - 11:14
la source
7

J'ai eu ce problème une fois, et il est étonnamment facile à corriger.

Ce qui suit est basé sur la mémoire fragmentée, alors faites attention!
Tout d'abord, vous devez voir que les bibliothèques nvidia dans / usr / lib32 / match:

/usr/lib32/libOpenCL.so  
/usr/lib32/nvidia-current  
/usr/lib32/nvidia-current/libGL.la  
/usr/lib32/nvidia-current/libGL.so  
/usr/lib32/nvidia-current/libGL.so.1  
/usr/lib32/nvidia-current/libGL.so.270.41.06  
/usr/lib32/nvidia-current/libOpenCL.so  
/usr/lib32/nvidia-current/libOpenCL.so.1  
/usr/lib32/nvidia-current/libOpenCL.so.1.0  
/usr/lib32/nvidia-current/libOpenCL.so.1.0.0  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so.1  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so.270.41.06  
/usr/lib32/nvidia-current/libXvMCNVIDIA_dynamic.so.1  
/usr/lib32/nvidia-current/libcuda.so  
/usr/lib32/nvidia-current/libcuda.so.1  
/usr/lib32/nvidia-current/libcuda.so.270.41.06  
/usr/lib32/nvidia-current/libnvcuvid.so  
/usr/lib32/nvidia-current/libnvcuvid.so.1  
/usr/lib32/nvidia-current/libnvcuvid.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-cfg.so  
/usr/lib32/nvidia-current/libnvidia-cfg.so.1  
/usr/lib32/nvidia-current/libnvidia-cfg.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-compiler.so  
/usr/lib32/nvidia-current/libnvidia-compiler.so.1  
/usr/lib32/nvidia-current/libnvidia-compiler.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-glcore.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-ml.so  
/usr/lib32/nvidia-current/libnvidia-ml.so.1  
/usr/lib32/nvidia-current/libnvidia-ml.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-tls.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-wfb.so.270.41.06  
/usr/lib32/nvidia-current/tls  
/usr/lib32/nvidia-current/tls/libnvidia-tls.so.270.41.06  
/usr/lib32/nvidia-current/vdpau  
/usr/lib32/nvidia-current/vdpau/libvdpau.so.270.41.06  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so.1  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so.270.41.06  
/usr/lib32/nvidia-current/vdpau/libvdpau_trace.so.270.41.06  
/usr/lib32/vdpau 

Selon ce que vous avez décrit, ils ne correspondent probablement pas à ceux-ci. Si tel est le cas, vous devez les supprimer (utilisez avec précaution un gestionnaire de fichiers, n'essayez pas de rm -rf !!!!!!!!! ), puis réinstallez nvidia- en cours :).
Cela devrait vous donner les bonnes versions des bibliothèques et vous donner un système fonctionnel.

    
réponse donnée RolandiXor 25.06.2011 - 16:33
la source
4

J'ai eu ce problème qui affectait mon lanceur SWTOR dans wine. En lisant ce qui précède, j'ai décidé d'essayer et de faire les choses via l'interface utilisateur d'Ubuntu. Voici la solution simple qui a fonctionné pour moi;

Supprimez et réinstallez les pilotes supplémentaires via l'interface utilisateur:

  1. Aller au système - & gt; Administration - & gt; Pilotes supplémentaires
  2. Sélectionnez le pilote graphique accéléré NVIDIA et appuyez sur le bouton "Supprimer". NE PAS RÉINITIALISER IMMÉDIATEMENT APRÈS.
  3. Une fois supprimé, sélectionnez le même pilote et cliquez sur "activer".
  4. Maintenant, redémarrez.
  5. Doit être corrigé.
réponse donnée Erik Madsen 24.04.2012 - 22:53
la source
3

Après quelques tests, j'ai trouvé que les paquets:

nvidia-current
nvidia-304
nvidia-settings
nvidia-settings-304

fonctionne pour tous les noyaux 3.2.0- * et 3.8.0 - *,

tandis que les packages:

nvidia-current-updates
nvidia-experimental-304
nvidia-304-updates
nvidia-settings-updates
nvidia-settings-experimental-304
nvidia-settings-304-updates
nvidia-319
nvidia-experimental-310
nvidia-319-updates
nvidia-settings-319
nvidia-settings-experimental-310
nvidia-settings-319-updates

ne fonctionne que pour le noyau 3.8.0- *.

Ubuntu jockey recommande toujours la version 319 également lorsque le noyau 3.2.0- * est uniquement présent. Donc, un bug ici.

En plus des commandes:

$ sudo apt-get purge nvidia-current
$ sudo apt-get install nvidia-current

ou

$ sudo dpkg-reconfigure nvidia-current

installez le pilote pour une seule version du noyau pour chaque version mineure et supprimez-le pour tous les autres.

Donc, dans mon cas, les noyaux suivants sont installés:

3.8.0-32-generic
3.2.0-55-generic-pae
3.2.0-55-generic
3.2.0-54-generic-pae
3.2.0-54-generic
3.2.0-53-generic-pae
3.2.0-53-generic
3.2.0-52-generic-pae
3.2.0-52-generic
3.2.0-51-generic-pae
3.2.0-51-generic
3.2.0-49-generic-pae
3.2.0-49-generic

J'ai le pilote uniquement pour:

3.8.0-32-generic
3.2.0-55-generic-pae

lors du démarrage avec les autres noyaux, les résultats du pilote ne sont pas installés.

Il me semble que quelque part dans le paquet il y a une mauvaise indication pour construire et installer pour certains noyaux seulement.

Partout, en lançant la commande suivante, corrigez la situation:

$ sudo dkms install nvidia-304/304.88 -k 3.8.0-32-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-55-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-55-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-54-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-54-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-53-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-53-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-52-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-52-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-51-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-51-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-49-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-49-generic-pae

jusqu'à ce que le prochain apt-get installe nvidia-current ou reconfigure

Thread: Mise à jour du pilote Nvidia - versions mixtes de 304.88 et 319.32 est liée à la même chose, mais je n'avais pas assez de crédit pour poster là-bas.

    
réponse donnée efa 24.10.2013 - 18:29
la source
1

Cela m’est arrivé après l’installation du dernier pilote expérimental Nvidia. Je voulais toujours essayer le dernier pilote si possible au lieu de revenir à un pilote plus ancien, alors c'est ce qui a fonctionné pour moi:

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot
    
réponse donnée bmaupin 25.12.2013 - 21:09
la source
0

La suppression de tous les paquets nvidia et la réinstallation est en effet le moyen le plus simple de résoudre ce problème.

Tout d’abord, j’ai retiré tous les paquets nvidia avec la commande ci-dessous:

$ dpkg --get-selections | grep nvidia | awk '{print }' | xargs sudo apt-get -y purge

Ensuite, j'ai simplement redémarré notre curiosité, pour voir à quoi ressemblerait mon interface graphique - résolution médiocre et lent, comme prévu.

Après avoir ouvert un shell, j'exécute la commande ci-dessous pour installer nvidia back:

$ sudo apt-get install nvidia-current
$ sudo reboot

Tout fonctionne à nouveau. Bonne chance.

    
réponse donnée George Anderson 31.08.2013 - 19:51
la source

Lire d'autres questions sur les étiquettes