Проблемы с libGL, fbConfigs, swrast при каждом обновлении?

У меня возникают проблемы при компиляции SFML-проекта (не вижу никакой графики):

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

Эта ошибка может быть устранена простой переустановкой драйверов nvidia с помощью этого руководства: https://askubuntu.com/a/451248/341889

..но когда я получаю новые обновления - эта ошибка возвращается ; ( Что мне делать? Это не решение - не использовать обновление системы...

P.S. и да, я сохранил все изменения после установки nvidia-драйверов

То swrast дело в программном рендерере. Это означает, что он не находит драйвер оборудования для вашей видеокарты. Установлена куча библиотек libGL и куча символических ссылок на эти библиотеки. Чтобы увидеть это, запустите это из оболочки:

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

Теперь вероятная причина вашей проблемы заключается в том, что установка графических драйверов иногда нарушает эти символические ссылки. (В частности /usr/local/lib/libGL.so.1.2.0 скорее всего, это либо неправильная библиотека, либо символическая ссылка на неправильную ссылку) (N.B. Я написал это некоторое время назад. libGL.so.1.2.0 была текущей версией gl, теперь это может быть что-то другое).

Чтобы выяснить, какую библиотеку пытаются запустить программы OpenGL, вы можете включить немного подробностей и запустить простую программу OpenGL. Вы можете проверить это с помощью стандартной тестовой программы OpenGL:

LIBGL_DEBUG=verbose glxgears

Надеюсь, это потерпит неудачу так же, как и SFML. С LIBGL_DEBUG он должен сообщить вам, какую библиотеку OpenGL он пытается загрузить. Кроме того, библиотека, которую он будет пытаться загрузить, почти наверняка будет /usr/local/lib/libGL.so.1.2.0 (Редактировать: Это была стандартная библиотека OpenGL на моей машине в то время, когда я отвечал на этот вопрос. Вполне возможно, что сейчас на вашем компьютере установлена какая-то другая версия).

Таким образом, решение (в данном случае) состоит в том, чтобы убедиться, что /usr/local/lib/libGL.so.1.2.0 это символическая ссылка, указывающая на нужную библиотеку OpenGL. В моем случае у меня есть драйвер Nvidia 3.40, поэтому я запустил:

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

Но вы захотите указать его на подходящую для вас библиотеку OpenGL (указанную в первой команде поиска).

Подводя итог: установка (проприетарных) графических драйверов может привести к разрыву символических ссылок, используемых для библиотек OpenGL. Чтобы решить эту проблему, вручную исправьте символические ссылки (fix /usr/local/lib/libGL.so.1.2.0 первый).

У меня такая же проблема в ubuntu 18. Это происходило в основном только с 32-битными приложениями. Итак, моя идея состояла в том, чтобы установить 32-битную nvidia что-нибудь, так как моя папка / usr / lib / i386-linux-gnu / была подозрительно пуста.

После очень немногих попыток это устранило мою проблему с тем, что steam и wine не запускались:

sudo apt install libnvidia-gl-418:i386

(и измените 418 на любую версию, которая у вас есть)

Интересно, что приложения не жаловались на отсутствие зависимостей во время установки.

У меня возникли проблемы с получением правильной символической ссылки, указывающей на драйвер nVidia, и я нашел другой способ, который работает для меня.

Это изложено в общих чертах здесь.

И в нем указано, как установить драйвер nVidia через PPA, который доступен для 349.16, последней версии.

Сначала удалите все установленные в данный момент драйверы nVidia, открыв окно терминала (Ctrl + ALT + T) и ввод текста

sudo apt-get remove nvidia*

Перезагрузите свою систему

Затем откройте другой терминал и введите следующее

sudo add-apt-repository ppa:xorg-edgers/ppasudo apt-get updatesudo apt-get install nvidia-349 nvidia-settingssudo add-apt-repository -r ppa:xorg-edgers/ppa

Затем перезагрузитесь снова

Я попробовал это после того, как заблудился с символическими ссылками, и steam работал нормально сразу после установки драйвера, и снова он все еще работал после того, как у меня было более 400 мегабайт системных обновлений.

У меня была такая же проблема в Ubuntu 16.10 с nvidia-340 драйверы, и ни одно из решений здесь не сработало для меня.

Оказывается, 32-разрядных библиотек не было в пути к библиотеке.

Этот лайнер сработал для меня:

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

Я просто использую эту строку:

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

и это работает.

Потому что я вижу такой ввод, когда выполняю sudo ldconfig -p | grep -i gl.so:

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

Чтобы предоставить альтернативу ответу Адриана: если вы предпочитаете использовать проприетарные драйверы, полученные непосредственно от NVIDIA, вместо тех, которые можно найти в PPA, установка (или, в моем случае, переустановка) последнего проприетарного драйвера может помочь устранить ошибку swrast.

Если у вас еще нет драйвера NVIDIA, загрузите драйвер с Веб-сайт NVIDIA. Затем переключитесь на tty (ctrl+alt+F1) и отключите свой менеджер входа в систему:

При использовании lightdm, $ sudo service lightdm stop

При использовании gdm, $ sudo service gdm stop

Перейдите к сценарию установки, запустите его и следуйте инструкциям. Не волнуйтесь, если сценарий предварительной установки завершится неудачей. Я всегда принимаю регистрацию DKMS и 32-разрядных библиотек совместимости. После установки драйвера перезагрузите компьютер:

$ sudo reboot

Если у вас уже есть сценарий установки из более старого драйвера NVIDIA, просто запустите сценарий установки драйвера NVIDIA, как описано выше, но с опцией "--update":

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

Это позволит вам получить самую последнюю версию драйвера.

Сделав это, я исправил свою libGL error: failed to load driver: swrast ошибка.

Просто запустите это:

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

Версия вашего драйвера отображается в настройках nvidia.

Я должен признать, я не уверен, почему это работает для меня, но это сработало. В данном конкретном случае работает "исправление" записей ld.so.conf.d путем добавления новой записи, подобной этой:

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

Это имеет смысл, пока вы не выполните следующее 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

Почему одни и те же записи в трех экземплярах работают, но не в двух экземплярах, я понятия не имею!

Вот пример apt-единственное решение, которое сработало для меня, никаких символических ссылок или возни с ld.so.conf.d:

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

В моем случае решение этой проблемы заключалось в продолжении сообщения об ошибке

Paraview 5.7.0 сообщил мне, что:

libGL error: No matching fbConfigs or visuals foundlibGL 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

Сообщение

GLEW could not be initialized: Missing GL version

был ключевым фактором. Я запускаю 'glxgears', чтобы проверить, что графические библиотеки работают нормально - см. Также man glxgears -- показ этой анимации:

screenshot of glxgears

Тогда моим решением было просто установить переменную окружения

LD_PRELOAD=/usr/lib/libGL.so

Примите к сведению:

  1. Хотя у меня есть видеокарта Nvidia, мне не нужно было возиться с ней;
  2. Запуск locate libGL.so, я нахожу другого кандидата /usr/lib/i386-linux-gnu/libGL.so. Однако установка этого параметра как LD_PRELOAD не устранила проблему;
  3. Также нет необходимости устанавливать какую-либо информацию о библиотеке GLEW, отображаемую выше --- см. locate libGLEW.so

Я в долгу перед https://github.com/openai/mujoco-py/issues/44 в поисках подсказок

Что делать, если на моей машине нет оборудования nvidia, и я получаю те же ошибки?

Это происходит со мной, если я пытаюсь запустить исполняемый файл OpenGL, динамически загружающий mesa libGL.so : LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. По умолчанию моя Ubuntu 16.04 использует /usr/lib /nvidia-361/libGL.so из-за /etc /ld.so.conf.d / x86_64-linux-gnu_GL.conf, и все это работает нормально.