incompatibilidade da API da Nvidia

27

Eu tinha planejado um dia de relaxamento com o Portal 2, mas ao iniciar o Steam (pela primeira vez em algumas semanas) fui recebido com a seguinte mensagem no 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.

Eu confesso que eu realmente não sei o que está falando quando diz motorista. A versão de nvidia-current é 270.41.19 . Eu pensei que era o driver e o módulo, tudo em um.

Eu uso o X-SWAT PPA e observei que o pacote nvidia-settings aumentou para 275.09.07 . Como este é apenas um aplicativo de configurações, não acho que essa incompatibilidade tenha algo a ver com isso. Também não é a mesma versão do problema descrito.

Eu prefiro não voltar para o driver padrão da Nvidia, pois é menos que estável na minha GTX580. Eu aceitaria uma resposta que pega a configuração manual e a recompila quando o kernel recompila (isto é, alguma magia do DKMS) mas tem que funcionar. Eu não quero voltar ao modo de texto toda vez que eu reiniciar após uma atualização do kernel.

Edit: Minecraft funciona sem uma única reclamação sobre as versões do driver. Penumbra morre com o mesmo erro ao entrar em um jogo.

Edit: Aqui está o que estou lidando em termos de arquivos de 32 bits. Todos parecem estar na versão correta.

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  

Editar 2: eu poderia ter encontrado algo.

Escondendo em /usr/lib32/ proper (não o nvidia-current subdir) eu encontrei o seguinte:

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 alguma razão, tudo em /usr/lib32/nvidia-current/ é a versão correta, mas há uma carga de lixo em /usr/lib32/ que pode estar arruinando a festa.

Editar 3: Tentando rastrear qual pacote possui esses arquivos falhou:

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.

Alguma dica de como eu devo lidar com essas versões quebradas? Exclua-os? Excluir então o link simbólico para ./nvidia-current/ versões?

    
por Oli 25.06.2011 / 10:01

8 respostas

14

Ao descobrir que havia um carregamento de arquivos antigos em / usr / lib32 /, movi-os para fora com o seguinte comando:

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

E reiniciei o X. Isso quebrou tudo em 3D. Huzzah Usando um comentário anterior, pude ver que havia quatro links quebrados:

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
Em vez de substituir manualmente os links de quatro arquivos, fui a Elrond, Lord of Rivendell e lhe encarreguei de criar uma irmandade que pudesse entrar em conflito com Morhdorh, subir até o Monte Doom e criar um comando para mim (e por isso eu quero dizer todos nós) e na escuridão nos ligam.

Chega disso. Aqui está o único comando:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270 | cut -d' ' -f1 | xargs -l1 sudo bash -c "rm /usr/lib32/\
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
&& ln -s /usr/lib32/nvidia-current/\
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)
/usr/lib32/\
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
"

Ela não é espetacular? E funcionou. Agora tenho 4 novos links simbólicos brilhantes:

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

Eu então verifiquei se tudo havia funcionado. Antes de reiniciar, pensei em verificar se os links estavam corretos:

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

Ótimo. Então o mega-comando só fez dois links certos. Depois de olhar um pouco mais, parece que os arquivos libvdpau realmente vivem em /usr/lib32/nvidia-current/vdpau/ . Não mexer neste momento:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270 | cut -d' ' -f1 | xargs -l1 sudo bash -c "rm /usr/lib32/\
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
&& ln -s /usr/lib32/nvidia-current/\
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)
/usr/lib32/\
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
"

Pelo menos eles estão adequadamente ligados (se um pouco desajeitados). Hora de testar.

Edit: Isso funcionou, mas aprenda com a minha luta: seja simples.

    
por Oli 25.06.2011 / 19:37
17

Fazer o seguinte resolveu para mim no Ubuntu 12.04 64bit com o kernel 3.0.29. Espero que ajude.

sudo apt-get purge nvidia-current
sudo apt-get install nvidia-current
    
por gsbabil 27.08.2012 / 10:56
7

também faça isso:

$ 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 depois:

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

está tudo bem!

    
por shgnInc 16.03.2013 / 11:14
7

Eu tive esse problema uma vez e é surpreendentemente fácil de corrigir.

O seguinte é baseado em memória irregular, então seja cuidadoso!
Primeiro você precisa ver as bibliotecas da nvidia em / 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 

De acordo com o que você descreveu, eles provavelmente não correspondem a eles. Se este for o caso, você precisa excluí-los (com cuidado - use um gerenciador de arquivos, não tente rm -rf !!!!!!!!! ) e reinstale o nvidia- atual :). Isso deve fornecer as versões corretas das bibliotecas e fornecer um sistema funcional.

    
por RolandiXor 25.06.2011 / 16:33
4

Eu tive esse problema que estava afetando o meu lançador SWTOR no vinho. Lendo o acima, decidi tentar fazer as coisas através da interface do Ubuntu. Aqui está a solução simples que funcionou para mim;

Remova e reinstale drivers adicionais por meio da interface do usuário:

  1. Ir para o sistema - > Administração - > Drivers adicionais
  2. Selecione o driver gráfico acelerado da NVIDIA e pressione o botão "remover". NÃO REINICIE IMEDIATAMENTE DEPOIS.
  3. Uma vez removido, selecione o mesmo driver e clique em "ativar".
  4. Agora reinicie.
  5. Deve ser corrigido.
por Erik Madsen 24.04.2012 / 22:53
3

depois de alguns testes, encontrei pacotes:

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

funciona para todos os kernels 3.2.0- * e 3.8.0 - *,

enquanto pacotes:

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

trabalhe apenas para o Kernel 3.8.0- *.

O Ubuntu jockey ainda recomenda a versão 319 também quando o kernel 3.2.0- * está presente. Então, um bug aqui.

Além disso, os comandos:

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

ou

$ sudo dpkg-reconfigure nvidia-current

instale o driver para apenas uma versão do kernel para cada versão secundária e remova-a para todas as outras.

Então, no meu caso, eu tenho os seguintes kernels 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

Eu tenho o driver apenas para:

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

durante a inicialização com os outros kernels, os resultados do driver não são instalados.

Parece-me que, em algum lugar do pacote, há uma indicação errada para compilar e instalar apenas para alguns núcleos.

Em qualquer lugar, a emissão do seguinte comando corrige a situação:

$ 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

até o próximo apt-get instalar nvidia-current ou reconfigurar

Tópico: Driver da Nvidia atualizado - versões mistas de 304.88 e 319.32 está relacionado com o mesmo, mas eu não tinha crédito suficiente para postar lá.

    
por efa 24.10.2013 / 18:29
1

Isso aconteceu comigo depois que instalei o último driver experimental da Nvidia. Eu ainda queria testar o driver mais recente, se possível, em vez de voltar para um driver mais antigo, então foi isso que funcionou para mim:

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot
    
por bmaupin 25.12.2013 / 21:09
0

Remover todos os pacotes da nvidia e reinstalá-lo é, na verdade, a maneira mais fácil de corrigir isso.

Primeiramente eu removi todos os pacotes da nvidia com o comando abaixo:

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

Em seguida, reiniciei apenas a nossa curiosidade, para ver como seria a minha interface gráfica - baixa resolução e lentidão, como esperado.

Depois de abrir um shell, eu corro o comando abaixo para instalar o nvidia de volta:

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

Tudo funciona novamente. Boa sorte.

    
por George Anderson 31.08.2013 / 19:51

Tags