NVIDIA (Русский)
Данная статья описывает процесс установки и настройки проприетарного драйвера графических карт NVIDIA. Для получения информации о драйверах с открытым исходным кодом обратитесь к статье Nouveau (Русский). Также есть отдельная статья для обладателей ноутбуков с гибридной графикой Intel и NVIDIA, см. NVIDIA Optimus (Русский).
Установка
- Если вы не знаете модель установленной видеокарты, воспользуйтесь следующей командой:
$ lspci -k | grep -A 2 -E "(VGA|3D)"
- Определите версию драйвера, необходимую для вашей видеокарты:
- посетив страницу загрузки драйверов на сайте NVIDIA и выбрав свою модель видеокарты;
- используя поиск по кодовому имени (например, NV50, NVC0 и т.д.) на странице в nouveau wiki с кодовыми именами или странице nouveau на GitLab, а затем поискав название модели в списке устаревших графических карт NVIDIA: если вашей карты нет в этом списке, используйте последний доступный драйвер.
- Установите подходящий драйвер для вашей видеокарты: Примечание: При установке dkms прочтите раздел Dynamic Kernel Module Support (Русский)#Установка.
- Для карт Maxwell (NV110/GMXXX) и новее установите пакет nvidia (для ядра linux), nvidia-lts (для ядра linux-lts) или nvidia-dkms (для других ядер).
- Если эти пакеты не работают, в nvidia-betaAUR может быть более новый драйвер с поддержкой вашего оборудования.
- В качестве альтернативы для Turing (NV160/TUXXX) и более новых карт можно установить пакет nvidia-open, который предоставляет открытые модули для ядра linux (для других ядер нужно использовать nvidia-open-dkms).
- На данный момент они имеют бета-качество, так что будут проблемы. В частности, из-за бага nvidia-open они не работают на системах с интегрированной графикой AMD.
- Для карт Kepler (NVE0/GKXXX) установите пакет nvidia-470xx-dkmsAUR. Примечание: Драйвер версии 470 (и более старые) может работать некорректно на системах с процессором Intel 11 поколения и новее и ядром 5.18 (или новее) из-за несовместимости с функцией безопасности Indirect Branch Tracking. Вы можете отключить её, добавив параметр ядра
ibt=off
в настройках загрузчика. Имейте в виду, что она отвечает за защиту от целого класса уязвимостей. - Если у вас ещё более старая модель, обратитесь к разделу #Неподдерживаемые драйвера.
- Для карт Maxwell (NV110/GMXXX) и новее установите пакет nvidia (для ядра linux), nvidia-lts (для ядра linux-lts) или nvidia-dkms (для других ядер).
- Для поддержки 32-разрядных приложений также необходимо установить соответствующий пакет nvidia lib32 из репозитория multilib (например, lib32-nvidia-utils).
- Удалите
kms
из массиваHOOKS
в файле/etc/mkinitcpio.conf
и пересоберите образ initramfs. Это предотвратит добавление модуляnouveau
в initramfs. - Перезагрузите систему. Пакет nvidia-utils содержит файл, который добавляет модуль
nouveau
в чёрный список, поэтому перезагрузка необходима.
После установки драйвера можно перейти к разделу #Настройка Xorg или #Wayland.
Неподдерживаемые драйвера
Если у вас совсем старая видеокарта, NVIDIA больше не поддерживает драйвера для неё. Это означает, что последние доступные для неё драйвера официально не поддерживают текущую версию Xorg. В таком случае проще использовать драйвер nouveau, который поддерживает старые видеокарты и текущую версию Xorg.
Однако устаревшие драйверы NVIDIA всё ещё доступны и могут предоставлять более хорошую стабильность или производительность 3D.
- Для карт Fermi (NVC0/GF1XX) установите пакет nvidia-390xx-dkmsAUR.
- Для карт Tesla (NV50/G80-90-GT2XX) установите пакет nvidia-340xx-dkmsAUR.
- Карты Curie (NV40/G70) и более старые не имеют пакетов для Arch Linux.
Собственное ядро
Убедитесь, что ядро собрано с опцией CONFIG_DRM_SIMPLEDRM=y
, а при использовании CONFIG_DEBUG_INFO_BTF
в PKGBUILD должно быть это (начиная с ядра 5.16):
install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids
DRM kernel mode setting
Поскольку NVIDIA не поддерживает автоматический поздний запуск KMS, для корректной работы композиторов Wayland или для запуска Xorg без прав root необходимо включить DRM (Direct Rendering Manager) kernel mode setting.
Для включения добавьте параметр модуля ядра modeset=1
для модуля nvidia_drm
.
Перезагрузитесь и проверьте, что параметр применился:
# cat /sys/module/nvidia_drm/parameters/modeset
Команда должна вывести Y
.
С версии 545 можно для того же модуля добавить экспериментальный параметр fbdev=1
, который указывает драйверу NVIDIA предоставить собственное устройство фреймбуфера вместо того, чтобы полагаться на efifb
или vesafb
, которые не работают под simpledrm
.
В более старых версиях драйвера или при отсутствии параметра fbdev=1
необходимо прописать nvidia_drm.modeset=1
строго через параметры ядра, чтобы отключить simpledrm
[1] (подробнее в FS#73720).
-
fbdev=1
имеет проблемы, которые, похоже, исправлены только с версии 550 (смотрите Talk:NVIDIA#Framebuffer consoles experimental support). - Драйвера NVIDIA до версии 470 (например nvidia-390xx-dkmsAUR) не поддерживают аппаратное ускорение в Xwayland, так что у приложений, не являющихся родными для Wayland, может быть плохая производительность в Wayland-сеансах.
Ранняя загрузка
Для базовой функциональности достаточно добавить параметр ядра. Если вы хотите, чтобы он загружался как можно раньше, или замечаете проблемы с запуском (например, модуль ядра nvidia
загружается после экранного менеджера), вы можете добавить nvidia
, nvidia_modeset
, nvidia_uvm
и nvidia_drm
в initramfs.
mkinitcpio
Если вы используете mkinitcpio, добавьте модули как описано в разделе mkinitcpio (Русский)#MODULES.
После добавления не забывайте запускать mkinitcpio каждый раз после обновления пакета nvidia. Можно использовать #Хук pacman для автоматизации этого действия.
Booster
Если вы используете Booster, смотрите Booster#Early module loading.
Хук pacman
*-dkms
он не требуется, потому что их обновление автоматически запускает mkinitcpio.Чтобы не забывать обновлять initramfs после обновления драйвера NVIDIA, вы можете использовать хук pacman:
/etc/pacman.d/hooks/nvidia.hook
[Trigger] Operation=Install Operation=Upgrade Operation=Remove Type=Package Target=nvidia Target=linux # Измените "linux" в строке выше, если вы используете другое ядро [Action] Description=Update NVIDIA module in initcpio Depends=mkinitcpio When=PostTransaction NeedsTargets Exec=/bin/sh -c 'while read -r trg; do case $trg in linux*) exit 0; esac; done; /usr/bin/mkinitcpio -P'
Пропишите в Target
тот пакет, который вы установили в шагах выше (то есть, например, nvidia или nvidia-lts).
Exec
сделано для того, чтобы избежать многократного запуска mkinitcpio в случае одновременного обновления пакетов nvidia
и linux
. Если вас это не беспокоит, строки Target=linux
и NeedsTargets
можно убрать, а строку Exec
сократить до простого Exec=/usr/bin/mkinitcpio -P
.Аппаратное декодирование видео
Аппаратное декодирование видео с помощью VDPAU поддерживается на картах серии GeForce 8 и новее. Аппаратное декодирование видео с помощью NVDEC поддерживается на картах Fermi (~400 серии) и новее. Подробности смотрите в статье Аппаратное ускорение видео.
Аппаратное кодирование видео с помощью NVENC
Для NVENC нужен модуль nvidia_uvm
и файлы устройств в /dev
.
Пакеты с последней версией драйвера содержат правила udev, которые создают нужные файлы автоматически, так что дополнительные действия не требуются.
Если у вас старый драйвер (например, nvidia-340xx-dkmsAUR), вам нужно создать файлы устройств самостоятельно. Вызов утилиты nvidia-modprobe
создаст их. Вы можете создать /etc/udev/rules.d/70-nvidia.rules
для автоматического её запуска:
/etc/udev/rules.d/70-nvidia.rules
ACTION=="add", DEVPATH=="/bus/pci/drivers/nvidia", RUN+="/usr/bin/nvidia-modprobe -c 0 -u"
Настройка Xorg
Проприетарный драйвер NVIDIA не нуждается в файле конфигурации сервера Xorg. Вы можете запустить X для проверки корректной работы сервера Xorg без файла конфигурации. Однако может потребоваться создать файл (предпочтительнее /etc/X11/xorg.conf.d/20-nvidia.conf
, чем /etc/X11/xorg.conf
) для тонкой настройки некоторых параметров. Его можно сгенерировать инструментом конфигурации Xorg от NVIDIA или создать вручную. Если он создаётся вручную, конфигурация в нём может быть минимальной (в том смысле, что она будет содержать только базовые настройки сервера Xorg), или она может включать в себя ряд настроек, которые могут обходить автоматически найденные или предварительно заданные настройки.
Автоматическая настройка
Пакет NVIDIA включает в себя автоматический инструмент для создания файла конфигурации сервера Xorg (xorg.conf
) и может быть запущен путём выполнения:
# nvidia-xconfig
Данная команда автоматически обнаруживает и создаёт (или изменяет существующую) конфигурацию /etc/X11/xorg.conf
в соответствии с текущим аппаратным обеспечением.
Если есть строка с указанием загрузки DRI, убедитесь, что она закомментирована:
# Load "dri"
Проверьте ещё раз /etc/X11/xorg.conf
и убедитесь, что глубина по умолчанию, горизонтальная синхронизация, частота кадров и разрешение допустимы.
nvidia-settings
Пакет nvidia-settings позволяет редактировать большинство опций через консоль или графическую оболочку. Запуск nvidia-settings
без параметров запустит графический интерфейс; доступные опции командной строки описаны в nvidia-settings(1).
Также вы можете запустить nvidia-settings
от имени обычного пользователя и сохранить настройки в ~/.nvidia-settings-rc
, используя кнопку Save Current Configuration на вкладке nvidia-settings Configuration.
Чтобы загрузить настройки из ~/.nvidia-settings-rc
для текущего пользователя:
$ nvidia-settings --load-config-only
Можно добавить эту команду в автозапуск.
- X-сервер может перестать запускаться после сохранения изменений в
nvidia-settings
. Изменение или удаление сгенерированных файлов~/.nvidia-settings-rc
и/или Xorg поможет восстановить работоспособность. -
Cinnamon может переопределять настройки, сделанные в
nvidia-settings
. Вы можете настроить запуск Cinnamon, чтобы предотвратить это.
Ручная настройка
Некоторые настройки (которые не могут быть включены автоматически или с помощью nvidia-settings) можно изменить через файл конфигурации. Для применения изменений нужно будет перезапустить сервер Xorg.
Подробности и доступные опции описаны в NVIDIA Accelerated Linux Graphics Driver README and Installation Guide.
Минимальная настройка
Минимальный блок настроек 20-nvidia.conf
может выглядеть так:
/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device" Identifier "NVIDIA Card" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "GeForce GTX 1050 Ti" EndSection
Отключение лого при запуске
Добавьте "NoLogo"
в секцию Device
:
Option "NoLogo" "1"
Переопределение обнаружения монитора
Опция "ConnectedMonitor"
в секции Device
позволяет переопределить обнаружение монитора при запуске X-сервера, что может сэкономить значительное количество времени при запуске. Доступными опциями являются: "CRT"
для аналоговых подключений, "DFP"
для цифровых мониторов и "TV"
для телевизоров.
Следующая опция заставит драйвер NVIDIA обойти проверки при запуске и распознать монитор как DFP:
Option "ConnectedMonitor" "DFP"
Включение SLI
Взято из NVIDIA driver's README Appendix B: This option controls the configuration of SLI rendering in supported configurations. "Supported configuration" — это компьютер с материнской платой, имеющей сертификацию SLI и 2 или 3 GPU GeForce с сертификацией SLI.
Найдите идентификатор PCI-шины первого GPU с помощью lspci
:
# lspci | grep -E "VGA|3D controller"
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09) 03:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1) 04:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1) 08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)
Добавьте BusID (в данном примере 3) в секцию Device
:
BusID "PCI:3:0:0"
"PCI:<BusID>:0:0"
Добавьте нужное значение режима рендеринга SLI в секции Screen
:
Option "SLI" "AA"
Таблица доступных режимов рендеринга:
Значение | Поведение |
---|---|
0, no, off, false, Single | Использовать только один GPU при рендеринге. |
1, yes, on, true, Auto | Включить SLI и позволить драйверу автоматически выбрать подходящий режим рендеринга. |
AFR | Включить SLI и использовать режим рендеринга чередующихся кадров (alternate frame rendering mode). |
SFR | Включить SLI и использовать режим рендеринга с разделением кадров (split frame rendering mode). |
AA | Включить SLI и использовать сглаживание SLI. Используйте это в сочетании с полным сглаживанием сцены для улучшения качества изображения. |
Также можно использовать nvidia-xconfig для внесения этих изменений в xorg.conf
одной командой:
# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA
Проверка режима SLI:
$ nvidia-settings -q all | grep SLIMode
Attribute 'SLIMode' (arch:0.0): AA 'SLIMode' is a string attribute. 'SLIMode' is a read-only attribute. 'SLIMode' can use the following target types: X Screen.
Если эта конфигурация не работает, может понадобиться использовать PCI Bus ID, который выдаст nvidia-settings
,
$ nvidia-settings -q all | grep -i pcibus
Attribute 'PCIBus' (host:0[gpu:0]): 101. 'PCIBus' is an integer attribute. 'PCIBus' is a read-only attribute. 'PCIBus' can use the following target types: GPU, SDI Input Device. Attribute 'PCIBus' (host:0[gpu:1]): 23. 'PCIBus' is an integer attribute. 'PCIBus' is a read-only attribute. 'PCIBus' can use the following target types: GPU, SDI Input Device.
и закомментировать опцию Primary GPU в настройках xorg,
/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
... Section "OutputClass" ... # Option "PrimaryGPU" "yes" ...
Использование этой конфигурации также может решить проблемы с графической загрузкой.
Несколько мониторов
Смотрите Multihead для получения основной информации.
Использование nvidia-settings
Можно использовать nvidia-settings для настройки нескольких мониторов.
Для настройки через командную строку сперва узнайте CurrentMetaMode
:
$ nvidia-settings -q CurrentMetaMode
Attribute 'CurrentMetaMode' (hostnmae:0.0): id=50, switchable=no, source=nv-control :: DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}
Сохраните всё после символов ::
и до конца атрибута (в данном примере DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}
) и используйте для перенастройки мониторов с помощью nvidia-settings --assign "CurrentMetaMode=your_meta_mode"
.
ConnectedMonitor
Если драйвер не определил второй монитор, вы можете принудительно указать его с помощью опции ConnectedMonitor.
/etc/X11/xorg.conf
Section "Monitor" Identifier "Monitor1" VendorName "Panasonic" ModelName "Panasonic MICRON 2100Ex" HorizSync 30.0 - 121.0 # this monitor has incorrect EDID, hence Option "UseEDIDFreqs" "false" VertRefresh 50.0 - 160.0 Option "DPMS" EndSection Section "Monitor" Identifier "Monitor2" VendorName "Gateway" ModelName "GatewayVX1120" HorizSync 30.0 - 121.0 VertRefresh 50.0 - 160.0 Option "DPMS" EndSection Section "Device" Identifier "Device1" Driver "nvidia" Option "NoLogo" Option "UseEDIDFreqs" "false" Option "ConnectedMonitor" "CRT,CRT" VendorName "NVIDIA Corporation" BoardName "GeForce 6200 LE" BusID "PCI:3:0:0" Screen 0 EndSection Section "Device" Identifier "Device2" Driver "nvidia" Option "NoLogo" Option "UseEDIDFreqs" "false" Option "ConnectedMonitor" "CRT,CRT" VendorName "NVIDIA Corporation" BoardName "GeForce 6200 LE" BusID "PCI:3:0:0" Screen 1 EndSection
Дублирование устройств с опцией Screen
описывает использование сервером Xorg двух мониторов на одной карте без технологии TwinView
. Учтите, что nvidia-settings
будет вырезать любое упоминание опции ConnectedMonitor
.
TwinView
Если вы хотите только один большой экран вместо двух, установите значение опции TwinView
в 1
. Эта опция должна использоваться, если вы хотите композитинг. Технология TwinView работает только на базе одной карты, когда все мониторы подключены к одной карте.
Option "TwinView" "1"
Пример конфигурации:
/etc/X11/xorg.conf.d/10-monitor.conf
Section "ServerLayout" Identifier "TwinLayout" Screen 0 "metaScreen" 0 0 EndSection Section "Monitor" Identifier "Monitor0" Option "Enable" "true" EndSection Section "Monitor" Identifier "Monitor1" Option "Enable" "true" EndSection Section "Device" Identifier "Card0" Driver "nvidia" VendorName "NVIDIA Corporation" #refer to the link below for more information on each of the following options. Option "HorizSync" "DFP-0: 28-33; DFP-1: 28-33" Option "VertRefresh" "DFP-0: 43-73; DFP-1: 43-73" Option "MetaModes" "1920x1080, 1920x1080" Option "ConnectedMonitor" "DFP-0, DFP-1" Option "MetaModeOrientation" "DFP-1 LeftOf DFP-0" EndSection Section "Screen" Identifier "metaScreen" Device "Card0" Monitor "Monitor0" DefaultDepth 24 Option "TwinView" "True" SubSection "Display" Modes "1920x1080" EndSubSection EndSection
Дополнительная информация о технологии TwinView (англ.).
Если вы имеете несколько карт, которые совместимы с технологией SLI, вы можете использовать несколько мониторов, присоединённых к разным картам (пример: две карты в режиме SLI с подключением монитора на каждой карте). Опция "MetaModes" совместно с режимом SLI Mosaic позволяет это. Ниже указана конфигурация, которая работает для вышеупомянутого примера и безупречно запускает GNOME.
/etc/X11/xorg.conf.d/10-monitor.conf
Section "Device" Identifier "Card A" Driver "nvidia" BusID "PCI:1:00:0" EndSection Section "Device" Identifier "Card B" Driver "nvidia" BusID "PCI:2:00:0" EndSection Section "Monitor" Identifier "Right Monitor" EndSection Section "Monitor" Identifier "Left Monitor" EndSection Section "Screen" Identifier "Right Screen" Device "Card A" Monitor "Right Monitor" DefaultDepth 24 Option "SLI" "Mosaic" Option "Stereo" "0" Option "BaseMosaic" "True" Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0" SubSection "Display" Depth 24 EndSubSection EndSection Section "Screen" Identifier "Left Screen" Device "Card B" Monitor "Left Monitor" DefaultDepth 24 Option "SLI" "Mosaic" Option "Stereo" "0" Option "BaseMosaic" "True" Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0" SubSection "Display" Depth 24 EndSubSection EndSection Section "ServerLayout" Identifier "Default" Screen 0 "Right Screen" 0 0 Option "Xinerama" "0" EndSection
Вертикальная синхронизация при использовании TwinView
Если вы используете TwinView и вертикальную синхронизацию (опция "Sync to VBlank" в nvidia-settings), вы заметите, что только один экран корректно использует синхронизацию, если у вас нет двух одинаковых мониторов. Несмотря на то, что nvidia-settings имеет необходимую опцию для выбора, какой именно экран синхронизировать (опция "Sync to this display device"), это не всегда работает. Решением будет добавить следующие переменные окружения при запуске, например в /etc/profile
:
export __GL_SYNC_TO_VBLANK=1 export __GL_SYNC_DISPLAY_DEVICE=DFP-0 export VDPAU_NVIDIA_SYNC_DISPLAY_DEVICE=DFP-0
Вы можете изменить DFP-0
на ваш используемый монитор (DFP-0
это DVI порт, а CRT-0
- VGA порт). Идентификатор для вашего монитора можно найти с помощью nvidia-settings в секции "X Server XVideoSettings".
Запуск игр при использовании TwinView
Если вы захотите сыграть в полноэкранные игры при использовании TwinView, вероятно вы заметите, что игры распознают два экрана как один большой экран. Хотя это технически правильно (виртуальный экран X в действительности соответствует размеру ваших экранов вместе), вы, вероятно, не захотите так играть.
Чтобы исправить это для SDL, попробуйте:
export SDL_VIDEO_FULLSCREEN_HEAD=1
Для OpenGL добавьте Metamodes в свой xorg.conf в секции Device
и перезапустите X:
Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"
Ещё один метод, который может работать самостоятельно или в сочетании с упомянутыми выше — запуск игр в отдельном X-сервере.
Режим Mosaic
Режим Mosaic — единственный способ использовать более чем два монитора на нескольких видеокартах с использованием композитинга. Ваш оконный менджер может распознать, а может и не распознать различия между мониторами. Режим Mosaic требует правильной конфигурации SLI. Даже если используется режим Base без SLI, видеокарты должны быть совместимы с SLI.
Base Mosaic
Режим Base Mosaic работает с картами Geforce 8000 series или выше. Его нельзя включить через графический интерфейс nvidia-setting. Вы должны использовать команду nvidia-xconfig либо отредактировать xorg.conf
самостоятельно. Опция Metamodes должна быть указана. Следующий пример для четырёх DFP мониторов в конфигурации 2х2, каждый запущен в разрешении 1920x1024, по два подключенных DFP монитора на две карты:
$ nvidia-xconfig --base-mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
SLI Mosaic
Если вы имеете конфигурацию SLI и все графические ускорители серии Quadro FX 5800, Quadro Fermi или новее, тогда вы можете использовать режим SLI Mosaic. он может быть включен через графический интерфейс nvidia-settings или через командную строку:
$ nvidia-xconfig --sli=Mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
Wayland
Смотрите Wayland (Русский)#Требования.
Дополнительные параметры конфигурации можно найти на страницах вики или в документации соответствующего композитора.
Информацию об Xwayland смотрите в разделе Wayland (Русский)#Xwayland.
Если вы используете GDM, смотрите GDM#Wayland and the proprietary NVIDIA driver.
Советы и рекомендации
Смотрите NVIDIA/Советы и рекомендации.
Решение проблем
Смотрите NVIDIA/Решение проблем.