it-swarm.com.de

Nicht übereinstimmende Nvidia-API

Ich hatte einen Tag zum Entspannen mit Portal 2 geplant, aber als ich Steam startete (zum ersten Mal seit ein paar Wochen), wurde ich mit der folgenden Nachricht im Terminal begrüßt:

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.

Ich gebe zu, dass ich nicht wirklich weiß, wovon es spricht, wenn Fahrer steht. Die Version von nvidia-current ist 270.41.19. Ich dachte , dass der Treiber und das Modul in einem waren.

Ich verwende das X-SWAT PPA und habe festgestellt, dass das nvidia-settings -Paket auf 275.09.07 angehoben wurde. Da dies nur eine Anwendung für Einstellungen ist, hat diese Nichtübereinstimmung meines Erachtens nichts damit zu tun. Es ist auch nicht die gleiche Version wie das beschriebene Problem.

Ich möchte lieber nicht auf den Standard-Nvidia-Treiber zurückgreifen, da er auf meiner GTX580 weniger als stabil ist. Ich würde eine Antwort akzeptieren, die das manuelle Setup übernimmt und es neu kompiliert, wenn der Kernel neu kompiliert (dh einige DKMS-Assistenten), aber es muss funktionieren. Ich möchte nicht jedes Mal in den Textmodus zurückkehren, wenn ich nach einem Kernel-Upgrade neu starte.

Edit: Minecraft funktioniert ohne eine einzige Beschwerde über Treiberversionen. Penumbra stirbt mit ungefähr demselben Fehler bei der Eingabe eines Spiels.

Edit: Hier ist, was ich mit 32-Bit-Dateien zu tun habe. Sie scheinen alle die richtige Version zu haben.

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: Vielleicht habe ich etwas gefunden.

Ich habe in /usr/lib32/ (nicht im nvidia-current -Unterverzeichnis) Folgendes gefunden:

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

Aus irgendeinem Grund ist alles in /usr/lib32/nvidia-current/ die richtige Version, aber in /usr/lib32/ steckt eine Menge Cruft, die die Party ruinieren könnte.

Edit 3: Der Versuch, herauszufinden, welches Paket diese Dateien besitzt, ist fehlgeschlagen:

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.

Irgendwelche Tipps, wie ich mit diesen kaputten Versionen umgehen soll? Lösche sie? Dann Symlink zu ./nvidia-current/ Versionen löschen?

27
Oli

Als ich herausfand, dass sich eine Menge alter Dateien in/usr/lib32/befanden, schob ich sie mit dem folgenden Befehl aus dem Weg:

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

Und X neu gestartet. Dies brach alles 3D. Huzzah. Bei Verwendung eines früheren Befehls konnte ich vier fehlerhafte Links erkennen:

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

Anstatt die Links für vier Dateien manuell zu ersetzen, ging ich zu Elrond, Lord of Rivendell, und beauftragte ihn, eine Gemeinschaft zu gründen, die in Morhdorh einbrechen und mich auf den Berg des Schicksals torkeln und mir einen Befehl geben konnte, mich (und damit auch ich) zu bringen meint uns alle) und bindet uns in der Dunkelheit.

Genug davon. Hier ist der eine Befehl:

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"

Ist sie nicht spektakulär? Und es hat funktioniert. Ich habe jetzt 4 glänzende neue Symlinks:

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

Ich habe dann nachgesehen, ob alles geklappt hat. Vor dem Neustart dachte ich, ich sollte überprüfen, ob die Links korrekt waren:

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)

Toll. Das Mega-Kommando hat also nur zwei Links richtig gemacht. Nach einigem Hinsehen scheinen die libvdpau -Dateien tatsächlich in /usr/lib32/nvidia-current/vdpau/ zu leben. Keine Unordnung um diese Zeit:

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

Zumindest sind sie ordentlich (wenn auch etwas unbeholfen) eingebunden. Zeit zum Testen.

Bearbeiten: Dies hat funktioniert, aber aus meinem Kampf lernen: Halten Sie es einfach.

14
Oli

Folgendes zu tun löste es für mich auf Ubuntu 12.04 64bit mit 3.0.29 Kernel. Ich hoffe es hilft.

