Problemas com libGl, fbConfigs, swrast através de cada atualização?


38

Tenho problemas ao compilar o projeto SFML (não vejo nenhum gráfico):

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

Este erro pode ser solucionado com a reinstalação simples dos drivers nvidia através deste tutorial: https://askubuntu.com/a/451248/341889

..mas quando recebo novas atualizações - este erro está retornando; (O que devo fazer? Não é a solução - não use a atualização do sistema ...

PS e sim, salvei todas as alterações após a instalação da nvidia-drivers


1
Isso acontece comigo se eu tentar lançar um OpenGL executável de carga dinamicamente a mesa libGL.so: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. Por padrão, meu Ubuntu 16.04 usa /usr/lib/nvidia-361/libGL.sopor causa /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confdisso e tudo funciona bem.
Ciro Santilli escreveu

Respostas:


29

O swrastproblema é o renderizador de software. Isso significa que não está encontrando o driver de hardware para sua placa de vídeo. Existem várias bibliotecas libGL instaladas e vários links simbólicos para essas bibliotecas. Para vê-los, execute isso no shell:

find /usr -iname "*libGL.so*" -exec ls -l -- {} + 

Agora, a causa provável do seu problema é que a instalação de drivers gráficos às vezes quebra esses links simbólicos. (Especificamente, /usr/local/lib/libGL.so.1.2.0é provável que seja a lib errada ou um link sym para o link errado).

Para descobrir qual biblioteca os programas OpenGL estão tentando executar, você pode ativar um pouco de verbosidade e executar um programa OpenGL simples. Você pode verificar isso usando o programa de teste padrão OpenGL:

LIBGL_DEBUG=verbose glxgears

Espero que isso falhe da mesma maneira que o SFML. Com LIBGL_DEBUGisso, você deverá saber qual biblioteca do OpenGL está tentando carregar. Além disso, a lib que ele está tentando carregar quase certamente será /usr/local/lib/libGL.so.1.2.0(Edit: Esta era a biblioteca OpenGL padrão na minha máquina no momento em que respondi a isso. Pode muito bem ser outra versão na sua máquina agora).

Portanto, a solução (neste caso) é garantir que /usr/local/lib/libGL.so.1.2.0seja um link simbólico apontando para a biblioteca OpenGL correta. No meu caso, eu tenho o driver da Nvidia 3.40, então executei:

ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0

Mas você deve apontar para a biblioteca OpenGL apropriada para você (listada no primeiro comando find).

Em resumo: a instalação de drivers gráficos (proprietários) pode quebrar os links simbólicos usados ​​nas bibliotecas do OpenGL. Para resolver esse problema, corrija manualmente os links simbólicos (corrija /usr/local/lib/libGL.so.1.2.0primeiro).


Esse problema me ajudou a entender a mensagem de erro, mas não a corrigi-la. A resposta "reinstalar os drivers da nvidia" ajudou foi um bom complemento, pois na verdade resolveu o problema para mim.
henko 29/09

@henko sim, a reinstalação dos drivers da nvidia é provavelmente a maneira mais rápida e fácil de resolver isso. Volte a essa abordagem se, por qualquer motivo, reinstalar os drivers não resolver o problema e você precisar sujar as mãos.
ouriço demente Dem

6
Eu entendi todas as partes, exceto "quase certamente seja /usr/local/lib/libGL.so.1.2.0". O meu mostra "libGL: OpenDriver: tentando /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: tenta /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" e tudo esses arquivos existem no meu sistema ...
Samuel Li

1
Mais uma vez obrigado pela sua explicação; Eu entendo melhor sobre o problema. Também quero salientar que, no meu caso, há um bug confirmado no ubuntu swrast.so, e as pessoas têm discutido isso.
Samuel Li

1
Obrigado @dementedhedgehog Este foi um post muito bem articulado e me ajudou a resolver meu problema (no Fedora-25, a propósito). = :). Up-vote.
NYCeyes

