NVIDIA Optimus (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
NVIDIA Optimus
. Дата последней синхронизации: 26 июня 2025. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Bumblebee (Русский)
Nouveau (Русский)
NVIDIA (Русский)
PRIME
NVIDIA Optimus
— технология, обеспечивающая совместную работу интегрированной графики и дискретной графики NVIDIA на ноутбуках. Сначала необходимо установить подходящие
драйверы
[
ссылка недействительна
: раздел не найден]
для обоих видеокарт.
Доступные методы
Есть несколько способов организовать работу интегрированной и дискретной графики:
#Использование только встроенной графики
— позволяет сэкономить энергию за счёт полного отключения графики NVIDIA.
#Использование только графики NVIDIA
— даёт более высокую производительность, но и быстрее расходует заряд батареи. Здесь используется тот же базовый процесс, что и в вариантах с
optimus-manager
и
nvidia-xrun
. Его следует использовать для решения проблем и проверки общей функциональности, прежде чем прибегать к одному из более автоматизированных подходов.
Использование и интегрированной, и дискретной графики (с отключением дискретной графики, когда она не используется):
#Использование PRIME render offload
— официальный метод NVIDIA для поддержки переключаемой графики.
#Использование optimus-manager
— переключает графику одной командой (для применения изменений нужно перезайти в систему). Также поддерживает гибридный режим с PRIME render offload. Позволяет получить максимальную производительность графики NVIDIA и отключает её, когда она не используется. С версии 1.4 также поддерживается комбинация AMD+NVIDIA.
#Использование nvidia-xrun
— запускает отдельную X-сессию на другом TTY с графикой NVIDIA. Позволяет получить максимальную производительность графики NVIDIA и отключает её, когда она не используется.
#Использование Bumblebee
— подобно Windows, позволяет запускать отдельные приложения на графике NVIDIA, используя интегрированную графику для всего остального. Однако реализация Bumblebee имеет проблемы с производительностью.
#Использование switcheroo-control
— похоже на Bumblebee, но для
GNOME
. Позволяет задать предпочтительную графику через
ярлыки приложений
, а также позволяет вручную запускать любое приложение на NVIDIA через меню правой кнопки мыши.
#Использование nouveau
— по сравнению с проприетарным драйвером NVIDIA хуже производительность и могут быть проблемы с ждущим режимом.
#Использование EnvyControl
— похоже на optimus-manager, но не требует обширной настройки или наличия демона, работающего в фоновом режиме, а также установки патченого GDM, если вы используете GNOME.
#Использование NVidia-eXec
— похоже на Bumblebee, но без проблем с производительностью. Работает как на Xorg, так и на Wayland. Этот пакет является экспериментальным и в настоящее время тестируется только под GNOME/GDM.
#Использование nvidia-switch
— похоже на nvidia-xrun, но не требует изменения TTY, переключения будут осуществляться при входе и выходе в экранном менеджере. Этот пакет тестируется в Debian, но, как и nvidia-xrun, он должен работать во всех Linux-системах.
Примечание
Все эти варианты являются взаимоисключающими. Если вы протестируете один способ и решите попробовать другой, то перед использованием другого способа убедитесь, что все изменения в настройках, сделанные для предыдущего способа, были убраны, иначе могут случиться конфликты и неопределённое поведение.
Использование только встроенной графики
Если вы хотите использовать только определённый GPU без переключения между ними, поищите соответствующую настройку в BIOS — там должна быть опция отключения одного из GPU. Некоторые ноутбуки позволяют отключить только дискретную графику или наоборот, но проверить всё равно стоит.
Если BIOS не позволяет отключить графику NVIDIA, её можно отключить через Linux, как описано в разделе
Гибридная графика#Полное отключение питания дискретного GPU
.
Использование дискретной графики только для CUDA
Если вы хотите использовать графику NVIDIA для CUDA, но не для рендеринга, достаточно перед запуском CUDA-приложения убедиться, что дискретная графика NVIDIA включена. Подробнее в разделе
Гибридная графика#Полное отключение питания дискретного GPU
.
При запуске CUDA-приложения автоматически подгрузятся нужные модули ядра. Перед отключением дискретной графики модули
nvidia
нужно будет выгрузить:
# rmmod nvidia_uvm
# rmmod nvidia
Использование только графики NVIDIA
Проприетарный драйвер NVIDIA может быть настроен как «primary rendering provider». Он также имеет заметные проблемы с разрывом экрана, если не включить prime sync, включив
NVIDIA (Русский)#DRM kernel mode setting
, смотрите
[1]
для более подробной информации. Он позволяет использовать дискретную графику и имеет (по состоянию на
январь 2017 года
) заметное преимущество в производительности по сравнению с драйвером nouveau.
Сначала
установите драйвер NVIDIA
и
xorg-xrandr
. Затем настройте
/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
, параметры которого будут объединены со стандартным
/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
для обеспечения совместимости с этой установкой.
Примечание
В некоторых системах эта настройка нарушает автоматическое определение параметров монитора драйверами nvidia через файл EDID. Обходной путь описан в разделе
#Неправильное разрешение экрана, ошибки EDID в Xorg.log
.
/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
Section "OutputClass"
    Identifier "intel"
    MatchDriver "i915"
    Driver "modesetting"
EndSection

Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowEmptyInitialConfiguration"
    Option "PrimaryGPU" "yes"
    ModulePath "/usr/lib/nvidia/xorg"
    ModulePath "/usr/lib/xorg/modules"
EndSection
Затем добавьте эти две строки в начале файла
~/.xinitrc
:
~/.xinitrc
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
Перезагрузитесь для загрузки драйверов, и после этого X должен успешно запуститься.
Если DPI экрана неверный, добавьте также такую строку:
xrandr --dpi 96
Если при загрузке X появился черный экран, удостоверьтесь, что в файле ~/.xinitrc нет & перед xrandr. Если & есть, то видимо оконный менеджер запускается раньше, чем команда xrandr завершает выполнение, что и приводит к черному экрану.
Экранные менеджеры
Если вы используете
экранный менеджер
, то вместо
~/.xinitrc
нужно создать или отредактировать тот скрипт настройки дисплея, который используется вашим экранным менеджером.
LightDM
Для
LightDM
:
/etc/lightdm/display_setup.sh
#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
Сделайте скрипт
исполняемым
.
Теперь настройте LightDM для запуска скрипта, отредактировав раздел [Seat:*] в /etc/lightdm/lightdm.conf:
/etc/lightdm/lightdm.conf
[Seat:*]
display-setup-script=/etc/lightdm/display_setup.sh
После перезагрузки экранный менеджер должен успешно запуститься.
SDDM
Для
SDDM
(который используется по умолчанию для
KDE
):
/usr/share/sddm/scripts/Xsetup
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
GDM
Для
GDM
создайте два файла
.desktop
:
/usr/share/gdm/greeter/autostart/optimus.desktop
/etc/xdg/autostart/optimus.desktop
[Desktop Entry]
Type=Application
Name=Optimus
Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer
Убедитесь, что GDM
использует X в качестве бэкенда по умолчанию
.
Проверка 3D
Чтобы проверить, что графика NVIDIA действительно используется, установите
mesa-utils
и запустите:
$ glxinfo | grep NVIDIA
Дополнительная информация
Более подробная информация есть в официальной документации NVIDIA:
[2]
.
Использование переключаемой графики
Использование PRIME render offload
С выходом драйвера NVIDIA
версии 435.17
появилась возможность использовать PRIME Render Offload.
xf86-video-modesetting
,
xf86-video-amdgpu
(450.57), и
xf86-video-intel
(455.38) официально поддерживаются как iGPU драйвера.
Чтобы запустить программу на карточке от NVIDIA, вы можете использовать
prime-run
- скрипт из
nvidia-prime
:
$ prime-run glxinfo | grep "OpenGL renderer"
$ prime-run vulkaninfo
Подробнее в разделе
PRIME#PRIME render offload
.
Использование nouveau
Смотрите статьи
PRIME
и
Nouveau (Русский)
.
Использование Bumblebee
Смотрите статью
Bumblebee (Русский)
.
Использование switcheroo-control
Смотрите раздел
PRIME#GNOME integration
[
ссылка недействительна
: раздел не найден]
.
Использование nvidia-xrun
Смотрите статью
nvidia-xrun (Русский)
.
Использование optimus-manager
Смотрите
официальную документацию Optimus-manager
.
Использование EnvyControl
Смотрите
официальную документацию EnvyControl
.
Использование NVidia-eXec
Смотрите
официальную документацию NVidia-eXec
.
Использование nvidia-switch
Смотрите
официальную документацию nvidia-switch
.
Решение проблем
Тиринг и неработающий VSync
Включите
DRM kernel mode setting
, который в свою очередь включит синхронизацию PRIME и исправит разрывы изображения.
См. также подробности в
обсуждении
на официальном форуме.
Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)
Добавьте
параметр ядра
rcutree.gp_init_delay=1
.
[3]
[4]
Неправильное разрешение экрана, ошибки EDID в Xorg.log
Эта ошибка возникает когда драйвер
nvidia
не определяет EDID для дисплея. Необходимо вручную указать путь к файлу EDID или предоставить ту же информацию подобным образом.
Для предоставления пути к файлу EDID отредактируйте раздел "Device" для NVIDIA в Xorg.conf, добавив эти строки.
Не забудьте изменить поля в соответствии с вашей системой
:
/etc/X11/xorg.conf
Section "Device"
    Option "ConnectedMonitor" "CRT-0"
    Option "CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid"
    Option "IgnoreEDID" "false"
    Option "UseEDID" "true"
