Mancata corrispondenza dell'API Nvidia


27

Avevo programmato una giornata di relax con Portal 2 ma all'avvio di Steam (per la prima volta in un paio di settimane) sono stato accolto con il seguente messaggio nel terminale:

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.

Confesso che non so davvero di cosa stia parlando quando dice autista. La verion di nvidia-currentè 270.41.19. Ho pensato che fosse il driver e il modulo, tutto in uno.

Uso l'X-SWAT PPA e ho notato che il nvidia-settingspacchetto è stato potenziato 275.09.07. Poiché si tratta solo di un'applicazione delle impostazioni, non credo che questa discrepanza abbia nulla a che fare con questo. Inoltre, non è la stessa versione del problema descritto.

Preferirei non ripulire dal driver Nvidia standard in quanto è meno che stabile sul mio GTX580. Accetterei una risposta che richieda l'installazione manuale e la ricompili quando il kernel si ricompila (cioè alcuni maghi DKMS) ma deve funzionare. Non voglio tornare alla modalità testo ogni volta che riavvio dopo un aggiornamento del kernel.

Modifica: Minecraft funziona senza una singola lamentela sulle versioni dei driver. Penumbra muore all'incirca con lo stesso errore quando si entra in una partita.

Modifica: ecco di cosa mi occupo in termini di file a 32 bit. Sembrano tutti essere nella versione giusta.

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  

Modifica 2: potrei aver trovato qualcosa.

In agguato nel /usr/lib32/vero (non il nvidia-currentsottodir) ho trovato quanto segue:

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

Per qualche ragione, tutto /usr/lib32/nvidia-current/è nella versione giusta, ma c'è un sacco di cruft /usr/lib32/che potrebbe rovinare la festa.

Modifica 3: tentativo di rintracciare quale pacchetto possiede questi file non è riuscito:

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.

Qualche consiglio su come dovrei gestire queste versioni non funzionanti? Cancellarli? Eliminare quindi il collegamento simbolico alle ./nvidia-current/versioni?


Sei su un sistema a 64 bit? In tal caso, la differenza tra giochi funzionanti e giochi rotti potrebbe essere se sono a 32 o 64 bit? In tal caso, è possibile che i componenti dello spazio utente a 32 o 64 bit non siano aggiornati.
James Henstridge,

Sono a 64 bit. Sembra che potrebbe essere una buona diagnosi. Trine (che è anche nativo a 64 bit) funziona anche.
Oli

@James hai idea di come si potrebbe risolvere il problema?
Oli

Non ho un sistema Nvidia in circolazione, quindi la seguente è una supposizione. Le librerie dello spazio utente a 32 bit sono probabilmente da qualche parte sotto /usr/lib32. Controlla se sembrano la stessa versione di quelli primari a 64 bit. Se differiscono, scopri quale pacchetto li possiede e cerca un aggiornamento.
James Henstridge,

Risposte:


17

Facendo quanto segue risolto per me su Ubuntu 12.04 64 bit con kernel 3.0.29. Spero che sia d'aiuto.

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

4
Usa dpkg --get-selections | grep nvidiaper trovare gli altri pacchetti nvidia che devi eliminare
Christopher Manning il

Grazie GSBabil, risolto problema simile per me. Ho bisogno di un riavvio in seguito, anche se prima che "prendesse".
Ash,

5
@ChristopherManning un modo più semplice per farlo sarebbe sudo apt-get remove --purge nvidia *
Ben McCann

Ha funzionato brillantemente grazie! Finalmente hanno driver aggiornati, Steam è felice: D
Ads20000

@GSBabil Voglio comprarti una birra così male.
Matthew Scragg,

14

Scoprendo che c'erano un sacco di vecchi file che si incrociavano / usr / lib32 / li ho spostati di mezzo con il seguente comando:

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

E riavviato X. Questo ha rotto tutto in 3D. Huzzah. Usando un encomio precedente ho visto che c'erano quattro collegamenti interrotti:

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

Piuttosto che sostituire manualmente i collegamenti per quattro file, sono andato a Elrond, Lord of Rivendell e gli ho dato il compito di creare una compagnia che potesse intrappolare Morhdorh, salire sul Monte Fato e fabbricarmi un comando per portarmi (e con quello significa tutti noi) e nell'oscurità ci legano.

Abbastanza di questo. Ecco l'unico comando:

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"

Non è spettacolare? E ha funzionato. Ora ho 4 splendidi nuovi symlink:

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

