No coinciden las API de Nvidia

27

Había planeado un día de relajación con Portal 2, pero al iniciar Steam (por primera vez en un par de semanas) recibí el siguiente mensaje en la 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.

Confieso que realmente no sé de qué está hablando cuando dice conductor. La versión de nvidia-currentes 270.41.19. Pensé que era el controlador y el módulo, todo en uno.

Utilizo el X-SWAT PPA y he notado que el nvidia-settingspaquete ha aumentado 275.09.07. Como esta es solo una aplicación de configuración, no creo que este desajuste tenga nada que ver con esto. Tampoco es la misma versión que el problema que se describe.

Prefiero no volver al controlador estándar de Nvidia, ya que es menos estable en mi GTX580. Acepto una respuesta que toma la configuración manual y hace que se vuelva a compilar cuando el kernel se vuelve a compilar (es decir, algunas herramientas de DKMS) pero tiene que funcionar. No quiero volver al modo de texto cada vez que reinicio después de una actualización del kernel.

Editar: Minecraft funciona sin una sola queja sobre las versiones del controlador. Penumbra muere con aproximadamente el mismo error al ingresar a un juego.

Editar: Esto es lo que estoy tratando en términos de archivos de 32 bits. Todos parecen estar en la versión correcta.

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  

Edición 2: podría haber encontrado algo.

Al acecho en /usr/lib32/apropiado (no el nvidia-currentsubdirectorio) encontré lo siguiente:

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

Por alguna razón, todo /usr/lib32/nvidia-current/está en la versión correcta, pero hay un montón de cosas /usr/lib32/que pueden estar arruinando la fiesta.

Edición 3: Falló el intento de rastrear qué paquete posee estos archivos:

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.

¿Algún consejo sobre cómo debo lidiar con estas versiones rotas? ¿Borra los? ¿Eliminar y luego vincular a ./nvidia-current/versiones?

Oli
fuente
¿Estás en un sistema de 64 bits? Si es así, ¿la diferencia entre los juegos que funcionan y los que no funcionan es si son de 32 o 64 bits? Si ese es el caso, podría ser que los componentes de espacio de usuario de 32 o 64 bits no estén actualizados.
James Henstridge
Estoy en 64 bits. Parece que podría ser un buen diagnóstico. Trine (que también es nativo de 64 bits) también funciona.
Oli
@ James, ¿alguna idea de cómo se solucionaría eso?
Oli
No tengo un sistema Nvidia, así que lo siguiente es una suposición. Las bibliotecas de espacio de usuario de 32 bits están probablemente en algún lugar debajo /usr/lib32. Compruebe si se parecen a la misma versión que las primarias de 64 bits. Si difieren, averigüe qué paquete los posee y busque una actualización.
James Henstridge

Respuestas:

17

Hacer lo siguiente me lo resolvió en Ubuntu 12.04 de 64 bits con el kernel 3.0.29. Espero eso ayude.

sudo apt-get purge nvidia-current
sudo apt-get install nvidia-current
gsbabil
fuente
44
Úselo dpkg --get-selections | grep nvidiapara encontrar los otros paquetes de nvidia que debe purgar
Christopher Manning
Gracias GSBabil, solucionó un problema similar para mí. Necesitaba un reinicio después, aunque antes de que "tomó".
Ash
55
@Christopher Manejar una forma más fácil de hacerlo sería sudo apt-get remove --purge nvidia *
Ben McCann
Trabajó brillantemente gracias! Finalmente tener controladores actualizados, Steam está feliz: D
Ads20000
@GSBabil Quiero comprarte una cerveza tan mal.
Matthew Scragg
14

Al descubrir que había una carga de archivos viejos que se desmoronaron / usr / lib32 / los saqué del camino con el siguiente comando:

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

Y reinició X. Esto rompió todo en 3D. Huzzah Usando un comentario anterior, pude ver que había cuatro enlaces rotos:

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

En lugar de reemplazar manualmente los enlaces de cuatro archivos, fui a Elrond, señor de Rivendell y le encargué que estableciera una comunidad que pudiera atrapar a Morhdorh, subir al Monte Doom y crearme un comando para traerme (y con eso nos significa a todos) y en la oscuridad nos atan.

Suficiente de eso. Aquí está el único 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"

¿No es ella espectacular? Y funcionó. Ahora tengo 4 nuevos enlaces simbólicos brillantes:

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

