Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Не открывается nvidia-settings: разбор ошибок и dbus

nvidia-settings — тонкая GTK-обёртка над NvAPI: сама она ничего не рисует, а спрашивает драйвер через библиотеки из nvidia-utils. Поэтому окно падает не из-за графического интерфейса, а из-за одного из трёх слоёв: X-сессия, session bus или несовпадение версий библиотек с загруженным модулем. nvidia-smi при этом продолжает работать, и именно это сбивает с толку. Ниже — разбор каждой ошибки по симптому.

Почему nvidia-settings падает, хотя nvidia-smi работает?

Два эти приложения используют драйвер по-разному. nvidia-smi — консольная утилита: ей достаточно устройств /dev/nvidia* и библиотек, которые ставит пакет nvidia-utils, а X-сервер и dbus не нужны вообще. nvidia-settings — приложение GTK3, которому дополнительно нужны X-дисплей, шина сессии и набор библиотек вроде libnvidia-cfg.so и libnvidia-gtk3.so.

В extra пакет nvidia-settings зависит от jansson, gtk3, libxv, libvdpau, libxnvctrl и nvidia-utils. Зависимость на nvidia-utils — это и гарантия совпадения версий, и главный источник проблем: если nvidia-utils обновился, а модуль ядра остался старым (или наоборот), приложение падает с ошибкой, хотя nvidia-smi может ещё работать со старым модулем. Про то, как драйвер соотносится с остальным стеком и почему версии разъезжаются, я писал в статье про CUDA на Arch, а подбор версии драйвера под ядро разобран в этой.

Какие ошибки на терминале означают что именно сломано?

Запускай nvidia-settings из того же терминала, из которого запускается твой рабочий стол, и читай stderr — окно само объяснить ничего не сможет.

ERROR: NVIDIA driver is not loaded — приложение не дошло до драйвера вообще. Почти всегда виновата среда: нет переменной DISPLAY, запуск не из X-сессии (ssh, cron, TTY, контейнер) или запуск от root, у которого своя сессия и свой dbus.

Failed to initialize NvAPI и Unable to communicate with the NVIDIA driver — NvAPI не смог открыть /dev/nvidiactl либо не нашёл свою библиотеку. Проверяй две вещи: есть ли устройства и совпадает ли версия.

Failed to initialize libnvidia-cfg.so: ... undefined symbol — самая честная ошибка про версии. Библиотека из nvidia-utils не совпадает с модулем ядра. Лечится полным обновлением и пересборкой initramfs, а не переустановкой пакета nvidia-settings.

Error: Failed to initialize libnvctrl или жалоба на отсутствие libxnvctrl.so — та же история, только на стороне библиотеки управления GPU.

Белое или пустое окно без ошибки в консоли — приложение стартовало, но не смогло прочитать свойства. Обычно это либо тот же сдвиг версий, либо конфликт с compositor: попробуй закрыть его, перезапустить сессию и запустить заново.

С чего начать диагностику?

Один блок команд отвечает почти на все вопросы сразу:

nvidia-smi
lsmod | grep nvidia
echo "DISPLAY=$DISPLAY WAYLAND=$XDG_SESSION_TYPE DBUS=$DBUS_SESSION_BUS_ADDRESS"
ps -u "$USER" -o comm | grep -E 'Xorg|Xwayland'
ldconfig -p | grep -E 'libnvidia-cfg|libnvidia-gtk3|libxnvctrl'

Читай вывод так: nvidia-smi работает — значит, модуль на месте, а сбой живёт в userspace. Пустой lsmod — проблема с модулем ядра, и до nvidia-settings дело не доходит. Пустая DISPLAY или отсутствие строки Xorg/Xwayland — ты запустил приложение вне графической сессии. Пустой DBUS_SESSION_BUS_ADDRESS — нет session bus, объясняется ниже.

Отдельная строка, которую стоит ловить в выводе nvidia-smi, — Failed to initialize NVML: Driver/library version mismatch. Это прямое подтверждение рассинхрона между модулем ядра и библиотеками nvidia-utils: обновление прошло наполовину, и лечится полным sudo pacman -Syu с перезагрузкой, а не переустановкой пакета.

Проверка после того как приложение ожило, делается флагом -q:

nvidia-settings -q CurrentMetaMode

Он печатает режим, разрешение и частоту refresh без единого окна — удобно, когда GUI под Wayland открывается криво. Если модуль ядра трогали, а библиотеки под него не пересобрали, не забудь про sudo mkinitcpio -P и перезагрузку: логи Xorg в таких случаях тоже полезно почитать.

Что делать с portable-сборкой?

Под «portable» попадает всё, что пришло не из системного пакета: сборка из snap или flatpak, копия из другого дистрибутива, самостоятельно скомпилированный или просто разобранный посторонний бинарник. Такая копия несёт внутри свои библиотеки и часто свой dbus, а драйвера NVIDIA в ней может не быть вообще.

Симптом характерный: приложение падает с ошибкой про NvAPI или libnvidia-cfg на машине, где nvidia-smi отлично работает, и подсказки из логов не имеют отношения к твоей системе. Проверить, откуда запускается бинарник, можно так:

which -a nvidia-settings
ldd "$(which nvidia-settings)" 2>/dev/null | grep -iE 'nvidia|dbus'

В выводе не должно быть путей из /snap, /var/lib/flatpak или каталога с твоей самодельной сборкой. Увидел такие — удаляй portable-копию и работай с системным пакетом из extra, потому что только он связан с nvidia-utils заданной версии.

Как nvidia-settings связан с dbus?

Связь простая: приложению нужна шина сессии, а не системная. У пользователя с запущенным рабочим столом она есть — её поднимает dbus-broker или dbus-daemon на пользовательском systemd, и nvidia-settings работает без настройки. Ошибка появляется там, где сессии нет: в cron, по ssh, в голом TTY, в контейнере без проброса /run/user/UID, при запуске через sudo.

Когда session bus не запущен, разово поднять окружение можно вместе с приложением:

dbus-run-session nvidia-settings

Утилита dbus-run-session входит в пакет dbus, так что ничего доустанавливать не нужно — она создаёт временную шину, выполняет команду и убирает шину за собой. Вариант с dbus-launch из пакета dbus-x11 удобен, когда нужно несколько команд под одной шиной, но не забывай: это новая изолированная сессия, а не та, что у рабочего стола.

Через sudo не запускай вообще: у root своя сессия, свой DISPLAY и свой dbus, поэтому ошибка NVIDIA driver is not loaded будет повторяться, пока не уберёшь sudo.

Почему под Wayland nvidia-settings не работает?

nvidia-settings — программа X11, нативно протокол Wayland она не понимает. В Wayland-сессии она работает только через Xwayland, и это порождает отдельный класс симптомов: окно не появляется вообще, открывается через несколько секунд или показывает пустые вкладки, потому что часть значений берётся из расширений X-сервера, которых в композиторе нет.

Проверить, в какой сессии ты находишься, и есть ли мосты, можно одной командой:

echo "$XDG_SESSION_TYPE $DISPLAY"
xrandr --listmonitors

Если XDG_SESSION_TYPE=wayland, а DISPLAY указывает на :0 — Xwayland есть, и приложение запускается, вопрос только в отрисовке. Если DISPLAY пуст, Xwayland в этой сессии не поднят, и nvidia-settings не запустится вовсе. Надёжный путь — переключиться на Xorg-сессию на экране входа (GDM или SDDM позволяют выбрать её в шестерёнке рядом с именем пользователя) и проверить, что конфигурация применяется. Дополнительно полезно понимать разницу: под Xorg приложение меняет настройки через расширение X, а в Wayland-сессии часть параметров живёт в композитре, и правка через GUI на них не отражается.

Частые вопросы

ERROR: NVIDIA driver is not loaded — это поломка драйвера?

Почти никогда. Сообщение означает, что приложение не дошло до NvAPI: нет DISPLAY, нет session bus, запуск от root или из неграфического окружения. Начни с nvidia-smi — если она отвечает, драйвер цел, и чинить нужно окружение запуска.

Почему окно белое или пустое?

Приложение стартовало, но не прочитало свойства. Проверь версии nvidia-utils и модуля ядра, перезапусти compositor, попробуй запустить из терминала — stderr покажет, на чём именно оно остановилось. Под Wayland пустое окно с Xwayland считается почти нормой.

Как проверить, что настройки применились?

Флагом -q без запуска GUI: nvidia-settings -q CurrentMetaMode покажет разрешение, частоту и pixelaspect. Дополнительно можно сверить частоту развёртки в настройках монитора и вывод xrandr.

Что делать, если переустановка nvidia-settings не помогла?

Переустановка GUI-обёртки проблему не лечит — чинить нужно слой ниже. Выполни sudo pacman -Syu, пересобери initramfs через mkinitcpio -P, перезагрузись и проверь lsmod | grep nvidia. Если и после этого ошибка на месте, смотри логи Xorg и проверь, не запускается ли вместо системного пакета portable-копия.

Полезные ресурсы

  • NVIDIA (ArchWiki) — установка драйвера, версии, диагностика ошибок взаимодействия с драйвером.
  • D-Bus (ArchWiki) — сессионные и системные шины, запуск приложений без графической сессии.

Заключение

Падение nvidia-settings почти никогда не означает поломку драйвера: сначала проверь nvidia-smi, lsmod, DISPLAY и session bus, а потом уже версии nvidia-utils и модуля ядра. Отдельная ловушка — portable-сборка из snap или flatpak с собственными библиотеками, чьи ошибки не имеют отношения к твоей системе. Под Wayland приложение живёт через Xwayland, и пустое окно там лечится переходом на Xorg-сессию.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max