Nicht übereinstimmende Nvidia-API

27

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-currentist 270.41.19. Ich dachte , das wäre der Treiber und das Modul in einem.

Ich benutze das X-SWAT PPA und habe festgestellt, dass das nvidia-settingsPaket auf aufgestockt hat 275.09.07. 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.

Bearbeiten: Hier ist, was ich in Bezug auf 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: Ich könnte etwas gefunden haben.

Im /usr/lib32/eigentlichen (nicht im nvidia-currentUnterverzeichnis) habe ich 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/der richtigen Version, aber es gibt eine Menge Cruft /usr/lib32/, die die Party ruinieren könnte.

Bearbeiten 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 ?

Oli
quelle
Befinden Sie sich auf einem 64-Bit-System? Wenn ja, könnte der Unterschied zwischen funktionierenden und defekten Spielen darin bestehen, ob es sich um 32-Bit- oder 64-Bit-Spiele handelt? Wenn dies der Fall ist, sind möglicherweise die 32- oder 64-Bit-Benutzerbereichskomponenten veraltet.
James Henstridge
Ich bin auf 64bit. Das klingt nach einer guten Diagnose. Trine (welches auch native 64bit ist) funktioniert auch.
Oli
@ James irgendeine Idee, wie man das reparieren würde?
Oli
Ich habe kein Nvidia-System, daher ist das Folgende eine Vermutung. Die 32-Bit-Benutzerbereichsbibliotheken befinden sich wahrscheinlich irgendwo darunter /usr/lib32. Überprüfen Sie, ob sie der primären 64-Bit-Version entsprechen. Wenn sie sich unterscheiden, finden Sie heraus, in welchem ​​Paket sie sich befinden, und suchen Sie nach einem Update.
James Henstridge

Antworten:

17

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
gsbabil
quelle
4
Verwenden Sie dpkg --get-selections | grep nvidia, um die anderen NVIDIA-Pakete zu finden, die Sie löschen müssen
Christopher Manning
Danke GSBabil, behobenes ähnliches Problem für mich. Benötigte einen Neustart danach, bevor es "dauerte".
Ash
5
@ChristopherManning eine einfachere Möglichkeit, dies zu tun, wäre sudo apt-get entfernen --purge nvidia *
Ben McCann
Hat hervorragend funktioniert, danke! Endlich aktuelle Treiber, Steam freut sich: D
Ads20000 13.07.13
@GSBabil Ich möchte dir so schlecht ein Bier kaufen.
Matthew Scragg
14

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)

Groß. Das Mega-Kommando hat also nur zwei Links richtig gemacht. Nach einigem Hinsehen scheinen die libvdpauDateien tatsächlich zu existieren /usr/lib32/nvidia-current/vdpau/. 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.

Oli
quelle
Ich erinnere mich noch gut an diese Art von Hölle - nur habe ich es nicht riskiert, die Befehlszeile zu benutzen (falls etwas falsch geschrieben wurde), um meine Fehler zu beheben: P.
RolandiXor
7

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!

shgnInc
quelle
2
Dies war hilfreich, da ältere Versionen angezeigt wurden, die installiert wurden. Sobald ich sie gelöscht habe, ist alles gut gelaufen. Vielen Dank!
Josh Johnson
okay. Ich bin so begeistert davon.
ShgnInc
Gute Antwort. Ich ging meine Liste durch, räumte sie auf, installierte die benötigten Komponenten neu und startete neu. Voila! +1
nicorellius
7

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-current neu :).
Dies sollte Ihnen die richtigen Versionen der Bibliotheken und ein funktionierendes System bieten.

RolandiXor
quelle
4

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.
Erik Madsen
quelle
3

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 beziehen sich auf dasselbe, aber ich hatte nicht genug Guthaben, um dort zu posten.

efa
quelle
1

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

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot
Bmaupin
quelle
0

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.

George Anderson
quelle