nvidia-settings — тонкая GTK-обёртка над NvAPI: сама она ничего не рисует, а спрашивает драйвер через библиотеки из nvidia-utils. Поэтому окно падает не из-за графического интерфейса, а из-за одного из трёх слоёв: X-сессия, session bus или несовпадение версий библиотек с загруженным модулем. 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» попадает всё, что пришло не из системного пакета: сборка из 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 заданной версии.
Связь простая: приложению нужна шина сессии, а не системная. У пользователя с запущенным рабочим столом она есть — её поднимает 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.
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 на них не отражается.
Почти никогда. Сообщение означает, что приложение не дошло до NvAPI: нет DISPLAY, нет session bus, запуск от root или из неграфического окружения. Начни с nvidia-smi — если она отвечает, драйвер цел, и чинить нужно окружение запуска.
Приложение стартовало, но не прочитало свойства. Проверь версии nvidia-utils и модуля ядра, перезапусти compositor, попробуй запустить из терминала — stderr покажет, на чём именно оно остановилось. Под Wayland пустое окно с Xwayland считается почти нормой.
Флагом -q без запуска GUI: nvidia-settings -q CurrentMetaMode покажет разрешение, частоту и pixelaspect. Дополнительно можно сверить частоту развёртки в настройках монитора и вывод xrandr.
Переустановка GUI-обёртки проблему не лечит — чинить нужно слой ниже. Выполни sudo pacman -Syu, пересобери initramfs через mkinitcpio -P, перезагрузись и проверь lsmod | grep nvidia. Если и после этого ошибка на месте, смотри логи Xorg и проверь, не запускается ли вместо системного пакета portable-копия.
Падение nvidia-settings почти никогда не означает поломку драйвера: сначала проверь nvidia-smi, lsmod, DISPLAY и session bus, а потом уже версии nvidia-utils и модуля ядра. Отдельная ловушка — portable-сборка из snap или flatpak с собственными библиотеками, чьи ошибки не имеют отношения к твоей системе. Под Wayland приложение живёт через Xwayland, и пустое окно там лечится переходом на Xorg-сессию.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии