Nvidia: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
(не показано 27 промежуточных версий 8 участников)
Строка 15: Строка 15:
В зависимости от того,
В зависимости от того,
какая видеокарта, можно ставить один из поддерживающих её драйверов.
какая видеокарта, можно ставить один из поддерживающих её драйверов.
== Замена драйверов nouveau/nvidia  "на лету" ==
==== Постановка задачи ====
Была поставлена задача загружать для ядра с разными модулями :
Ядро std-def c драйвером nvidia, а ядро un-def с драйвером nouveau.
В процессе исследования, выяснилось, что если загружен ядерный модуль nouveau или nvidia - xorg сам находит и загружает нужный видео драйвер,
без указания его в конфигурационных файлах xorg.
==== Реализация ====
* Устанавливаем в оба ядра модули nvidia и nouveau.
* Создаём файл /etc/modprobe.d/blacklist-nvidia-x11.conf и записываем туда:
<source lang=text>
blacklist nvidia
blacklist nouveau
</source>
;
:Удаляем, если есть в файлах конфигурации все упоминания о том, какой драйвер  применяется - nvidia или nouveau <ref>Если в файле ничего кроме этого ценного нет, то можно и сам файл удалить</ref>
* Создаём файл /etc/rc.d/rc.local следующего содержания:
<source lang=bash>
#!/bin/bash
if [ -n `uname -r | grep std-def` ];then
    modprobe nvidia
else
    modprobe nouveau
