Проблеми з libGl, fbConfigs, закріплені за кожне оновлення?


38

У мене виникають проблеми при складанні SFML-проекту (не бачу жодної графіки):

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

Цю помилку можна вирішити простою перевстановленням драйверів nvidia через цей підручник: https://askubuntu.com/a/451248/341889

..а коли я отримую нові оновлення - ця помилка повертається; (Що робити? Це не рішення - не використовувати оновлення системи ...

PS і так, я врятував усі зміни після установки nvidia-драйверів


1
Це трапляється зі мною, якщо я спробую запустити виконуваний файл 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і це все добре працює.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Відповіді:


29

swrastСправа в тому , програмне забезпечення візуалізації. Це означає, що це не пошук драйвера обладнання для вашої відеокарти. Встановлено купу бібліотек libGL та купу символічних посилань на ці бібліотеки. Щоб побачити, як вони виконують це з оболонки:

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

Тепер ймовірною причиною вашої проблеми є те, що встановлення графічних драйверів іноді порушує ці символічні посилання. (Зокрема, /usr/local/lib/libGL.so.1.2.0це може бути неправильна ліб або символьна посилання на неправильне посилання).

Щоб вирішити, яку бібліотеку намагаються запустити програми 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, відповідну вам (перелічена в першій команді find).

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


Ця проблема допомогла мені зрозуміти повідомлення про помилку, але не виправляючи його. Відповідь "перевстановити драйвери nvidia" була гарним доповненням, оскільки вона фактично вирішила проблему для мене.
хенко

@henko yes Перевстановлення драйверів nvidia - це, мабуть, найшвидший і найпростіший спосіб розібратися в цьому. Зверніться до цього підходу, якщо з будь-якої причини перевстановлення драйверів не усуне вашу проблему, і вам потрібно забруднити руки.
дементований їжак

6
Я розумів кожну частину, за винятком "майже напевно бути /usr/local/lib/libGL.so.1.2.0". Шахта показує "libGL: OpenDriver: спроба /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: težaний /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" і всі ці файли існують у моїй системі ...
Самуель Лі,

1
Ще раз дякую за ваше пояснення; Я краще розумію проблему. Я також хочу зазначити, що в моєму випадку в ubuntu swrast.so є підтверджена помилка , і люди обговорювали це.
Самуель Лі

1
Дякую @dementedhedgehog Це була чудово сформульована публікація і допомогла мені вирішити мою проблему (до речі, у Fedora-25). = :). Вгору проголосували.
NYCeyes

5

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

Виявляється, 32-розрядні бібліотеки не були на шляху бібліотеки.

Цей один лайнер працював на мене:

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

4

У мене виникли проблеми з правильним символьним посиланням, щоб вказати на драйвер nVidia, і я знайшов інший спосіб, який працює для мене.

Це окреслено тут .

І перераховано, як встановити драйвер nVidia через PPA, який доступний для останньої версії 349.16.

Спочатку видаліть будь-які встановлені драйвери nVidia, відкривши вікно терміналу ( Ctrl+ ALT+ T) та набравши текст

sudo apt-get remove nvidia*

Перезавантажте систему

Потім відкрийте інший термінал і введіть наступне

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

Потім знову перезавантажте

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


2
Я б не пропонував залишати xorg-edgers ppa після встановлення драйвера. Багато оновлених пакетів надійде в оновленнях.
Пілот6

просто видалення nvidia * вже вирішило цю проблему для мене!
xtofl

3

Щоб надати альтернативу відповіді Адріана: якщо ви віддаєте перевагу використовувати власні драйвери, отримані безпосередньо від 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помилку.


3

Отримала таку ж проблему на ubuntu 18. Це сталося в основному лише з 32-бітовими програмами. Тому моя ідея полягала в тому, щоб встановити 32-бітну nvidia, оскільки моя / usr / lib / i386-linux-gnu / папка була підозріло порожньою.

Після дуже небагато спроб це вирішило мою проблему з парою та вином не починаючи:

sudo apt install libnvidia-gl-418:i386

(та змініть 418 на будь-яку версію)

Цікаво, що програми не скаржилися на відсутність залежностей під час встановлення.


Здається, це виправило одну з моїх проблем, пов’язаних із питанням, принаймні ...
Андрій

Це 32-бітний може бути саме тому. Інші програми працюють добре, але вони, ймовірно, 64 бітні. Тим не менш, це працює чудово (мені довелося зіткнути версію)
Zoe

2

Треба визнати, я не впевнений, чому це працює для мене, але це було. У такому випадку "виправлення" записів ld.so.conf.d, додавши новий запис, як це працює:

sudo ln -s /usr/lib/nvidia-381/ld.so.conf /etc/ld.so.conf.d/nvidia64.conf
sudo 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

Чому мати однакові записи у триразових творах, але не в двох примірниках, я поняття не маю!


Працює для мене на Ubunu 17.04. Лише зауваження - шлях є / usr / lib / nvidia-xxx, де xxx - номер драйвера, тому адаптуйте команду до цього.
користувач2082382

2

Ось єдине aptрішення, яке працювало на мене, не замислюючись і не замислюючись ld.so.conf.d:

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

1

Я просто використовую цей рядок:

 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.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
Люди повинні слідувати, що це означає ...?
Андрій

Мені працює, дякую!
Гетт

0

Просто запустіть це:

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

Версія вашого драйвера відображається в налаштуваннях nvidia.


0

У моєму випадку вирішення цього питання лежало в продовженні повідомлення про помилку

Paraview 5.7.0 повідомив мені, що:

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

Повідомлення

GLEW could not be initialized: Missing GL version

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

скріншот 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/isissue/44 за підказки


Для різниці між LD_PRELOAD і більш широко цитованої LD_LIBRARY_PATH см stackoverflow.com/q/14715175/5459638
XavierStuvw

-3

Я стикався з цією дивною проблемою, коли я переходив до моєї Ubuntu VM з мого Macbook Pro, але встановлення нижнього драйвера Nvidia на моєму Ubuntu 16.04 виправило цю проблему. Сподіваюся, це працює для вас.

sudo apt-get install nvidia-331


1
Навіщо встановлювати драйвери графічного процесора Nvidia на гостьову систему VM? Ó_ò
Девід

Оголошення не підходить. @DavidFoerster має рацію в тому, що встановлення драйверів GPU у VM не має сенсу (якщо ви не перейдете через апаратне забезпечення GPU до VM). Але: Я біжу X над SSH, і я стикаюся з тією ж проблемою. Запуск X-програм на віддаленій машині (ВМ) майже завжди призводить до повідомлень про помилки, згаданих у питанні ОП. Я ще не знайшов рішення цієї проблеми, але якщо встановлення драйверів GPU на віддалений VM було б рішенням, я б це зробив, незалежно від того, чи є це сенс, просто для усунення помилок (я наразі їх ігнорує).
Бінарус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.