Incompatibilidade da API Nvidia

27

Planejei 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.

Confesso que realmente não sei do 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 nvidia-settingspacote foi aprimorado 275.09.07. Como esse é 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.

Prefiro não voltar ao driver padrão da Nvidia, pois é menos do que estável no meu GTX580. Eu aceitaria uma resposta que aceite a configuração manual e a recompile quando o kernel recompila (ou seja, algumas magias do DKMS), mas precisa funcionar. Não quero voltar ao modo de texto sempre que reiniciar após uma atualização do kernel.

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

Edit: Aqui está o que eu estou lidando em termos de arquivos de 32 bits. Todos eles 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  

Edit 2: Eu posso ter encontrado algo.

À espreita /usr/lib32/adequada (não o nvidia-currentsubdir), 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 /usr/lib32/nvidia-current/está na versão correta, mas há um monte de lixo /usr/lib32/que pode estar arruinando a festa.

Edit 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 devo lidar com essas versões quebradas? Excluí-los? Excluir e link simbólico para ./nvidia-current/versões?

Oli
fonte
Você está em um sistema de 64 bits? Em caso afirmativo, a diferença entre jogos funcionais e quebrados pode ser de 32 ou 64 bits? Se for esse o caso, pode ser que os componentes de espaço do usuário de 32 ou 64 bits estejam desatualizados.
precisa
Estou em 64 bits. Parece que pode ser um bom diagnóstico. Trine (que também é nativo de 64 bits) também funciona.
Oli
@ James alguma idéia de como alguém iria resolver isso?
Oli
Eu não tenho um sistema Nvidia por perto, então o seguinte é um palpite. As bibliotecas de espaço do usuário de 32 bits provavelmente estão em algum lugar abaixo /usr/lib32. Verifique se eles se parecem com a mesma versão que as principais de 64 bits. Se eles diferirem, descubra qual pacote os possui e procure uma atualização.
James Henstridge

Respostas:

17

Fazer o seguinte resolveu isso 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
gsbabil
fonte
4
Use dpkg --get-selections | grep nvidiapara encontrar os outros pacotes da nvidia que você precisa remover #
Christopher Manning
Obrigado GSBabil, corrigido problema semelhante para mim. Precisava de uma reinicialização depois, porém antes de "demorar".
Ash
5
@ChristopherManning uma maneira mais fácil de fazer isso seria sudo apt-get remove --purge nvidia *
Ben McCann
Trabalhou brilhantemente obrigado! Por fim, com drivers atualizados, o Steam está feliz: D
Ads20000 13/07/2013 '18:
@ GSBabil Eu quero te comprar uma cerveja tão ruim.
Matthew Scragg
14

Ao descobrir, havia um monte de arquivos antigos criando o arquivo / usr / lib32 / e os movi com o seguinte comando:

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

E reiniciou o X. Isso quebrou tudo em 3D. Huzzah. Usando uma recomendação 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 por quatro arquivos, fui a Elrond, senhor de Rivendell, e encarreguei-o de estabelecer uma irmandade que poderia entrar em Morhdorh, caminhar até Mount Doom e me dar um comando para me trazer (e com isso eu significa todos nós) e na escuridão nos prendem.

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/\$0 && ln -s /usr/lib32/nvidia-current/\$0 /usr/lib32/\$0"

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

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

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

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)

Ótimo. Portanto, o mega-comando fez apenas dois links corretamente. Depois de olhar um pouco mais, parece que os libvdpauarquivos realmente estão presentes /usr/lib32/nvidia-current/vdpau/. Não brinque com esse tempo:

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 devidamente ligados (ainda que um pouco desajeitadamente). Hora de testar.

Edit: Isso funcionou, mas aprender com a minha luta: Mantenha-o simples.

Oli
fonte
Lembro-me bem desse tipo de inferno - só não corri o risco de usar a linha de comando (no caso de digitar algo errado) para consertar a minha: P.
RolandiXor
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!

shgnInc
fonte
2
Isso foi útil, pois expôs versões mais antigas que foram instaladas. Uma vez que eu os limpei, tudo começou bem. Obrigado!
Josh Johnson #
Está bem. Estou tão feliz por isso.
shgnInc
Ótima resposta. Examinei minha lista e a limpei, depois reinstalei o que precisava e reiniciei. Voila! +1
nicorellius
7

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

O seguinte é baseado em memória irregular, portanto, tenha cuidado!
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 for esse o caso, é necessário excluí-los (com cuidado - use um gerenciador de arquivos, não tente rm -rf !!!!!!!!! ) e depois reinstale a nvidia-current :).
Isso deve fornecer as versões corretas das bibliotecas e um sistema em funcionamento.

RolandiXor
fonte
4

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

Remova e reinstale drivers adicionais através da interface do usuário:

  1. Vá para 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 consertado.
Erik Madsen
fonte
3

depois de alguns testes, achei os pacotes:

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

trabalhar 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 com o Kernel 3.8.0- *.

O Ubuntu jockey ainda recomenda a versão 319 também quando apenas 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-o para todas as outras.

Portanto, no meu caso, 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 peguei o motorista apenas por:

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 construir e instalar apenas para algum kernel.

Em qualquer lugar, emitir o 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 install nvidia-current ou reconfigure

Tópico: Driver Nvidia atualizado - as versões mistas de 304.88 e 319.32 estão relacionadas à mesma coisa, mas eu não tinha crédito suficiente para postar lá.

efa
fonte
1

Isso aconteceu comigo após a instalação do driver experimental mais recente da Nvidia. Eu ainda queria experimentar o driver mais recente, se possível, em vez de reverter para um driver mais antigo, e é isso que funcionou para mim:

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

Remover todos os pacotes da nvidia e reinstalar é realmente a maneira mais fácil de corrigir isso.

Primeiro, removi todos os pacotes da nvidia com o comando abaixo:

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

Depois, reinicializei apenas nossa curiosidade, para ver como seria minha interface gráfica - baixa resolução e lenta, como esperado.

Depois de abrir um shell, execute o comando abaixo para instalar a nvidia de volta:

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

Tudo funciona novamente. Boa sorte.

George Anderson
fonte