Ho quindi controllato per vedere se tutto aveva funzionato. Prima di riavviare ho pensato di verificare se i collegamenti erano corretti:

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)

Grande. Quindi il mega-comando ha fatto solo due collegamenti giusti. Dopo aver guardato un po 'oltre, sembra che i libvdpaufile vivano effettivamente /usr/lib32/nvidia-current/vdpau/. Nessun pasticcio per questa volta:

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

Almeno sono correttamente (anche se un po 'sgraziati) collegati. È ora di testare.

Modifica: ha funzionato ma impara dalla mia lotta: mantienila semplice.


Ricordo bene questo tipo di inferno - solo che non ho rischiato di usare la riga di comando (in caso di errore di digitazione di qualcosa) per sistemare il mio: P.
RolandiXor

7

anche solo fare questo:

$ 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

e poi:

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

va tutto bene!


2
Ciò è stato utile in quanto ha esposto le versioni precedenti installate. Dopo averli eliminati, tutto è stato avviato correttamente. Grazie!
Josh Johnson,

ok. Sono così felice per questo.
shgnInc,

Bella risposta. Ho esaminato il mio elenco e l'ho ripulito, quindi ho reinstallato ciò di cui avevo bisogno e riavviato. Ecco! +1
nicorellius,

7

Ho avuto questo problema una volta ed è sorprendentemente facile da risolvere.

Quanto segue si basa sulla memoria irregolare, quindi fai attenzione!
Per prima cosa devi vedere che le librerie nvidia in / 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 

Secondo quello che hai descritto, molto probabilmente non corrispondono a questi. In questo caso, è necessario eliminarli (con attenzione: utilizzare un file manager, non tentare di rm -rf !!!!!!!!! ), quindi reinstallare nvidia-current :).
Questo dovrebbe darti le giuste versioni delle librerie e darti un sistema funzionante.


4

Ho avuto questo problema che stava interessando il mio lanciatore SWTOR nel vino. Leggendo quanto sopra ho deciso di provare a fare le cose attraverso l'interfaccia utente di Ubuntu. Ecco la semplice soluzione che ha funzionato per me;

Rimuovere e reinstallare driver aggiuntivi tramite l'interfaccia utente:

  1. Vai a Sistema -> Amministrazione -> Driver aggiuntivi
  2. Selezionare il driver grafico accelerato NVIDIA e premere il pulsante "rimuovi". NON RIAVVIARE IMMEDIATAMENTE DOPO.
  3. Una volta rimosso, selezionare lo stesso driver e fare clic su "attiva".
  4. Ora riavvia.
  5. Dovrebbe essere risolto.

3

dopo alcuni test ho scoperto che i pacchetti:

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

funziona per tutti i kernel 3.2.0- * e 3.8.0- *,

mentre i pacchetti:

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

funziona solo per il kernel 3.8.0- *.

Ubuntu jockey consiglia comunque la versione 319 anche quando sono presenti solo kernel 3.2.0- *. Quindi un bug qui.

Inoltre i comandi:

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

o

$ sudo dpkg-reconfigure nvidia-current

installa il driver per una sola versione del kernel per ogni versione minore e rimuovilo per tutte le altre.

Quindi, nel mio caso, ho i seguenti kernel installati:

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

Ho ottenuto il driver solo per:

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

durante l'avvio con gli altri kernel, il driver risulta non installato.

Mi sembra che da qualche parte nel pacchetto ci sia un'indicazione sbagliata per compilare e installare solo per alcuni kernel.

Ovunque, emettendo il seguente comando risolvi la situazione:

$ 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

fino alla prossima apt-get install nvidia-current o riconfigurare

Discussione: driver Nvidia aggiornato - le versioni miste di 304.88 e 319.32 sono correlate allo stesso, ma non avevo credito sufficiente per pubblicare lì.


1

Questo mi è successo dopo aver installato l'ultimo driver Nvidia sperimentale. Volevo ancora provare l'ultimo driver, se possibile, invece di tornare a un driver più vecchio, quindi questo è quello che ha funzionato per me:

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot

0

Rimozione di tutti i pacchetti nvidia e reinstallazione è davvero il modo più semplice per risolvere questo problema.

Prima di tutto ho rimosso tutti i pacchetti nvidia con il comando seguente:

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

Poi ho fatto un riavvio solo per curiosità, per vedere come sarebbe stata la mia interfaccia grafica: scarsa risoluzione e lentezza, come previsto.

Dopo aver aperto una shell, eseguo il comando seguente per installare nuovamente nvidia:

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

Tutto funziona di nuovo. In bocca al lupo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.