Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I had planned a day of relaxing with Portal 2 but on starting Steam (for the first time in a couple of weeks) I was greeted with the following message in the 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.

I'll confess I don't really know what it's talking about when it says driver. The verion of nvidia-current is 270.41.19. I thought that was the driver and module, all in one.

I use the X-SWAT PPA and I have noted that the nvidia-settings package has boosted to 275.09.07. As this is just a settings application, I don't think this mismatch has anything to do with this. It's also not the same version as the problem being described.

I'd rather not purge back to the standard Nvidia driver as it's less than stable on my GTX580. I would accept an answer that takes the manual setup and makes it recompile when the kernel recompiles (ie, some DKMS wizardry) but it has to work. I don't want to drop back to text-mode every time I restart after a kernel upgrade.

Edit: Minecraft works without a single complaint about driver versions. Penumbra dies with roughly the same error when entering a game.

Edit: Here's what I'm dealing with in terms of 32bit files. They all seem to be at the right 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: I might have found something.

Lurking in /usr/lib32/ proper (not the nvidia-current subdir) I found the following:

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

For some reason everything in /usr/lib32/nvidia-current/ is the right version but there's a load of cruft in /usr/lib32/ that might be ruining the party.

Edit 3: Trying to track down which package owns these files has failed:

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.

Any tips on how I should deal with these broken versions? Delete them? Delete then symlink to ./nvidia-current/ versions?

share|improve this question
    
Are you on a 64-bit system? If so, might the difference between working and broken games be whether they are 32-bit or 64-bit? If that is the case, then it could be that the 32- or 64-bit user space components are out of date. –  James Henstridge Jun 25 '11 at 10:15
    
I am on 64bit. This sounds like it might be a good diagnosis. Trine (which is also native 64bit) also works. –  Oli Jun 25 '11 at 11:13
    
@James any idea how one would go about fixing that? –  Oli Jun 25 '11 at 11:29
    
I don't have an Nvidia system around, so the following is a guess. The 32-bit user space libraries are probably somewhere under /usr/lib32. Check if they look like the same version as the primary 64-bit ones. If they differ, find out what package owns them and look for an update. –  James Henstridge Jun 25 '11 at 15:37
add comment

8 Answers 8

Doing the following solved it for me on Ubuntu 12.04 64bit with 3.0.29 kernel. Hope it helps.

sudo apt-get purge nvidia-current
sudo apt-get install nvidia-current
share|improve this answer
2  
Use dpkg --get-selections | grep nvidia to find the other nvidia packages you have to purge –  Christopher Manning Dec 27 '12 at 7:39
    
Thanks GSBabil, fixed similar problem for me. Needed a reboot afterwards though before it "took". –  Ash Apr 11 '13 at 6:07
4  
@ChristopherManning an easier way to do that would be sudo apt-get remove --purge nvidia* –  Ben McCann Apr 25 '13 at 5:31
    
This is way better than the chosen answer. –  qed Jun 7 '13 at 15:16
    
Worked brilliantly thank you! Finally have up-to-date drivers, Steam is happy :D –  Ads20000 Jul 13 '13 at 18:13
show 1 more comment
up vote 12 down vote accepted

On finding out there were a load of old files crufting up /usr/lib32/ I moved them out the way with the following command:

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

And restarted X. This broke everything 3D. Huzzah. Using a previous commend I could see there were four broken links:

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

Rather than manually replace the links for four files, I went to Elrond, Lord of Rivendell and tasked him with setting up a fellowship that could trapse into Morhdorh, toddle up to Mount Doom and craft me one command to bring me (and by that I do mean us all) and in the darkness bind us.

Enough of that. Here is the one command:

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"

Isn't she spectacular. And it worked. I now have 4 shiny new 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

I then checked to see if everything had worked. Before restarting I thought I should check to see if the links were correct:

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)

Great. So the mega-command only did two links right. After looking a little further, it seems the libvdpau files actually live in /usr/lib32/nvidia-current/vdpau/. No messing about this time:

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

At least they're properly (if a little ungainily) linked in. Time to test.

Edit: This worked but learn from my struggle: Keep it simple.

share|improve this answer
    
I remember this kind of hell well - only I didn't risk using the command line (in case of mistyping something) to fix mine :P. –  RolandiXor Jun 25 '11 at 17:54
add comment

I had this problem once, and it is surprisingly easy to fix.

The following is based on patchy memory so be careful!
First you need to see that the nvidia libraries 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

According to what you described, they most likely do not match these. If this is the case, then you need to delete them (carefully - use a file manager, do not attempt to rm -rf!!!!!!!!!), and then reinstall nvidia-current :).
This should give you the right versions of the libraries and give you a working system.

share|improve this answer
1  
+1 for the rm -rf advice. –  Nathan Osman Jun 25 '11 at 17:44
add comment

also just do this:

$ 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

and then:

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

everything is OK!

share|improve this answer
2  
+1 for neat answer. –  BigSack Mar 16 '13 at 10:51
1  
This was helpful as it exposed older versions that were installed. Once I purged them everything booted up fine. Thanks! –  Josh Johnson May 3 '13 at 13:20
    
ok. I am so glade for it. –  shgnInc Jul 6 '13 at 14:20
    
Great answer. I went through my list and cleaned it up, then reinstalled what I needed and rebooted. Voila! +1 –  nicorellius Feb 3 at 16:51
add comment

I had this problem which was affecting my SWTOR launcher in wine. Reading the above I decided to try and do things through the Ubuntu UI. Here's the simple solution that worked for me;

Remove and reinstall additional drivers through UI:

  1. Go to System -> Administration -> Additional Drivers
  2. Select NVIDIA accelerated graphics driver and press "remove" button. DO NOT REBOOT IMMEDIATELY AFTER.
  3. Once removed, select same driver and click "activate".
  4. Now reboot.
  5. Should be fixed.
share|improve this answer
add comment

after some tests I found that packages:

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

work for all kernels 3.2.0-* and 3.8.0-*,

while 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

work for Kernel 3.8.0-* only.

Ubuntu jockey still Recommend 319 version also when kernel 3.2.0-* only are present. So a bug here.

Furthermore the commands:

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

or

$ sudo dpkg-reconfigure nvidia-current

install the driver for only one version of kernel for each minor version, and remove it for all the others.

So, in my case that I have the following kernels installed:

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

I got the driver only for:

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

while booting with the other kernels, the driver results not installed.

Seems to me that somewhere in the package there is a wrong indication to build and install for some kernel only.

Anywhere, issuing the following command fix the 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

until the next apt-get install nvidia-current or reconfigure

Thread: Nvidia driver updated - mixed versions of 304.88 and 319.32 is related to the same, but I had no enough credit to post there.

share|improve this answer
add comment

Removing all nvidia packages and re-installing is indeed the easiest way to fix this.

First off I removed all nvidia packages with the command below:

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

Then I did a reboot just our of curiosity, to see how my graphical interface would look like - poor resolution and slow, as expected.

After opening a shell I run the command below to install nvidia back:

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

Everything works again. Good luck.

share|improve this answer
add comment

This happened to me after I installed the latest experimental Nvidia driver. I still wanted to try the latest driver if possible instead of reverting to an older driver, so this is what worked for me:

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.