EndSection
Если Xorg не запускается попробуйте поменять ссылки CRT на DFB. card0 это идентификатор чипа Intel, который подключен к дисплею с помощью LVDS. Если расположение аппаратных средств отличается, значение пользовательского EDID может быть другим. Путь же будет начинаться с /sys/class/drm.
Также можно сгенерировать EDID с помощью инструментов вроде
read-edid
и настроить драйвер на использование сгенерированного файла. Можно использовать даже modelines, но тогда не забудьте изменить
UseEDID
и
IgnoreEDID
.
Неправильное разрешение без ошибок EDID
nvidia-xconfig
мог сгенерировать неверные настройки в
xorg.conf
, в частности, неверную частоту обновления монитора, что ограничивает возможные разрешения. Попробуйте закомментировать строки
HorizSync
/
VertRefresh
. Если это поможет, то, вероятно, вы также можете удалить всё остальное не упомянутое в этой статье.
Проблема блокировки (lspci зависает)
Симптомы: lspci виснет, переход в ждущий режим виснет, выключение виснет, optirun виснет.
Случается на некоторых новых ноутбуках с GTX 965M или подобными, когда используется bbswitch (например, через Bumblebee) или nouveau.
При включении питания дискретной графики может произойти сбой и зависание в коде ACPI (
kernel bug 156341
).
При использовании nouveau отключение управления питанием позволяет избежать этой проблемы.
Для отключения добавьте
параметр ядра
nouveau.runpm=0
.
Обходные пути для некоторых моделей описаны в
issue 764 на GitHub
.
В других случаях вы можете попробовать загрузиться с параметром ядра
acpi_osi="!Windows 2015"
или
acpi_osi=! acpi_osi="Windows 2009"
. (Возможно, стоит сообщить о вашей модели ноутбука в ранее упомянутом issue.)
No screens found
Проверьте вывод этой команды:
$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)
Драйверы NVIDIA поддерживают Optimus с версии 319.12 Beta
[5]
с ядрами 3.9 и новее.
Другое решение — установить драйвер
Intel
для управления экранами, а графику NVIDIA использовать только для запуска 3D-программ через
Bumblebee
.
Случайные зависания "(EE) NVIDIA(GPU-0): WAIT"
При использовании проприетарных драйверов в системе с интегрированной графикой AMD и дискретной графикой NVIDIA в качестве единственной используемой пользователи сообщают о зависаниях до 10 секунд со следующими ошибками в журнале Xorg:
[   219.796] (EE) NVIDIA(GPU-0): WAIT (2, 8, 0x8000, 0x0002e1c4, 0x0002e1cc)
[   226.796] (EE) NVIDIA(GPU-0): WAIT (1, 8, 0x8000, 0x0002e1c4, 0x0002e1cc)
Точная причина происходящего ещё не известна, но, похоже, она связана с конфликтом в том, как интегрированная и выделенная карты взаимодействуют с Xorg.
Обходным решением является использование переключаемой графики — смотрите раздел
PRIME#PRIME render offload
.
"No Devices detected" при использовании optimus-manager
В некоторых случаях
lspci
отображает PCI domain в первой колонке вывода, из-за чего
optimus-manager
имеет проблемы с обработкой
BusID
.
Если у вас чёрный экран и графический интерфейс не появляется или появляется частично или Xorg падает с ошибкой
(EE) - No Devices detected
, смотрите
issue 471 на GitHub
.
Xorg: изображение на внешнем мониторе обновляется только при перемещении мыши
Обходным решением является удаление драйвера Xorg для встроенной графики (например,
xf86-video-amdgpu
или
xf86-video-intel
)
[6]
. Это должно сработать, если порт внешнего монитора (HDMI/DP/USB-C) подключен напрямую к графике NVIDIA.
Совет
Поведение рабочего стола может стать странным (например, переключение виртуальных рабочих столов или Alt-Tab замораживает изображение на внешнем мониторе), что также можно обойти отключением монитора ноутбука.
Низкое энергопотребление (TDP)
Начиная с версии драйвера 530.41 графика NVIDIA может оставаться на низком уровне энергопотребления (
GitHub issue 483
). В драйвере была отключена возможность ручной установки лимита энергопотребления с через
nvidia-smi
, из-за чего многие ноутбуки остаются с плохой производительностью.
Чтобы обойти эту проблему (для поколения Ampere и новее), смотрите
NVIDIA/Tips and tricks#Dynamic Boost
.
Графика NVIDIA не отключается или отключается ненадолго
Некоторые процессы могут держать вашу графику NVIDIA включенной из-за их способа взаимодействия с графическим процессором, что приводит к пробуждению дискретной графики и повышению энергопотребления.
Вы можете проверить состояние графики, выполнив следующую команду:
$ cat /sys/bus/pci/devices/0000\:01\:00.0/power/runtime_status
Если состояние —
active
, вероятно, запущен процесс, который удерживает ваш графический процессор работающим.
Если вы используете монитор температуры вышей графики, обычно он вызывает
nvidia-smi
для получения этой температуры, что будет удерживать ваш графический процессор в активном состоянии.
Вы можете использовать
nvtop
, чтобы проверить, использует ли процесс (например, Xorg) графику NVIDIA, но этот метод работает не во всех случаях. Например, если у вас запущен сервер
Ollama
, он всегда будет поддерживать ваш графический процессор включенным, но не будет отображаться в
nvtop
или вызывать
nvidia-smi
.
Не забудьте также ознакомиться со статьями, относящимися к выбранному вами конкретному методу для лучшей диагностики.