Luego verifiqué si todo había funcionado. Antes de reiniciar pensé que debería verificar si los enlaces eran correctos:

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)

Excelente. Entonces el megacomando solo hizo dos enlaces correctamente. Después de buscar un poco más, parece que los libvdpauarchivos realmente viven /usr/lib32/nvidia-current/vdpau/. No te metas en este momento:

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

Al menos están correctamente conectados (aunque un poco desgarbados). Es hora de probar.

Editar: Esto funcionó, pero aprendí de mi lucha: Mantenlo simple.

Oli
fuente
Recuerdo bien este tipo de infierno, solo que no me arriesgué a usar la línea de comando (en caso de escribir mal algo) para arreglar el mío: P.
RolandiXor
7

también solo haz esto:

$ 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

y entonces:

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

¡todo está bien!

shgnInc
fuente
2
Esto fue útil ya que expuso las versiones anteriores que se instalaron. Una vez que los purgué, todo arrancó bien. ¡Gracias!
Josh Johnson
Okay. Estoy tan claro por ello.
shgnInc
Gran respuesta. Revisé mi lista y la limpié, luego reinstalé lo que necesitaba y reinicié. Voila! +1
nicorellius
7

Tuve este problema una vez, y es sorprendentemente fácil de solucionar.

Lo siguiente se basa en la memoria irregular, ¡así que tenga cuidado!
Primero necesita ver que las bibliotecas de nvidia en / 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 

Según lo que describió, lo más probable es que no coincidan con estos. Si este es el caso, debe eliminarlos (con cuidado, use un administrador de archivos, no intente ejecutar rm -rf !!!!!!!!! ) y luego reinstale nvidia-current :).
Esto debería darle las versiones correctas de las bibliotecas y un sistema de trabajo.

RolandiXor
fuente
4

Tuve este problema que afectaba mi lanzador SWTOR en vino. Al leer lo anterior, decidí probar y hacer cosas a través de la interfaz de usuario de Ubuntu. Aquí está la solución simple que funcionó para mí;

Elimine y vuelva a instalar controladores adicionales a través de la interfaz de usuario:

  1. Vaya a Sistema -> Administración -> Controladores adicionales
  2. Seleccione el controlador de gráficos acelerados NVIDIA y presione el botón "eliminar". NO REINICIE INMEDIATAMENTE DESPUÉS.
  3. Una vez eliminado, seleccione el mismo controlador y haga clic en "activar".
  4. Ahora reiniciar.
  5. Debería ser arreglado.
Erik Madsen
fuente
3

Después de algunas pruebas encontré que los paquetes:

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

funciona para todos los núcleos 3.2.0- * y 3.8.0- *,

mientras que los paquetes:

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

funciona solo para Kernel 3.8.0- *.

Ubuntu jockey todavía recomienda la versión 319 también cuando el kernel 3.2.0- * solo está presente. Entonces un error aquí.

Además los comandos:

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

o

$ sudo dpkg-reconfigure nvidia-current

instale el controlador solo para una versión de kernel para cada versión menor y elimínelo para todas las demás.

Entonces, en mi caso, tengo los siguientes núcleos instalados:

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

Tengo el controlador solo para:

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

mientras se inicia con los otros núcleos, los resultados del controlador no están instalados.

Me parece que en algún lugar del paquete hay una indicación incorrecta para construir e instalar solo para algunos núcleos.

En cualquier lugar, emitir el siguiente comando soluciona la situación:

$ 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

hasta el próximo apt-get install nvidia-current o reconfigure

Hilo: Actualización del controlador de Nvidia : las versiones mixtas de 304.88 y 319.32 están relacionadas con lo mismo, pero no tenía suficiente crédito para publicar allí.

efa
fuente
1

Esto me sucedió después de instalar el último controlador experimental de Nvidia. Todavía quería probar el último controlador si es posible en lugar de volver a un controlador anterior, así que esto es lo que funcionó para mí:

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

Eliminar todos los paquetes de nvidia y volver a instalarlo es, de hecho, la forma más fácil de solucionarlo.

En primer lugar, eliminé todos los paquetes de nvidia con el siguiente comando:

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

Luego hice un reinicio solo por curiosidad, para ver cómo se vería mi interfaz gráfica: baja resolución y lenta, como se esperaba.

Después de abrir un shell, ejecuto el siguiente comando para instalar nvidia:

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

Todo funciona de nuevo. Buena suerte.

George Anderson
fuente