5

Eu tive o mesmo problema no Ubuntu 16.10 com os nvidia-340drivers e nenhuma das soluções aqui funcionou para mim.

Acontece que as bibliotecas de 32 bits não estavam no caminho da biblioteca.

Este liner funcionou para mim:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-340"

4

Eu estava tendo problemas para obter o link simbólico correto para apontar para o driver da nVidia e encontrei outra maneira que funciona para mim.

É descrito aqui .

E ele lista como instalar o driver nVidia via PPA, disponível para 349.16, a versão mais recente.

Primeiro desinstale todos os drivers da nVidia atualmente instalados, abrindo uma janela do terminal ( Ctrl+ ALT+ T) e digitando

sudo apt-get remove nvidia*

Reinicie seu sistema

Em seguida, abra outro terminal e digite o seguinte

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-349 nvidia-settings
sudo add-apt-repository -r ppa:xorg-edgers/ppa

Em seguida, reinicie novamente

Eu tentei depois de me perder com os links simbólicos e o vapor funcionou bem imediatamente após a instalação do driver e, novamente, ainda estava funcionando depois de mais de 400 megas de atualizações do sistema.


2
Eu não sugeriria deixar o xorg-edgers ppa após a instalação do driver. Muitos pacotes instáveis ​​virão em atualizações.
Pilot6

basta remover a nvidia * já resolveu esse problema para mim!
Xtofl

3

Para fornecer uma alternativa à resposta de Adrian: se você preferir usar drivers proprietários provenientes diretamente da NVIDIA, em vez dos encontrados em um PPA, instalar (ou no meu caso, reinstalar) o driver proprietário mais recente pode ajudar a eliminar o erro swrast.

Se você ainda não possui o driver NVIDIA, faça o download do driver no site da NVIDIA . Em seguida, mude para tty ( ctrl+ alt+ F1) e desligue o seu gerenciador de login:

Se estiver usando o lightdm, $ sudo service lightdm stop

Se você estiver usando o gdm, $ sudo service gdm stop

Navegue para o script de instalação, execute-o e siga as instruções. Não se preocupe se o script de pré-instalação falhar. Eu sempre aceito registrar o DKMS e as bibliotecas de compatibilidade de 32 bits. Após a instalação do driver, reinicie sua máquina:

$ sudo reboot

Se você já possui um script de instalação de um driver NVIDIA mais antigo, basta executar o script de instalação do driver NVIDIA conforme indicado acima, mas com a opção "--update":

$ sudo ./NVIDIA-Linux-x86_64-***.**.run --update

Isso fornecerá a versão mais atualizada do driver.

Fazer isso corrigiu meu libGL error: failed to load driver: swrasterro.


3

Tem o mesmo problema no ubuntu 18. Isso aconteceu basicamente apenas com aplicativos de 32 bits. Então, minha idéia foi instalar algo de 32 bits da nvidia, pois minha pasta / usr / lib / i386-linux-gnu / estava suspeitamente vazia.

Depois de poucas tentativas, isso resolveu meu problema com o vapor e o vinho não iniciando:

sudo apt install libnvidia-gl-418:i386

(e altere 418 para a versão que você tiver)

Interessante que os aplicativos não tenham se queixado de dependências ausentes durante a instalação.


Isso parece ter corrigido um dos meus problemas relacionados à questão, pelo menos ...
Andrew

Sendo 32 bits pode ser o motivo. Outros programas funcionam bem, mas provavelmente são de 64 bits. No entanto, isso funciona bem (eu tive que bater a versão embora)
Zoe

2

Tenho que admitir, não sei por que isso funciona para mim, mas funcionou. Neste caso particularmente "corrigindo" as entradas ld.so.conf.d adicionando uma nova entrada como esta funciona:

sudo ln -s /usr/lib/nvidia-381/ld.so.conf /etc/ld.so.conf.d/nvidia64.conf
sudo ldconfig 

