Nvidia
Материал из ALT Linux Wiki
м (→Видеокарты типа Optimus: викификация) |
|||
(20 промежуточных версий не показаны.) | |||
Строка 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. |
+ | |||
=== Возможные баги === | === Возможные баги === | ||
Строка 76: | Строка 123: | ||
В нормальных ноутах в BIOS может быть 3 положения переключателя видеокарты: встроенная, optimus и дискретная (nvidia,ati). Здесь достаточно прикрутить программный переключатель, если устроит перезагрузка для переключения X-ов на другую видеокарту (без optimus вообще). | В нормальных ноутах в BIOS может быть 3 положения переключателя видеокарты: встроенная, optimus и дискретная (nvidia,ati). Здесь достаточно прикрутить программный переключатель, если устроит перезагрузка для переключения X-ов на другую видеокарту (без optimus вообще). | ||
+ | |||
+ | == Проприетарный libGL/libglx и память == | ||
+ | История вопроса: [http://lists.altlinux.org/pipermail/community/2014-February/681735.html в списке рассылки 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, после чего можно перееходить к настройке. | ||
+ | |||
+ | |||
+ | |||
+ | |||
== Ссылки == | == Ссылки == | ||
+ | * [[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_*}}) | ||
+ | * [[Обновление ОС]] | ||
+ | * [[Обновление ядра]] | ||
- | + | {{Category navigation|title=Видеодрайвера|category=Видеодрайвера|sortkey={{SUBPAGENAME}}}} | |
[[Категория:Sisyphus]] | [[Категория:Sisyphus]] |
Текущая версия на 05:28, 2 апреля 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]
Ссылки по теме:
- ↑ Если в файле ничего кроме этого ценного нет, то можно и сам файл удалить
- ↑ Теоретически этот метод можно применять и в других случаях, например с fflrx/radeon
- ↑ Это можно применять и с одним ядром, для быстрого перехода с свободного драйвера на проприетарный и обратно, просто отредактировав файл /etc/rc.d/rc.local
- ↑ Это можно применять и совсем в другом случае, например при подборе нужного модуля 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, после чего можно перееходить к настройке.
Ссылки
- 32-битный OpenGL на 64-битной системе с драйвером NVIDIA
- Переход на драйверы Nvidia и fglrx
- Установка_проприетарных_драйверов_NVIDIA_и_ATI
- apt-scripts-nvidia (пакет содержит реализацию команды apt-get install-nvidia)
- анонс nvidia-clean-driver (удаление ненужных nvidia_glx_*)
- Обновление ОС
- Обновление ядра