fi
</source>
Всё - можно перезагружаться - при выборе ядра un-def у нас теперь используется свободный драйвер nouveau, при использовании std-def используется проприетарный модуль nvidia.<ref>Теоретически этот метод можно применять и в других случаях, например с fflrx/radeon</ref> <ref>Это можно применять и с одним ядром, для быстрого перехода с свободного драйвера на проприетарный  и обратно, просто отредактировав файл /etc/rc.d/rc.local</ref> <ref>Это можно применять и совсем в другом случае, например при подборе нужного модуля Wifi из серии v43 / b44 / wl </ref>
Ссылки по теме:
* [https://lists.altlinux.org/pipermail/sisyphus/2015-December/364539.html Постановка задачи]
* [https://lists.altlinux.org/pipermail/sisyphus/2015-December/364543.html Решение]
{{примечания}}


== Краткий алгоритм установки драйверов серии legacy ==
== Краткий алгоритм установки драйверов серии legacy ==
Строка 31: Строка 77:
* Запускаем X-ы, например {{cmd|telinit 5}}.
* Запускаем X-ы, например {{cmd|telinit 5}}.


: {версия ядра} — это та версия, в которой вы хотите настроить работу драйверов Nvidia.
: {версия ядра} это та версия, в которой вы хотите настроить работу драйверов Nvidia.
 


=== Возможные баги ===
=== Возможные баги ===
Строка 51: Строка 98:
</source>
</source>


Третий, и наиболее правильный cпособ в дистрибутивах на основе бранча p7 и выше в {{path|/etc/sysconfig/xserver}} раскомментировать IGNORE_ABI=yes:
<source lang="bash">
# The Xorg server checks the ABI revision levels of each module that it loads.
# It will normally refuse to load modules with ABI revisions that are newer
# than the server's.
# See Xorg(1) for more information about option.
# Value: yes/no
IGNORE_ABI=yes
</source>


== Видеокарты типа Optimus ==
== Видеокарты типа Optimus ==
{{main|Nvidia optimus, настройка и запуск bumblebee}}
В последнее время появились ноутбуки с несколькими видеокартами (Nvidia+Intel или Radeon+Intel).


В последнее время появились ноутбуки с несколькими видеокартами (Nvidia+Intel или Radeon+Intel)
Для таких видеокарт существует [[Nvidia optimus, настройка и запуск bumblebee|инструкция по подключению]] и [http://lists.altlinux.org/pipermail/community/2011-September/672977.html следующая информация]:


Для таких видеокарт существенна следующая информация:
* По умолчанию монитор показывает картинку с Intel GPU.
* В зависимости от реализации может быть или отсутствовать возможность переключения сигнала между GPU, при этом в новых ноутбуках обычно её нет физически
* Если переключение физически есть, соответствующая настройка может быть или отсутствовать в BIOS (в последнем случае может пригодиться всякое [http://nouveau.freedesktop.org/wiki/Optimus/ switcheroo]).
* Отсутствие переключателя в BIOS заменяется программным Bumblebee или собратьями.
* Задействовать Optimus (чип nvidia или ati) можно через VirtualGL.


http://lists.altlinux.org/pipermail/community/2011-September/672977.html
В нормальных ноутах в BIOS может быть 3 положения переключателя видеокарты: встроенная, optimus и дискретная (nvidia,ati). Здесь достаточно прикрутить программный переключатель, если устроит перезагрузка для переключения X-ов на другую видеокарту (без optimus вообще).


<source lang=text>
== Проприетарный libGL/libglx и память ==
> >> По умолчанию монитор показывает с Intel-контроллера.
История вопроса: [http://lists.altlinux.org/pipermail/community/2014-February/681735.html в списке рассылки Community] и {{altbug|25609}}.
> >> В BIOS-е никаких настроек видеокарты нет.
 
> > Поищите переключение встроенной и дискретной видеокарты.
Суть: при установке проприетарных драйверов происходит подмена GL-библиотек на проприетарные. По непонятной причине многие скомпилированные с libGL программы и библиотеки (в особенности libcairo) потребляют на 10-20 мегабайт (!) RSS больше. Вот небольшой кусок для сравнения (смотрим на gimp, script-fu и nm-appleti, вторая колонка — это RSS):
> В ноутбуке и оптимусом я искал - не нашёл. Насколько я понимаю, в
 
> случае без вывода nvidia на монитор в bios как раз не переключается.
$ tail ps-e-n*
Преключается. В BIOS может не быть настройки.
==> ps-e-nouveau <==
ahttpd          7180 145444  0.0
script-fu        7920 189864  0.0
polkitd        10560 505520  0.0
colord          11388 216252  0.0
nm-applet      17084 805108  0.1
X              28152 122200  0.1
gimp            63512 671152  0.3
 
==> ps-e-nvidia <==
ahttpd          7176 145444  0.0
colord          8900 216084  0.0
polkitd        10560 505520  0.0
script-fu      28404 227524  0.1
  nm-applet      39252 846136  0.2
X              53104 149612  0.3
gimp            85412 1104308  0.5
 
По ссылке видно, что в XFCE может набежать порядка 300 Мб. Это может быть проблемой. Для экономии памяти проще всего использовать nouveau.
 
== Обновление ==
 
Для обновления обеих частей драйвера (ядерной и иксовой) следует применять совокупность команд:
 
apt-get update && apt-get dist-upgrade && update-kernel
 
 
== Борьба с "тирингом" при использовании официальных драйверов ==
 
При использовании "открытых" драйверов (nouveau), наблюдается "тиринг" (tearing) изображения, на официальных же драйверах эту проблему можно решить следующим образом (из терминала):
  nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"
 
Монитор может мерцать секунду-две. Если команда выполнилась без ошибок, нужно проверить, ушла ли проблема (если проблема сохраняется, можно попробовать указать опцию "ForceFullCompositionPipeline" вместо "ForceCompositionPipeline"). Если тиринга больше нет, пропишите данный режим в Xorg.conf, чтобы эта настройка видеокарты применялась при каждом запуске системы, предварительно сделав резервную копию файла xorg.conf:
 
  cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup
 
Затем откройте файл в текстовом редакторе с привилегиями суперпользователя - допустим, с помощью nano:
 
  sudo nano /etc/X11/xorg.conf
 
В разделе Section «Screen» должно быть примерно следующее:
 
  Section "Screen"
    Identifier    "Screen0"
    Device        "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option        "Stereo" "0"
    Option        "metamodes" "nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"
    SubSection    "Display"
        Depth      24
    EndSubSection
  EndSection
 
Если опции "metamodes" нет, добавьте ее с рабочим для себя вариантом.
У некоторых уже есть опция «metamodes» в файле /etc/X11/xorg.conf, как в примере ниже для настройки с двойным монитором:
 
  Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864"
 
Если это так, просто измените строку так, чтобы она выглядела следующим образом:
 
  Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864 { ForceCompositionPipeline = On }"
 
Теперь перезагружаемся и наслаждаемся плавной картинкой.


> > Если Optimus, то у Nvidia физически отсутствует вывода на монитор.
==== Что делать, если у вас отсутствует файл /etc/X11/xorg.conf ====
> > [...]
>
>  Здесь немного описано: https://www.linux.org.ru/wiki/en/Optimus , но
> на какого из шмелей присматриваться - меня как раз тоже интересует.
Ко всем. Их 2.
1. Отсутствие переключетеля в BIOS заменяется программным Bumblebee или
собратьями.
2. Задействовать Optimus(чип nvidia или ati) можно через VirtualGL.


В нормальных ноутах в BIOS может быть 3 положения переключателя видеокарты:
В некоторых случаях может не оказаться файла xorg.conf по умолчанию. Поэтому для его создания открываем nvidia-settings и переходим в раздел X Server Display Configuration, нажимаем кнопку "Save to X Configuration File" (тем самым мы создадим необходимый для нас файл xorg.conf). Так же нужно снять галочку с Merge with existing file (совместить с существующим файлом). Проверьте наличие файла xorg.conf, после чего можно перееходить к настройке.
встроенная, optimus и дискретная(nvidia,ati). Здесь достаточно прикрутить
программный переключатель, если устроит перезагрузка для переключения X-ов на
другую видеокарту (без optimus вообще).
</source>


== Ссылки ==
== Ссылки ==
* [[32-битный OpenGL на 64-битной системе с драйвером NVIDIA]]
* [[Переход на драйверы Nvidia и fglrx]]
* [[Переход на драйверы Nvidia и fglrx]]
* [[Установка_проприетарных_драйверов_NVIDIA_и_ATI]]
* [http://packages.altlinux.org/ru/Sisyphus/srpms/apt-scripts-nvidia apt-scripts-nvidia] (пакет содержит реализацию команды {{cmd|apt-get install-nvidia}})
* [https://lists.altlinux.org/pipermail/sisyphus/2015-October/364339.html анонс nvidia-clean-driver] (удаление ненужных {{pkg|nvidia_glx_*}})
* [[Обновление ОС]]
* [[Обновление ядра]]


[[Категория:Hardware]]
{{Category navigation|title=Видеодрайвера|category=Видеодрайвера|sortkey={{SUBPAGENAME}}}}
[[Категория:Sisyphus]]
[[Категория:Sisyphus]]

Версия от 09:35, 12 октября 2017

Настройка видеокарт Nvidia в Сизифе


Постановка вопроса

На сегодня видеокарты от Nvidia являются одними из самых распространённых. Поддержка карт Nvidia в Linux может осуществляться следующими «драйверами» — модулями Xorg.

  • Свободным модулем vesa — настолько, насколько данная видеокарта поддерживает спецификацию vesa.
  • Модулем поддержки фреймбуфера — fbdev.
  • Свободным модулем nv — поддерживаются не все видеокарты, нет поддержки аппаратного 3D (как и у vesa и у fbdev)
  • Свободным модулем nouveau с поддержкой 3D. Eсть в Сизифе, но модуль ещё сырой.
  • Проприетарные модули Nvidia.

На сегодняшний день политика компании Nvidia такова, что она разделила все свои видеокарты на 5 групп. В зависимости от того, какая видеокарта, можно ставить один из поддерживающих её драйверов.

Замена драйверов nouveau/nvidia "на лету"

Постановка задачи

Была поставлена задача загружать для ядра с разными модулями :

Ядро std-def c драйвером nvidia, а ядро un-def с драйвером nouveau.

В процессе исследования, выяснилось, что если загружен ядерный модуль nouveau или nvidia - xorg сам находит и загружает нужный видео драйвер, без указания его в конфигурационных файлах xorg.

Реализация

  • Устанавливаем в оба ядра модули nvidia и nouveau.
  • Создаём файл /etc/modprobe.d/blacklist-nvidia-x11.conf и записываем туда:
blacklist nvidia
blacklist nouveau
Удаляем, если есть в файлах конфигурации все упоминания о том, какой драйвер применяется - nvidia или nouveau [1]
  • Создаём файл /etc/rc.d/rc.local следующего содержания:
#!/bin/bash


if [ -n `uname -r | grep std-def` ];then
    modprobe nvidia
else
    modprobe nouveau
fi

Всё - можно перезагружаться - при выборе ядра un-def у нас теперь используется свободный драйвер nouveau, при использовании std-def используется проприетарный модуль nvidia.[2] [3] [4]

Ссылки по теме:


  1. Если в файле ничего кроме этого ценного нет, то можно и сам файл удалить
  2. Теоретически этот метод можно применять и в других случаях, например с fflrx/radeon
  3. Это можно применять и с одним ядром, для быстрого перехода с свободного драйвера на проприетарный и обратно, просто отредактировав файл /etc/rc.d/rc.local
  4. Это можно применять и совсем в другом случае, например при подборе нужного модуля Wifi из серии v43 / b44 / wl

Краткий алгоритм установки драйверов серии legacy

Данный алгоритм устарел. В современном Сизифе всё это делается скриптами, но если произошёл сбой в их работе, вы можете сделать эти операции за них.

С недавнего времени xorg-x11-server-1.4 модули legacy вошли в основной пакет Nvidia. Как поменять текущий модуль ядра (все операции требуют прав root)?

  • Выключаем X-ы, например telinit 3,
  • Выгружаем модуль nvidia: rmmod nvidia,
  • Меняем символическую ссылку, например ln -s /lib/modules/nvidia/{версия ядра} /lib/modules/{версия ядра}/nVidia/nvidia.ko,
  • Прописываем в /lib/modules/{версия ядра}/.versions/nvidia: 1.0.9639,
  • depmod -a,
  • modprobe nvidia,
  • Проверяем, что в xorg.conf прописан модуль nvidia,
  • x11setupdrv, (начиная с ALT 5.0 и выше не нужно, т.к. скрипт встроен в запуск X-сервера)
  • Запускаем X-ы, например telinit 5.
{версия ядра} — это та версия, в которой вы хотите настроить работу драйверов Nvidia.


Возможные баги

Иногда (при смене версий пакетов и расхождении ABI ) xorg-x11-server требует, чтобы в /etc/X11/xinit/xserverrc было прописано:

X_server='X -nolisten tcp -ignoreABI'

вместо

X_server='X -nolisten tcp'

Второй способ - в /etc/x11/xorg.conf добавить опцию

Section "ServerFlags"
  Option         "IgnoreABI" "true"
EndSection


Третий, и наиболее правильный cпособ в дистрибутивах на основе бранча p7 и выше в /etc/sysconfig/xserver раскомментировать IGNORE_ABI=yes:

# The Xorg server checks the ABI revision levels of each module that it loads.
# It will normally refuse to load modules with ABI revisions that are newer
# than the server's.
# See Xorg(1) for more information about option.
# Value: yes/no
IGNORE_ABI=yes

Видеокарты типа Optimus

В последнее время появились ноутбуки с несколькими видеокартами (Nvidia+Intel или Radeon+Intel).

Для таких видеокарт существует инструкция по подключению и следующая информация:

  • По умолчанию монитор показывает картинку с Intel GPU.
  • В зависимости от реализации может быть или отсутствовать возможность переключения сигнала между GPU, при этом в новых ноутбуках обычно её нет физически
  • Если переключение физически есть, соответствующая настройка может быть или отсутствовать в BIOS (в последнем случае может пригодиться всякое switcheroo).
  • Отсутствие переключателя в BIOS заменяется программным Bumblebee или собратьями.
  • Задействовать Optimus (чип nvidia или ati) можно через VirtualGL.

В нормальных ноутах в BIOS может быть 3 положения переключателя видеокарты: встроенная, optimus и дискретная (nvidia,ati). Здесь достаточно прикрутить программный переключатель, если устроит перезагрузка для переключения X-ов на другую видеокарту (без optimus вообще).

Проприетарный libGL/libglx и память

История вопроса: в списке рассылки Community и altbug #25609.

Суть: при установке проприетарных драйверов происходит подмена GL-библиотек на проприетарные. По непонятной причине многие скомпилированные с libGL программы и библиотеки (в особенности libcairo) потребляют на 10-20 мегабайт (!) RSS больше. Вот небольшой кусок для сравнения (смотрим на gimp, script-fu и nm-appleti, вторая колонка — это RSS):

$ tail ps-e-n*
==> ps-e-nouveau <==
ahttpd           7180 145444  0.0
script-fu        7920 189864  0.0
polkitd         10560 505520  0.0
colord          11388 216252  0.0
nm-applet       17084 805108  0.1
X               28152 122200  0.1
gimp            63512 671152  0.3
==> ps-e-nvidia <==
ahttpd           7176 145444  0.0
colord           8900 216084  0.0
polkitd         10560 505520  0.0
script-fu       28404 227524  0.1
nm-applet       39252 846136  0.2
X               53104 149612  0.3
gimp            85412 1104308  0.5

По ссылке видно, что в XFCE может набежать порядка 300 Мб. Это может быть проблемой. Для экономии памяти проще всего использовать nouveau.

Обновление

Для обновления обеих частей драйвера (ядерной и иксовой) следует применять совокупность команд:

apt-get update && apt-get dist-upgrade && update-kernel


Борьба с "тирингом" при использовании официальных драйверов

При использовании "открытых" драйверов (nouveau), наблюдается "тиринг" (tearing) изображения, на официальных же драйверах эту проблему можно решить следующим образом (из терминала):

 nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"

Монитор может мерцать секунду-две. Если команда выполнилась без ошибок, нужно проверить, ушла ли проблема (если проблема сохраняется, можно попробовать указать опцию "ForceFullCompositionPipeline" вместо "ForceCompositionPipeline"). Если тиринга больше нет, пропишите данный режим в Xorg.conf, чтобы эта настройка видеокарты применялась при каждом запуске системы, предварительно сделав резервную копию файла xorg.conf:

 cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup

Затем откройте файл в текстовом редакторе с привилегиями суперпользователя - допустим, с помощью nano:

 sudo nano /etc/X11/xorg.conf

В разделе Section «Screen» должно быть примерно следующее:

 Section "Screen"
   Identifier     "Screen0"
   Device         "Device0"
   Monitor        "Monitor0"
   DefaultDepth    24
   Option         "Stereo" "0"
   Option         "metamodes" "nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"
   SubSection     "Display"
       Depth       24
   EndSubSection
 EndSection

Если опции "metamodes" нет, добавьте ее с рабочим для себя вариантом. У некоторых уже есть опция «metamodes» в файле /etc/X11/xorg.conf, как в примере ниже для настройки с двойным монитором:

 Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864"

Если это так, просто измените строку так, чтобы она выглядела следующим образом:

 Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864 { ForceCompositionPipeline = On }"

Теперь перезагружаемся и наслаждаемся плавной картинкой.

Что делать, если у вас отсутствует файл /etc/X11/xorg.conf

В некоторых случаях может не оказаться файла xorg.conf по умолчанию. Поэтому для его создания открываем nvidia-settings и переходим в раздел X Server Display Configuration, нажимаем кнопку "Save to X Configuration File" (тем самым мы создадим необходимый для нас файл xorg.conf). Так же нужно снять галочку с Merge with existing file (совместить с существующим файлом). Проверьте наличие файла xorg.conf, после чего можно перееходить к настройке.

Ссылки