Isso faz sentido, até você executar o seguinte find:

$ find -L /etc/ld.so.conf.d -type f | xargs grep -i nvidia
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib32/nvidia-381

Por que ter as mesmas entradas em trabalhos em triplicado, mas não em duplicado, não faço ideia!


Funciona para mim no Ubunu 17.04. Apenas uma observação - o caminho é / usr / lib / nvidia-xxx, em que xxx é o número do driver; portanto, adapte o comando a isso.
user2082382

2

Aqui está uma aptsolução única que funcionou para mim, sem ligações simbólicas ou brincadeiras ld.so.conf.d:

apt install --reinstall libgl1-mesa-glx:i386
apt install mesa-utils nvidia-driver nvidia-driver-libs-i386

1

Eu apenas uso esta linha:

 sudo rm /usr/lib/i386-linux-gnu/libGL.so.1

e funciona.

Porque eu vejo essa entrada quando executo sudo ldconfig -p | grep -i gl.so:

libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1
libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20
libOpenGL.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so.0
libOpenGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so
libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1
libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1
libEGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so

1
As pessoas deveriam seguir o que isso significa ...?
Andrew

Funciona para mim, obrigado!
Hett 14/06

0

Basta executar o seguinte:

sudo apt-get install libnvidia-gl-(the version of your driver):i386

A versão do seu driver é mostrada em nvidia-settings.


0

No meu caso, a solução para esse problema residia na continuação da mensagem de erro

O Paraview 5.7.0 me informou que:

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
(   0.833s) [paraview] vtkOpenGLRenderWindow.c:748 ERR| vtkXOpenGLRenderWindow (0x5588ae6a2160): GLEW could not be initialized: Missing GL version
...
Segmentation fault

A mensagem

GLEW could not be initialized: Missing GL version

tem sido a chave. Eu corro 'glxgears' para verificar se as bibliotecas gráficas estavam funcionando bem - veja também man glxgears- mostrando esta animação:

captura de tela do glxgears

Então minha solução foi simplesmente definir a variável de ambiente

LD_PRELOAD=/usr/lib/libGL.so

Tome nota:

  1. Embora eu tenha uma placa de vídeo da Nvidia, não precisei mexer nela;
  2. No lançamento locate libGL.so, encontro outro candidato /usr/lib/i386-linux-gnu/libGL.so. Definir isso como LD_PRELOAD, no entanto, não resolveu o problema;
  3. Não é necessário definir nenhuma informação sobre a biblioteca GLEW exibida acima --- consulte locate libGLEW.so

Sou grato a https://github.com/openai/mujoco-py/issues/44 por dicas


Para a diferença entre LD_PRELOAD e o LD_LIBRARY_PATH mais citado, consulte stackoverflow.com/q/14715175/5459638
XavierStuvw

-3

Eu estava enfrentando esse problema estranho quando ssh na minha VM do Ubuntu a partir do meu Macbook Pro, mas a instalação do driver da Nvidia abaixo no Ubuntu 16.04 corrigiu o problema. Espero que funcione para voce.

sudo apt-get install nvidia-331


1
Por que você instalaria os drivers da GPU Nvidia em um sistema convidado da VM? Ó_ò
David Foerster

O voto negativo não é apropriado. O @DavidFoerster está certo no sentido de que a instalação de drivers de GPU em uma VM não faz sentido (a menos que você passe o hardware da GPU para a VM). Mas: estou executando o X no SSH e estou enfrentando o mesmo problema. Iniciar aplicativos X na máquina remota (VM) quase sempre leva às mensagens de erro mencionadas na pergunta do OP. Eu não encontrei uma solução para esse problema ainda, mas se a instalação de drivers de GPU na VM remoto iria ser a solução, eu faria isso, independentemente de saber se faz sentido, apenas para fazer que os erros vão embora (eu sou atualmente ignorando-os).
Binarus
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.