- Nvidia
- Замена драйверов nouveau/nvidia «на лету»
- Постановка задачи
- Реализация
- Краткий алгоритм установки драйверов серии legacy
- Возможные баги
- Видеокарты типа Optimus
- Проприетарный libGL/libglx и память
- Обновление
- Борьба с «тирингом» при использовании официальных драйверов
- Что делать, если у вас отсутствует файл /etc/X11/xorg.conf
- Ссылки
- Nvidia optimus, настройка и запуск bumblebee
- PRIME
- Bumblebee
- установка
- настройка
- проверка
- Primus
- установка
- проверка
- Запуск nvidia-settings с установленным bumblebee :
- Ссылки
- Примечания
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
#!/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 .
Возможные баги
Иногда (при смене версий пакетов и расхождении ABI ) xorg-x11-server требует, чтобы в /etc/X11/xinit/xserverrc было прописано:
X_server='X -nolisten tcp -ignoreABI'
Второй способ — в /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 и память
Суть: при установке проприетарных драйверов происходит подмена GL-библиотек на проприетарные. По непонятной причине многие скомпилированные с libGL программы и библиотеки (в особенности libcairo) потребляют на 10-20 мегабайт (!) RSS больше. Вот небольшой кусок для сравнения (смотрим на gimp, script-fu и nm-appleti, вторая колонка — это RSS):
По ссылке видно, что в 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, выполните в терминале команду:
Вы должны увидеть примерно следующее, в разделе 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_* )
- Обновление ОС
- Обновление ядра
Nvidia optimus, настройка и запуск bumblebee
Данное руководство предназначено для счастливых обладателей ноутбуков с nvidia optimus на борту, которые используют дистрибутивы на базе бранча p8.
Примечание: Начиная с p9 bumblebee не поддерживается, всё должно работать без bumblebee.
PRIME
Это единственный способ (кроме автоматического выбора режима), который работает в Сизифе и в бренче p10
Если у вас современная видеокарта, которая поддерживается драйвером версии 435 или новее (посмотреть можно в /proc/driver/nvidia/version), то у вас есть поддержка технологии NVIDIA PRIME, достаточно запускать программы при помощи nvidia-prime-run (входит в пакет nvidia_glx_common)
$ nvidia-prime-run имяпрограммы
Например, при установленном пакете glxinfo можно запустить
$ nvidia-prime-run glxinfo | grep -i 'renderer.*string'
, убедившись, какой 3D-ускоритель задействован.
Bumblebee
Рассмотрим процесс установки, настройки и запуска видеокарты nvidia посредством bumblebee.
установка
1) Обновляем систему и ядро до текущего бранча:
# apt-get update # apt-get dist-upgrade # update-kernel
2) Узнаем версию установленного ядра:
3) Для запуска проприетарного драйвера nvidia удалим модуль ядра от свободного драйвера nouveau (обратите внимание на сборку ядра):
# apt-get remove kernel-modules-drm-nouveau-std-def
и установим (если не установлены) проприетарный драйвер nvidia и модуль ядра для него:
# apt-get install kernel-modules-nvidia-std-def
4) Устанавливаем bbswitch для своего ядра и bumblebee:
# apt-get install kernel-modules-bbswitch-std-def bumblebee
настройка
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09) 01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [GeForce GT 540M] (rev ff)
нас интересует BusID, относящийся к intel (00:02.0)
6) Создадим файл (от рута, можно через mc) в /etc/X11/xorg.conf.d следующего содержания с указанием ранее полученного BusID:
Section "Device" Identifier "Device1" Driver "intel" VendorName "onboard" BusID "PCI:0:2:0" #обратите внимание на двоеточия и количество 0 EndSection Section "Monitor" Identifier "Monitor0" Option "DPMS" EndSection Section "Screen" Identifier "Screen0" Device "Device1" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
Для тех у кого артефакты при скроллинге, файл будет выглядеть так:
Section "Device" Identifier "Device1" Driver "intel" Option "AccelMethod" "uxa" VendorName "onboard" BusID "PCI:0:2:0" #обратите внимание на двоеточия и количество 0 EndSection Section "Monitor" Identifier "Monitor0" Option "DPMS" EndSection Section "Screen" Identifier "Screen0" Device "Device1" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
7) Удаляем файл /etc/X11/xorg.conf.d/10-monitor.conf и желательно удалить компонент от альтератора alterator-x11 или не производить через него настройку дисплея.
проверка
8) Перезагружаем систему и проверяем работоспособность видеокарты nvidia:
$ optirun glxinfo | grep OpenGL
должно получиться нечто подобное:
OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: GeForce GT 540M/PCIe/SSE2 OpenGL version string: 4.3.0 NVIDIA 310.19 OpenGL shading language version string: 4.30 NVIDIA via Cg compiler OpenGL extensions:
Можно запускать нужные приложения на видеокарте nvidia командой от пользователя, входящего в группу xgrp [2] :
Запущенные без optirun приложения будут работать на видеокарте intel, при этом видеокарта nvidia будет выключена.
P.S. На р6 замечено, что на 32-разрядных системах bumblebee падает после отработки команды optirun, для повторного запуска команды optirun необходимо перезапустить сервис bumblebee:
# service bumblebeed restart
Замечено, что в ряде случаев сервис bumblebeed не стартует автоматически при перезагрузке системы и требуется его включение в явном виде. Для проверки следует выполнить команду:
# service bumblebeed status
Если сервис не активен (вместо active выводится unknown или что-подобное), то для включения сервиса нужно выполнить команду:
# service bumblebeed enable
после чего имеет смысл перезагрузить систему.
Primus
Для nvidia optimus собран primus, предлагающий некоторое улучшение производительности.
установка
проверка
Команда запуска приложений через primus:
Также остается возможность запуска приложений через VirtualGL:
Для отключения вертикальной синхронизации у primus:
$ vblank_mode=0 primusrun приложение
Для нормальной работы 32-х разрядных приложений и игр на 64-х разрядной системе через primus должны быть установлены следующие пакеты: i586-primus, i586-xorg-drv-intel, i586-xorg-dri-intel, i586-nvidia_glx, i586-nvidia_glx_common.
Для запуска игр в steam на карте nvidia primus (особенно 32-х разрядный) обязателен к установке! Чтобы игра стартовала через primus необходимо в свойствах запуска игры в steam прописать следующее:
где %command% переменная (не надо ее менять на команду запуска игры), steam сам подставит нужную команду.
Запуск nvidia-settings с установленным bumblebee :
optirun nvidia-settings -c :8
primusrun nvidia-settings -c :8
Ссылки
Примечания
- ↑ На Sisyphus за 20140209 для Lenovo B570e этот шаг и создание секции xorg.conf оказались по факту необязательны
- ↑ см. вывод команды id и файл /etc/group