Ошибка загрузки ядра kernel mode setting или отсутствие аппаратного ускорения в браузере часто свидетельствует о том, что система использует базовый драйвер VESA вместо специализированного модуля. Для диагностики этой проблемы необходимо немедленно выполнить команду lspci -k | grep -A 2 -i vga, чтобы увидеть, какой драйвер (Kernel Driver in Use) привязан к вашему графическому адаптеру. Если в выводе отсутствует строка с именем драйвера или указано vfio-pci, значит, устройство не инициализировано корректно, и требуется ручное вмешательство.
В среде Linux нет единого графического интерфейса, который бы мгновенно показывал все детали работы видеодрайвера, поэтому основным инструментом диагностики остается терминал. Пользователю важно понимать разницу между загрузочным модулем ядра и пользовательской библиотекой OpenGL, так как их версии могут не совпадать. Неправильная конфигурация часто приводит к тому, что система видит видеокарту, но не может использовать её вычислительную мощность для рендеринга или игр.
Идентификация модели и текущего модуля через lspci
Первым шагом в проверке статуса видеокарты является запуск утилиты lspci, которая перечисляет все устройства, подключенные к шине PCI Express. Команда lspci | grep -i vga или lspci | grep -i 3d позволит быстро отфильтровать графические адаптеры среди сотен других системных контроллеров. Это базовый уровень проверки, необходимый для понимания, видит ли вообще операционная система установленное железо.
Для получения более детальной информации, включая номер модели и используемый драйвер, необходимо добавить ключ -k к команде. Результат выполнения lspci -k | grep -A 3 -i vga покажет не только название устройства (например, NVIDIA Corporation или Advanced Micro Devices), но и строку Kernel Driver in Use. Если эта строка отсутствует, значит, системный модуль не загружен, и видеокарта работает в режиме эмуляции или неактивна.
⚠️ Внимание — отсутствие строки "Kernel Driver in Use" всегда указывает на отсутствие установленного драйвера или проблему с загрузкой модуля ядра, что требует немедленного вмешательства в конфигурацию системы.
Иногда система может показать, что драйвер загружен, но он заблокирован или конфликтует с другим модулем. В таких случаях полезно проверить список загруженных модулей с помощью команды lsmod | grep nvidia (или amdgpu, i915 в зависимости от производителя). Отсутствие вывода из этой команды при наличии видеокарты подтверждает, что модуль не активен в текущей сессии ядра.
Детальная диагностика через lspci
Команда lspci -vvv позволяет увидеть не только имя драйвера, но и количество линий PCIe, используемых картой, а также версию стандарта. Это критично для проверки пропускной способности при использовании ридер-карт или старых плат.
Утилиты для проверки драйверов NVIDIA
Для владельцев графических ускорителей NVIDIA существует специализированная утилита nvidia-smi, которая является стандартом де-факто для мониторинга и тестирования драйверов. Запуск этой команды в терминале выводит таблицу с версией драйвера, версией CUDA, температурой GPU и списком запущенных процессов, использующих видеокарту. Если команда не найдена, драйвер не установлен или не добавлен в переменную окружения PATH.
Важно отличать версию драйвера, отображаемую в nvidia-smi, от версии ядра, так как они могут отличаться. Команда nvidia-smi -q предоставляет расширенную информацию, включая статус кулеров, потребление энергии и детализацию поддерживаемых функций. Для проверки работоспособности OpenGL-контекста можно использовать утилиту glxinfo, которая должна возвращать строку OpenGL renderer string с названием модели NVIDIA.
В некоторых дистрибутивах, особенно с закрытым проприетарным драйвером, может потребоваться проверка статуса службы. В системах на базе systemd можно проверить состояние сервиса с помощью systemctl status nvidia-persistenced. Если сервис активен, это означает, что драйвер готов к работе и поддерживает функции сохранения состояния между сессиями.
Диагностика драйверов AMD и Intel
Для карт AMD и Intel ситуация с проверкой драйверов отличается, так как они используют открытые драйверы, встроенные непосредственно в ядро Linux. Основным инструментом проверки для них является утилита radeontop или radeontop -d, которая показывает загрузку ядер GPU и использование памяти. Однако более универсальным методом остается проверка через glxinfo, где в строке OpenGL renderer string должно быть указано имя модели GPU, а не "llvmpipe" (программная эмуляция).
Современные карты AMD с архитектурой RDNA требуют проверки наличия пакета amdgpu-pro или использования чистого открытого драйвера amdgpu. Команда dmesg | grep amdgpu покажет логи загрузки драйвера и сообщения об ошибках, если таковые возникли при инициализации. Если вы видите сообщения о том, что драйвер rfkilled заблокировал устройство, это может означать конфликт с программным выключением Wi-Fi/Bluetooth, который иногда ошибочно влияет на графику.
Для интегрированных график Intel проверка часто сводится к отсутствию ошибок в логах ядра, так как драйвер i915 является стандартным. Команда intel_gpu_top из пакета intel-gpu-tools позволяет в реальном времени отслеживать загрузку 3D-ядров, видеоконтекст и управление питанием. Отсутствие этой утилиты не означает неисправность, но её наличие значительно упрощает диагностику проблем с производительностью.
Анализ OpenGL и поддержки аппаратного ускорения
Критически важным аспектом проверки является подтверждение того, что приложение может использовать аппаратное ускорение, а не перекладывать задачи на центральный процессор. Для этого используется команда glxinfo | grep "OpenGL renderer". Если в ответе вы видите llvmpipe, softpipe или llvmpipe (LLVM), значит, драйвер видеокарты не загружен или некорректно настроен, и рендеринг выполняется программно.
Аппаратное ускорение необходимо для корректной работы видеодекодеров, современных веб-браузеров и графических интерфейсов. Для проверки поддержки конкретных расширений OpenGL можно использовать команду glxinfo | grep "OpenGL version". Версия должна соответствовать возможностям вашей видеокарты; например, современные карты NVIDIA и AMD должны поддерживать не менее OpenGL 4.5 или 4.6.
В некоторых случаях драйвер может быть загружен, но приложение не может его использовать из-за политик безопасности или настроек окружения. Проверка переменных окружения echo $LIBGL_DEBUG может помочь выявить проблемы с загрузкой библиотек. Если переменная установлена в verbose, то при запуске приложений на экране или в логах будут выводиться подробные отчеты о том, какие библиотеки libGL пытаются загрузить приложения.
☑️ Чек-лист проверки OpenGL
Сравнение версий и таблица команд
Для наглядности и быстрого доступа к командам проверки полезно иметь сводную таблицу основных утилит. Разные сценарии требуют разных инструментов: от простого просмотра списка устройств до глубокого анализа версий библиотек. Ниже приведена таблица, которая поможет быстро определить, какую команду нужно выполнить для конкретной задачи.
| Команда | Цель использования | Ожидаемый результат при успехе |
|---|---|---|
lspci -k | grep -A 2 -i vga |
Проверка привязки драйвера к устройству | Строка "Kernel Driver in Use: [имя_драйвера]" |
nvidia-smi |
Статус драйвера NVIDIA и GPU | Таблица с версией драйвера, температурой и памятью |
glxinfo | grep "OpenGL renderer" |
Проверка аппаратного ускорения | Название видеокарты (не llvmpipe) |
dmesg | grep -i video |
Поиск ошибок загрузки в ядре | Отсутствие ошибок "failed" или "error" |
lsmod | grep nvidia |
Проверка загруженности модуля | Пара строк с именем модуля и размером |
Следует учитывать, что выходные данные могут отличаться в зависимости от версии дистрибутива и уровня ядра. В новых версиях Linux (например, ядра 5.15 и выше) поддержка аппаратного кодирования видео (VAAPI) стала более автоматизированной, но требует проверки наличия соответствующих пакетов libva и libva-utils. Команда vainfo позволит проверить, какие форматы кодеков (H.264, HEVC) поддерживаются текущим драйвером видеокарты.
⚠️ Внимание — если команда vainfo выдает ошибку "libva error: libva init failed", это часто указывает на то, что драйвер установлен, но не подключен к системе VAAPI, что критично для воспроизведения видео высокого разрешения.
Иногда возникает ситуация, когда драйвер установлен корректно, но не работает из-за конфликта с безопасной загрузкой (Secure Boot). В таких случаях проверка mokutil --sb-state покажет статус безопасной загрузки. Если он включен, а драйвер не подписан, система может отказать в его загрузке, что приведет к работе на базовом драйвере VESA или EFI.
Устранение конфликтов и обновление драйверов
Если проверка показала, что драйвер не загружается, следующей ступенью является анализ конфликтов. Часто проблема заключается в присутствии нескольких версий драйверов или конфликте между открытым (nouveau) и проприетарным драйвером для карт NVIDIA. Для принудительной загрузки нужного модуля можно использовать команду modprobe [имя_драйвера], но это решение часто временное до перезагрузки.
Для обновления драйверов до актуальной версии необходимо использовать репозитории вашего дистрибутива или официальные утилиты поставщика. В Ubuntu и Debian это часто делается через apt update && apt install nvidia-driver-535 (номер версии может меняться). В Fedora или Arch процесс может отличаться, и требуется использование dnf или pacman соответственно. Важно всегда проверять совместимость версии драйвера с версией ядра перед установкой.
После установки или обновления драйвера необходимо перезагрузить систему для применения изменений, особенно если обновлялись модули ядра. Если после перезагрузки драйвер снова не загружается, следует проверить файлы конфигурации в каталоге /etc/modprobe.d/ на наличие ограничений или черных списков, которые могут блокировать загрузку нужного модуля.
Автоматизация и скрипты для диагностики
Для регулярной проверки состояния драйверов удобно использовать скрипты, которые собирают всю необходимую информацию в одном выводе. Простой bash-скрипт может объединить команды lspci, glxinfo и uname -r, чтобы дать полную картину состояния системы. Это особенно полезно для серверов или рабочих станций, где доступ к графическому интерфейсу может быть ограничен.
Создание такого скрипта позволяет быстро реагировать на изменения после обновлений системы. Например, можно добавить проверку версии ядра и сравнение её с версией драйвера, чтобы убедиться, что модуль скомпилирован под текущее ядро. Это предотвращает ситуации, когда система обновляется, а драйвер перестает работать из-за несоответствия версий.
В сложных случаях, когда стандартные утилиты не дают ответа, можно обратиться к логам ядра через journalctl -k, отфильтровав сообщения по ключевым словам gpu, drm или nvidia. Это позволит увидеть детали процесса инициализации драйвера, которые не отображаются в стандартных выводах команд. Анализ логов часто выявляет специфические ошибки, связанные с памятью или питанием.
Часто задаваемые вопросы
Как узнать, какой драйвер используется в Linux: открытый или проприетарный?
Для этого выполните команду lspci -k | grep -A 2 -i vga. Если в строке "Kernel Driver in Use" указано nvidia, amdgpu или i915, а не nouveau или vesa, то используется полноценный драйвер. Для NVIDIA также можно проверить наличие файла /proc/driver/nvidia/version.
Что делать, если glxinfo показывает llvmpipe вместо видеокарты?
Это означает, что аппаратное ускорение отключено или не работает. Проверьте, загружен ли модуль драйвера через lsmod. Убедитесь, что Secure Boot отключен в BIOS/UEFI, если вы используете проприетарный драйвер, который не подписан. Также попробуйте переустановить Mesa и драйверы.
Можно ли проверить драйвер видеокарты без терминала в Linux?
В некоторых средах (GNOME, KDE) есть утилиты типа "Просмотр системы" или "О системе", где в разделе "Оборудование" может быть указана модель видеокарты. Однако точная информация о версии драйвера и загруженности модуля обычно доступна только через терминал или специализированные GUI-утилиты, такие как GPU Screen или HardInfo.
Почему драйвер не загружается после обновления ядра?
Часто это происходит потому, что модуль драйвера был скомпилирован под старое ядро, а новое ядро еще не имеет соответствующего модуля. Необходимо переустановить драйвер или пересобрать модули с помощью dkms, чтобы они соответствовали текущей версии ядра.