Nvidia API mismatch

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 quelques 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.

J'avoue que je ne sais pas vraiment de quoi il parle quand il est dit conducteur. La verion de nvidia-currentest 270.41.19. Je pensais que c'était le pilote et le module, tout en un.

J'utilise le X-SWAT PPA et j'ai remarqué que le nvidia-settingspackage est passé à 275.09.07. Comme il ne s'agit que d'une application de paramètres, je ne pense pas que cette incompatibilité ait quoi que ce soit à voir avec cela. Ce n'est pas non plus la même version que le problème décrit.

Je préfère ne pas revenir au pilote Nvidia standard car il est moins stable sur mon GTX580. J'accepterais une réponse qui prend la configuration manuelle et la fait recompiler lorsque le noyau se recompile (c'est-à-dire, une certaine magie DKMS) mais cela doit fonctionner. Je ne veux pas revenir en mode texte à chaque redémarrage après une mise à niveau du noyau.

Edit: Minecraft fonctionne sans se plaindre des versions de pilotes. Penumbra meurt avec à peu près la même erreur en entrant dans une partie.

Edit: Voici ce que je traite en termes de fichiers 32 bits. Ils semblent tous avoir la bonne version.

ls -l /usr/lib32/nvidia-current/ | awk '{ print $8 " " $9 " " $10 }'

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  

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

Se cachant dans le /usr/lib32/bon (pas le sous- nvidia-currentrépertoire), j'ai trouvé ce qui suit:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | 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, tout /usr/lib32/nvidia-current/est dans la bonne version, mais il y a une charge de cruauté /usr/lib32/qui pourrait ruiner la fête.

Édition 3: la tentative de recherche du package propriétaire de ces fichiers a échoué:

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.

Des conseils sur la façon de gérer ces versions cassées? Supprime-les? Supprimer puis lien symbolique vers les ./nvidia-current/versions?

Oli
la source
Êtes-vous sur un système 64 bits? Dans l'affirmative, la différence entre les jeux fonctionnels et les jeux cassés pourrait-elle être de 32 bits ou 64 bits? Si tel est le cas, il se peut que les composants de l'espace utilisateur 32 ou 64 bits soient obsolètes.
James Henstridge
Je suis en 64 bits. Cela semble être un bon diagnostic. Trine (qui est également natif 64 bits) fonctionne également.
Oli
@James une idée de comment on pourrait résoudre ce problème?
Oli
Je n'ai pas de système Nvidia autour, donc ce qui suit est une supposition. Les bibliothèques d'espace utilisateur 32 bits se trouvent probablement quelque part sous /usr/lib32. Vérifiez s'ils ressemblent à la même version que les 64 bits principaux. S'ils diffèrent, découvrez quel package les possède et recherchez une mise à jour.
James Henstridge

Réponses:

17

Faire ce qui suit l'a résolu 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
gsbabil
la source
4
Utilisez dpkg --get-selections | grep nvidiapour trouver les autres packages nvidia que vous devez purger
Christopher Manning
Merci GSBabil, fixe un problème similaire pour moi. Besoin d'un redémarrage après mais avant qu'il ne "prenne".
Ash
5
@ChristopherManning un moyen plus simple de le faire serait sudo apt-get remove --purge nvidia *
Ben McCann
Travaillé avec brio merci! Enfin, avoir des pilotes à jour, Steam est heureux: D
Ads20000
@GSBabil Je veux t'acheter une bière si mauvaise.
Matthew Scragg
14

En découvrant qu'il y avait une charge d'anciens fichiers en train de rogner / 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, j'ai pu voir qu'il y avait quatre liens rompus:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | 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é voir Elrond, le seigneur de Rivendell et je lui ai demandé de créer une bourse qui pourrait pénétrer dans Morhdorh, se diriger vers le mont Doom et me créer une commande pour m'apporter (et par là je ne nous signifie tous) et dans l'obscurité nous lient.

Assez de. Voici la seule commande:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | 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-elle pas spectaculaire. Et ça a marché. J'ai maintenant 4 nouveaux liens symboliques brillants:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | 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, j'ai pensé que je devrais vérifier si les liens étaient corrects:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | 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. Donc, la méga-commande n'a fait que deux liens correctement. Après avoir regardé un peu plus loin, il semble que les libvdpaufichiers vivent réellement /usr/lib32/nvidia-current/vdpau/. Pas de problème cette fois:

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 $8 " " $9 " " $10 }' | 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 (mais un peu maladroitement) liés. Il est temps de tester.

Edit: Cela a fonctionné mais apprenez de ma lutte: Restez simple.

Oli
la source
Je me souviens bien de ce genre d'enfer - seulement je n'ai pas pris le risque d'utiliser la ligne de commande (en cas de faute de frappe) pour réparer le mien: P.
RolandiXor
7

faites aussi 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 alors:

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

tout va bien!

shgnInc
la source
2
Cela a été utile car il exposait les anciennes versions installées. Une fois que je les ai purgés, tout a bien démarré. Merci!
Josh Johnson
D'accord. Je suis tellement content pour ça.
shgnInc
Très bonne réponse. J'ai parcouru ma liste et l'ai nettoyée, puis j'ai réinstallé ce dont j'avais besoin et redémarré. Voila! +1
nicorellius
7

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

Ce qui suit est basé sur une mémoire inégale, alors faites attention!
Vous devez d'abord voir que les bibliothèques nvidia dans / usr / lib32 / correspondent:

/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 (avec précaution - utilisez un gestionnaire de fichiers, n'essayez pas de rm -rf !!!!!!!!! ), puis réinstallez nvidia-current :).
Cela devrait vous donner les bonnes versions des bibliothèques et vous donner un système de travail.

RolandiXor
la source
4

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

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

  1. Allez dans Système -> Administration -> Pilotes supplémentaires
  2. Sélectionnez le pilote graphique accéléré NVIDIA et appuyez sur le bouton "Supprimer". NE PAS REDÉMARRER IMMÉDIATEMENT APRÈS.
  3. Une fois supprimé, sélectionnez le même pilote et cliquez sur "activer".
  4. Redémarrez maintenant.
  5. Doit être corrigé.
Erik Madsen
la source
3

après quelques tests, j'ai trouvé que les packages:

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

fonctionne uniquement pour le noyau 3.8.0- *.

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

De plus les 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 toutes les autres.

Donc, dans mon cas, j'ai installé les noyaux suivants:

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 obtenu 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 indication erronée de construire et d'installer pour un noyau uniquement.

N'importe où, la commande suivante résout 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'à la prochaine apt-get install nvidia-current ou reconfigure

Discussion: pilote Nvidia mis à jour - les versions mixtes de 304.88 et 319.32 sont liées à la même chose, mais je n'avais pas assez de crédit pour y poster.

efa
la source
1

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

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot
bmaupin
la source
0

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

Tout d'abord, j'ai supprimé tous les packages nvidia avec la commande ci-dessous:

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

Ensuite, j'ai fait un redémarrage juste pour notre curiosité, pour voir à quoi ressemblerait mon interface graphique - mauvaise résolution et lente, comme prévu.

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

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

Tout fonctionne à nouveau. Bonne chance.

George Anderson
la source