ChatGPT сказал:
Отлично, значит вы уже используете максимально возможный подход: патченный , X.Org понижен (скорее всего до ~1.19), и ядро подобрано вручную. Это сложная и трудоёмкая настройка, но в ряде случаев рабочая. Если , но ошибка , давайте углубимся и разберёмся, где может быть сбой.
🧠 Что может быть причиной, если система уже адаптирована под драйвер?
Не удаётся запустить Steam на Ubuntu новых версий с патченным драйвером Nvidia 304?
pgsqllibGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
говорят нам, что:
-
libGL.so не может найти подходящую реализацию драйвера GLX.
-
Вместо работы с
nvidia
,libGL.so
(обычно это Mesa) пытается подгрузить fallback-драйверswrast
. -
swrast
— часть Mesa, и используется только в absence of real hardware driver (или если есть конфликт).
🔍 Возможные причины и решения
1. Конфликт между Mesa и NVIDIA GLX
Даже с патчами, если libGL.so
указывает на Mesa-реализацию (а не NVIDIA), будет конфликт.
👉 Проверьте, на что указывает libGL.so.1
:
bashls -l /usr/lib/libGL.so.1
ls -l /usr/lib/x86_64-linux-gnu/libGL.so.1
ldconfig -p | grep libGL
Если он указывает на mesa
(например, libGL.so.1 -> libGL.so.1.2.0
в /usr/lib/x86_64-linux-gnu/mesa/
), то это проблема.
✅ Решение — вручную прописать libGL.so
от NVIDIA:
bashsudo ln -sf /usr/lib/nvidia-304/libGL.so.1 /usr/lib/libGL.so.1
или (если 64-бит):
bashsudo ln -sf /usr/lib/nvidia-304/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so.1
Или добавить путь к NVIDIA в LD_LIBRARY_PATH
:
bashexport LD_LIBRARY_PATH=/usr/lib/nvidia-304:$LD_LIBRARY_PATH
steam
2. Steam запускается в 32-битном режиме, а 32-битная libGL.so от NVIDIA не подключена
Steam — 32-битное приложение. Если вы используете 64-битную систему, то:
✅ Убедитесь, что 32-битная версия libGL.so.1
от NVIDIA также подгружается.
bashls -l /usr/lib32/libGL.so.1
ls -l /usr/lib/i386-linux-gnu/libGL.so.1
Если там mesa
, а не nvidia
, подмените:
bashsudo ln -sf /usr/lib32/nvidia-304/libGL.so.1 /usr/lib32/libGL.so.1
или:
bashexport LD_LIBRARY_PATH=/usr/lib32/nvidia-304:$LD_LIBRARY_PATH
3. Отсутствие правильной загрузки модуля nvidia
в ядре
Иногда, особенно с патченными драйверами, ядро не загружает модуль корректно.
Проверьте:
bashlsmod | grep nvidia dmesg | grep -i nvidia
Если nvidia
не загружается или есть ошибки — ищите их в dmesg
.
✅ Попробуйте вручную:
bashsudo modprobe nvidia
4. X-сервер не использует nvidia
как GLX-провайдер
Steam (и любые GL-приложения) читают GLX-инфу через X-сервер.
👉 Проверьте лог X-сервера:
bashcat /var/log/Xorg.0.log | grep -i glx
Вы должны увидеть:
swift(II) LoadModule: "glx"
(II) Loading /usr/lib/xorg/modules/extensions/libglx.so
(II) Module glx: vendor="NVIDIA Corporation"
Если вместо этого загружается Mesa
-или X.org
-GLX — это проблема.
✅ Убедитесь, что используется NVIDIA:
bashsudo update-alternatives --config glx
(если система использует альтернативы).
5. Steam запускается в "чистой" среде и не видит переменных
Проверьте, что Steam видит переменные LD_LIBRARY_PATH
, __GLX_VENDOR_LIBRARY_NAME
, LIBGL_DRIVERS_PATH
, и т.п.
👉 Попробуйте обёртку:
bashenv LD_LIBRARY_PATH=/usr/lib32/nvidia-304:/usr/lib/nvidia-304 \
__GLX_VENDOR_LIBRARY_NAME=nvidia \
LIBGL_DRIVERS_PATH=/usr/lib32/nvidia-304 \
steam
6. Проблемы с nvidia-tls
(thread-local storage)
Патченный 304 может не включать libnvidia-tls.so.304.*
и libnvidia-glcore.so.304.*
. Убедитесь, что эти файлы:
-
Существуют
-
Находятся в
LD_LIBRARY_PATH
-
Имеют 32-битную версию
📌 Что ещё можно сделать:
-
Установить
libgl1-nvidia-glx:i386
вручную, если он не подтянут. -
Попробовать запуск с
LIBGL_DEBUG=verbose
для подробной отладки:
bashLIBGL_DEBUG=verbose steam