Sudo apt-get purge nvidia-current
Sudo apt-get install nvidia-current
17
gsbabil

Ich hatte dieses Problem einmal und es ist überraschend einfach zu beheben.

Das Folgende basiert auf uneinheitlichem Speicher, seien Sie also vorsichtig!
Zuerst müssen Sie sehen, dass die NVIDIA-Bibliotheken in/usr/lib32/übereinstimmen:

/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 

Entsprechend dem, was Sie beschrieben haben, stimmen sie höchstwahrscheinlich nicht überein. Wenn dies der Fall ist, müssen Sie sie löschen (vorsichtig - verwenden Sie einen Dateimanager, versuchen Sie nicht rm -rf !!!!!!!!!) und installieren Sie dann nvidia- neu. Strom :).
Dies sollte Ihnen die richtigen Versionen der Bibliotheken und ein funktionierendes System geben.

7
RolandiXor

mach auch einfach so:

$ 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

und dann:

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

alles ist ok!

7
shgnInc

Ich hatte dieses Problem, das meinen SWTOR-Launcher in Wein betraf. Als ich das oben Gesagte las, beschloss ich, Dinge über die Ubuntu-Benutzeroberfläche zu versuchen. Hier ist die einfache Lösung, die für mich funktioniert hat.

Zusätzliche Treiber über die Benutzeroberfläche entfernen und neu installieren:

  1. Gehen Sie zu System -> Administration -> Zusätzliche Treiber
  2. Wählen Sie den NVIDIA-beschleunigten Grafiktreiber und klicken Sie auf "Entfernen". NICHT SOFORT NEU BOOTEN.
  3. Nach dem Entfernen denselben Treiber auswählen und auf "Aktivieren" klicken.
  4. Jetzt neu starten.
  5. Sollte behoben werden.
4
Erik Madsen

nach einigen Tests fand ich, dass Pakete:

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

arbeit für alle Kernel 3.2.0- * und 3.8.0- *,

while-Pakete:

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

funktioniert nur für Kernel 3.8.0- *.

Ubuntu Jockey empfiehlt weiterhin die 319-Version, auch wenn nur Kernel 3.2.0- * vorhanden sind. Also ein Bug hier.

Weiterhin die Befehle:

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

oder

$ Sudo dpkg-reconfigure nvidia-current

installieren Sie den Treiber nur für eine Kernelversion für jede Nebenversion und entfernen Sie ihn für alle anderen.

Also, in meinem Fall, dass ich die folgenden Kernel installiert habe:

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

Ich habe den Fahrer nur für:

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

beim Booten mit den anderen Kerneln werden die Treiberergebnisse nicht installiert.

Mir scheint, irgendwo im Paket gibt es eine falsche Angabe, die nur für einen Kernel erstellt und installiert werden muss.

Überall, wo der folgende Befehl ausgegeben wird, kann die Situation behoben werden:

$ 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

bis zum nächsten apt-get installieren sie nvidia-current oder konfigurieren sie es neu

Thread: Nvidia-Treiber aktualisiert - gemischte Versionen von 304.88 und 319.32 bezieht sich auf dasselbe, aber ich hatte nicht genug Guthaben, um dort zu posten.

3
efa

Dies passierte mir, nachdem ich den neuesten experimentellen Nvidia-Treiber installiert hatte. Ich wollte nach Möglichkeit immer noch den neuesten Treiber ausprobieren, anstatt zu einem älteren Treiber zurückzukehren. Das hat also bei mir funktioniert:

Sudo apt-get remove --purge nvidia*
Sudo apt-get install nvidia-319
Sudo reboot
1
bmaupin

Das Entfernen aller nvidia-Pakete und die Neuinstallation sind in der Tat die einfachste Möglichkeit, dies zu beheben.

Zuerst habe ich alle nvidia-Pakete mit dem folgenden Befehl entfernt:

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

Dann habe ich neugierig einen Neustart durchgeführt, um zu sehen, wie meine grafische Oberfläche aussehen würde - schlechte Auflösung und langsam, wie erwartet.

Nach dem Öffnen einer Shell führe ich den folgenden Befehl aus, um nvidia back zu installieren:

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

Alles funktioniert wieder. Viel Glück.

0
George Anderson