Nvidia optimus with linux

Содержание
  1. Благословите Nouveau, или про мои мучения с Nvidia Optimus. Часть 1. Прелесть документации Arch
  2. Прежде чем я начну
  3. Предисловие
  4. Всё хорошо начиналось
  5. Прелесть документации Arch
  6. Немного о Nvidia Optimus
  7. Прелесть документации Arch(продолжение)
  8. Qui quaerit, reperit
  9. Разбор полётов
  10. О Bumblebee и PRIME
  11. Послесловие
  12. NVIDIA Optimus (Русский)
  13. Contents
  14. Отключить один из GPU
  15. Используя драйвера Nvidia
  16. Альтернативная конфигурация
  17. Экранные менеджеры
  18. LightDM
  19. Проверка 3D
  20. Проблемы
  21. Тиринг и неработающий VSync
  22. EDID errors in Xorg.log
  23. Используя nouveau
  24. Используя Bumblebee
  25. Используя PRIME Render Offload
  26. Использование
  27. Решение проблем
  28. Не запускается модуль Nvidia
  29. Некорректная работа графического окружения
  30. NVIDIA Optimus
  31. Contents
  32. Available methods
  33. Use Intel graphics only
  34. Use CUDA without switching the rendering provider
  35. Use NVIDIA graphics only
  36. Display managers
  37. LightDM
  38. Checking 3D
  39. Further Information
  40. Troubleshooting
  41. Tearing/Broken VSync
  42. Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)
  43. Resolution, screen scan wrong. EDID errors in Xorg.log
  44. Wrong resolution without EDID errors
  45. Lockup issue (lspci hangs)
  46. No screens found on a laptop/NVIDIA Optimus
  47. Use switchable graphics
  48. Using PRIME render offload
  49. Using nouveau
  50. Using Bumblebee
  51. Using nvidia-xrun
  52. Using optimus-manager

Благословите Nouveau, или про мои мучения с Nvidia Optimus. Часть 1. Прелесть документации Arch

Прежде чем я начну

Предисловие

До поры до времени я был обычным линуксоидом. Тестил разные дистрибутивы, потихоньку узнавал новое. Просто потому, что мне было интересно. Как правило, «знания» ограничивались Ubuntu и её форками, а также Fedora и ещё парой «user-friendly» дистрибутивов. Но, как гласит ещё одна латинская поговорка, omnia fluunt, omnia mutantur, то есть все течёт, всё меняется, и понятно, что так не могло продолжаться вечно.

Всё хорошо начиналось

Следует отметить, что у меня было не очень большое раздолье для экспериментов: относительно слабый ПК, который еле-еле тянул GNOME 3, и медленный интернет, который сильно усложнял общую ситуацию. Но тогда большего для мальчика 12 лет и не нужно было. В конце концов мне надоело экспериментировать, я установил Windows 10 и на несколько лет забыл о Linux.

Время шло, и где-то через 2 года я понял, что пришло время обновить мой замшелый кусок железа ПК, и начал копить деньги. Что-то выручил с продаж своих вещей, что-то дарили, более половины суммы накинули родители, пришлось даже принести в жертву продать свой Xbox(!) потешить своё ЧСВ повысить skill’ы в Linux. На этот раз решил попытаться установить Arch. Слышал, что у него очень хорошая документация. И начал.

Прелесть документации Arch

Установка прошла быстро и относительно безболезненно. Опять же, благодаря документации. После установки системы и DE в лице KDE Plasma, я попробовал подключить ноутбук к своему внешнему монитору, поскольку у монитора диагональ 24′ а у дисплея ноутбука только 15,6′. Ничего не произошло, на монитор сигнал не поступил. Как всегда, я начал гуглить. И после 30 мин поисков я обнаружил, что проблема связана с технологией Nvidia Optimus.

Немного о Nvidia Optimus

Nvidia — хорошая компания. За свою 25-летнюю историю они реализовали немало относительно хороших решений. Nvidia Optimus — одно из таких. Сабж представляет собой гибридную технологию для обеспечения корректной работы двух видеокарт(как правило, мощной графики Nvidia и встроенной Intel) на ноутбуках. Если она работает в Windows правильно настроена, она помогает сберечь электроэнергию и ресурсы ноутбука. Всё это отлично, но что натолкнуло меня на написание сего опуса, так это то, что эта распрекраснейшая технология в Linux по словам разработчиков работает только частично, а по моим её настройка требует много, много нервов, времени и сил.

Прелесть документации Arch(продолжение)

После того, как я узнал об истинном корне проблемы, я поначалу обрадовался что определил «где собака зарыта»(HDMI-выход был только у карты Nvidia), и первым моим шагом было чтение официальной документации Arch. Суть её заключалась в том, чтобы при помощи редактирования xorg.conf и .xinitrc заставить X использовать только карту Nvidia. После выполнения указанных шагов и перезагрузки… появился черный экран. В документации говорилось, что в таком случае необходимо проверить, нет ли в .xinitrc амперсандов, а если их нет, использовать «Альтернативную конфигурацию», которая заставляла X использовать только карту Intel. Это меня не устроило, поскольку карта Intel уже использовалась по умолчанию и этот вариант мне не подходил. Также были варианты для различных DM. Они также не подошли, так как ни один из них по разным причинам не мог запустить X-сервер.
Описывать каждый из них отдельно было бы очень длинным и бессмысленным занятием.

Qui quaerit, reperit

Это выражение в переводе с латинского обозначает «Кто ищет, находит». Я не зря поместил его в начало, поскольку как по мне это выражение станет идеальной моралью для этой статьи.

Я был в отчаянии. Два дня я тщетно пытался найти решение, рыскал по зарубежным форумам(только по ним, поскольку на православном ЛОРе ответ был таков: Вы никак не запустите X через Nvidia. Это невозможно, смиритесь). Но всё-таки, пасмурным утром третьего дня поисков я наткнулся на тред(ссылка в подвале) на девелоперском форуме Nvidia, в котором было расписано, как Nvidia Optimus имплементируется в Arch на ноутбуках Dell. Я сразу же понял — я спасён! Выполнив шаги, я перезапустился и… черный экран. Безусловно, я расстроился, но тут я вспомнил: я же не прописал в .xinitrc строки для запуска DE. Прописав exec startkde, я снова перезапустился и всё заработало. X запустился через Nvidia. Долгих четыре дня ушло у меня на установку и настройку Arch, и всё же я это сделал!

Читайте также:  Очистка терминала терминале linux

Разбор полётов

Теперь давайте разберем инструкцию из вышеуказанного треда. Начнём:

Сперва необходимо включить поддержку KMS(Kernel Mode Setting, метод настройки разрешения непосредственно в ядре), добавив в параметры ядра(файл /etc/default/grub) в строку GRUB_CMDLINE_LINUX_DEFAULT= параметр

Затем создаём скрипт для DM(менеджера входа). Рассмотрим вариант с LightDM. Создаём скрипт /etc/lightdm/display_setup.sh со следующим содержанием:

Этим скриптом мы указываем поставщика и устанавливаем максимально возможное разрешение экрана.

Сделаем созданный скрипт исполняемым:

Заставим LightDM выполнять вышеуказанный скрипт при запуске. Сперва отредактируем /etc/lightdm/lightdm.conf:

Инструкцию для SDDM можете посмотреть в уже упомянутом мною треде, ссылки в подвале.

Теперь нам необходимо обновить микрокод ЦП(больше о микрокоде по ссылкам в подвале):

После обновления микрокода установим ворох пакетов от Nvidia:

Примечание: Некоторые из пакетов могут быть недоступны. В таком случае устанавливайте всё по отдельности. Пакеты, которые будут недоступны, пропускайте.

Включим демон nvidia.persistenced, отвечающий за персистентность(больше о ней читайте по ссылке в подвале) работы драйвера Nvidia:

Автоматически сконфигурируем GRUB:

Создадим загрузочный RAM-диск:

Если не вписали, впишем

После перезагрузки ноутбука логинимся под своей учетной записью и наслаждаемся миром Arch.

О Bumblebee и PRIME

Возможно, Вы заметили, что я ничего не сказал о «костылях», которые направлены на обеспечение корректной работы Nvidia Optimus в Linux: Bumblebee и PRIME.
Кроме того, завести карту Nvidia у меня вышло лишь с проприетарным драйвером, Nouveau не работал(поэтому статья и называется «Благословите Nouveau».
Что касается лично моего опыта работы с ними, то он мал и плачевен: оба костыля в упор не видели мою видеокарту Nvidia. Если Вам они интересны, в подвале вы найдете ссылки на материалы по ним.

Послесловие

Если вы прочли всю статью, то вы герой (ну, или модератор).

При написании статьи я старался разбавлять её для Вас относительно смешными шутками, чтобы как-то оправдать отсутствие картинок в ней. Надеюсь, что вы достигли дзена после прочтения.

Источник

NVIDIA Optimus (Русский)

NVIDIA Optimus — технология, которая дает интегрированной графике Intel и дискретной Nvidia работать сообща в лаптопах. Чтобы заставить Optimus работать в Arch Linux потребуется сделать несколько непростых шагов, описанных ниже. Вот доступные решения:

  • #Отключить один из GPU в BIOS, что увеличит продолжительность работы батареи, если отключить чип Nvidia. Но это невозможно сделать в некоторых BIOS.
  • Использование официальной поддержки Optimus включенной в проприетарный драйвер Nvidia, который предоставит хороший опыт работы, в сравнении с nouveau, с картами Nvidia, но не поддерживает переключения GPU и содержит больше ошибок.
  • #Используя PRIME Render Offload — официальный метод NVIDIA для поддержки переключаемой графики.
  • #Используя nouveau — эти драйвера поддерживают переключение GPU, но предоставляют более низкую производительность, чем проприетарный драйвер Nvidia, также, до сих пор, не реализовано никакого энергосбережения. Не работают с новейшими Nvidia GPU.
  • #Используя Bumblebee — решения сторонних разработчиков для реализации функционала подобного Optimus, поддерживающего переключение GPU и энергосбережение, но требующего более тонкой настройки.

Contents

Отключить один из GPU

Если требуется использовать только один из видеоадаптеров, проверьте опции BIOS. Найдите опцию, отключающую один из них. Некоторые лаптопы поддерживают отключение только одного из чипов. Если необходимо использовать обе видеокарты или невозможно отключить ту, что не нужна ищите решение ниже.

Используя драйвера Nvidia

Проприетарный драйвер Nvidia не поддерживает динамического переключения в отличие от nouveau. В наличии проблемы с тирингом, о которых Nvidia знает, но не спешит исправлять. Однако, эти драйвера предоставляют более высокую производительность в сравнении с драйверами nouveau.

Первым делом, установите пакеты nvidia, nvidia-libgl и xorg-xrandr из официальных репозиториев. После настройте xorg.conf. Узнайте PCI адрес карты Nvidia, для этого введите:

PCI адрес выглядит примерно так 01:00.0. В xorg.conf, отредактируйте 01:00.0 на 1:0:0.

Если X.ORG X сервер версии 1.17.2 и выше:

Для более старых версий X сервера:

Далее добавьте в начало

/.xinitrc две строки:

Теперь перезагрузитесь для запуска драйверов и X. Если dpi дисплея не верный добавьте строку:

Если при загрузке X появился черный экран, удостоверьтесь, что в файле

/.xinitrc нет & перед xrandr. Если & есть, то видимо оконный менеджер запускается раньше, чем команда xrandr завершает выполнение, что и приводит к черному экрану.

Если черный экран еще есть, смотрите #Альтернативная конфигурация ниже.

Альтернативная конфигурация

Если возникли сбои в работе Xorg-server 1.17.1 и выше с описанной выше конфигурацией, измените раздел для Intel в /etc/X11/xorg.conf как показано ниже:

Как указано выше BusID должен совпадать с выводом lspci. Найдите строку с «VGA compatible controller», которая содержит «Intel». Например: $ lspci | grep VGA 00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)

Если X запустился, но на экране ничего не происходит, проверьте содержит ли /var/log/xorg.conf подобную строку:

Если да, проблема может исчезнуть при добавлении раздела ServeLayout в /etc/X11/xorg.conf

Экранные менеджеры

При использовании менеджеров входа, создайте или отредактируйте скрипт настройки вместо использования

LightDM

Сделайте этот скрипт выполняемым:

Теперь настройте LightDM для запуска скрипта, отредактировав раздел [Seat:*] в /etc/lightdm/lightdm.conf:

Теперь перезагрузитесь и DM запуститься.

Для GDM создайте новый файл .desktop:

Удостоверьтесь, что GDM использует X как стандартный бэкенд.

Проверка 3D

Для проверки работает ли чип Nvidia установите mesa-demos и запустите:

$ glxinfo |grep NVIDIA

Проблемы

Тиринг и неработающий VSync

Для решения проблемы необходим xorg-server 1.19 или выше, ядро linux 4.5 или выше и nvidia 370.23 или выше. Затем включите «DRM kernel mode setting», что, в свою очередь, включит синхронизацию PRIME и исправит разрывы изображения.

Читайте также:  Как запустить виртуальную машину mac os

См. также подробности в обсуждении на официальном форуме.

Также есть отчёт, что ядро linux 5.4 нарушает синхронизацию PRIME.

EDID errors in Xorg.log

Эта ошибка возникает когда драйвер nvidia не определяет EDID для дисплея. Необходимо вручную указать путь к файлу EDID или предоставить ту же информацию подобным образом.

Для предоставления пути к файлу EDID отредактируйте раздел «Device» для NVIDIA в Xorg.conf, добавив эти строки. Не забудьте изменить поля в соответствии с вашей системой:

Если Xorg не запускается попробуйте поменять ссылки CRT на DFB. card0 это идентификатор чипа Intel, который подключен к дисплею с помощью LVDS. Если расположение аппаратных средств отличается, значение пользовательского EDID может быть другим. Путь же будет начинаться с /sys/class/drm.

Используя nouveau

Свободные драйвера nouveau (xf86-video-nouveau)могут динамически переключаться с драйвером Intel (xf86-video-intel) используя технологию PRIME. Для более подробной информации смотрите PRIME.

Используя Bumblebee

Если хотите использовать Bumblebee, который поддерживает энергосбережение и другие полезные функции, смотрите Bumblebee.

Используя 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 :

Можно писать всё вручную, к примеру, запуск Firefox:

Тот же запуск, но с использованием nvidia-prime :

Также доступен пакет prime AUR , который содержит в себе уже настроенный файл xorg.conf (Русский). Пример использования:

Решение проблем

Если по какой-либо причине автоматическая конфигурация не работает, то отредактируйте файл xorg.conf:

Проверьте, что загрузились оба модуля видеокарт:

См. официальную инструкцию по настройке для получения более подробной информации.

Если у вас установлен пакет bumblebee , вам следует убрать его, потому что он блокирует драйвер nvidia_drm, который необходим для загрузки драйвера nvidia X сервером для разгрузки (offloading).

Не запускается модуль Nvidia

Это можно решить, добавив в xorg.conf следующие строки:

Некорректная работа графического окружения

Иногда возникают различные ошибки связанные с использованием драйвера modesetting. Для решения таких проблем можно использовать драйвер intel или другие.

Основное требование к драйверу — использование и поддержка модуля Glamor.

Тогда блок конфигурации видеокарты Intel c драйвером intel будет выглядеть следующим образом.

Проверьте, что загрузились оба модуля видеокарт:

Источник

NVIDIA Optimus

NVIDIA Optimus is a technology that allows an Intel integrated GPU and discrete NVIDIA GPU to be built into and accessed by a laptop.

Contents

Available methods

There are several methods available:

  • #Use Intel graphics only — saves power, because NVIDIA GPU will be completely powered off.
  • #Use NVIDIA graphics only — gives more performance than Intel graphics, but drains more battery (which is not welcome for mobile devices). This utilizes the same underlying process as the optimus-manager and nvidia-xrun options, it should be utilized for troubleshooting and verifying general functionality, before opting for one of the more automated approaches.
  • Using both (use NVIDIA GPU when needed and keep it powered off to save power):
    • #Using PRIME render offload — official method supported by NVIDIA.
    • #Using optimus-manager — switches graphics with a single command (logout and login required to take effect). It achieves maximum performance out of NVIDIA GPU and switches it off if not in use. Since the 1.4 release AMD+NVIDIA combination is also supported.
    • #Using nvidia-xrun — run separate X session on different TTY with NVIDIA graphics. It achieves maximum performance out of NVIDIA GPU and switches it off if not in use.
    • #Using Bumblebee — provides Windows-like functionality by allowing to run selected applications with NVIDIA graphics while using Intel graphics for everything else. Has significant performance issues.
    • #Using nouveau — offers poorer performance (compared to the proprietary NVIDIA driver) and may cause issues with sleep and hibernate. Does not work with latest NVIDIA GPUs.

Use Intel graphics only

If you only care to use a certain GPU without switching, check the options in your system’s BIOS. There should be an option to disable one of the cards. Some laptops only allow disabling of the discrete card, or vice-versa, but it is worth checking if you only plan to use just one of the cards.

If your BIOS does not allow to disable Nvidia graphics, you can disable it from the Linux kernel itself. See Hybrid graphics#Fully Power Down Discrete GPU.

Use CUDA without switching the rendering provider

You can use CUDA without switching rendering to the Nvidia graphics. All you need to do is ensure that the Nvidia card is powered on before starting a CUDA application, see Hybrid graphics#Fully Power Down Discrete GPU for details.

Now when you start a CUDA application, it will automatically load all necessary kernel modules. Before turning off the Nvidia card after using CUDA, the nvidia kernel modules have to be unloaded first:

Use NVIDIA graphics only

The proprietary NVIDIA driver can be configured to be the primary rendering provider. It also has notable screen-tearing issues unless you enable prime sync by enabling NVIDIA#DRM kernel mode setting, see [1] for further information. It does allow use of the discrete GPU and has (as of January 2017) a marked edge in performance over the nouveau driver.

Читайте также:  Обновление яндекс браузера линукс

First, install the NVIDIA driver and xorg-xrandr . Then, configure /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf the options of which will be combined with the package provided /usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf to provide compatibility with this setup.

Next, add the following two lines to the beginning of your

Now reboot to load the drivers, and X should start.

If your display dpi is not correct add the following line:

If you get a black screen when starting X, make sure that there are no ampersands after the two xrandr commands in

/.xinitrc . If there are ampersands, it seems that the window manager can run before the xrandr commands finish executing, leading to a black screen.

Display managers

If you are using a display manager then you will need to create or edit a display setup script for your display manager instead of using

LightDM

For the LightDM display manager:

Make the script executable:

Now configure lightdm to run the script by editing the [Seat:*] section in /etc/lightdm/lightdm.conf :

Now reboot and your display manager should start.

For the SDDM display manager (SDDM is the default DM for KDE):

For the GDM display manager create two new .desktop files:

Make sure that GDM use X as default backend.

Checking 3D

You can check if the NVIDIA graphics are being used by installing mesa-demos and running

Further Information

For more information, look at NVIDIA’s official page on the topic [2].

Troubleshooting

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Tearing/Broken VSync

This requires xorg-server 1.19 or higher, linux kernel 4.5 or higher, and nvidia 370.23 or higher. Then enable DRM kernel mode setting, which will in turn enable the PRIME synchronization and fix the tearing.

You can read the official forum thread for details.

It has been reported that linux kernel 5.4 breaks PRIME synchronization but this has since been fixed.

Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)

Add rcutree.rcu_idle_gp_delay=1 to the kernel parameters. Original topic can be found in [3] and [4].

Resolution, screen scan wrong. EDID errors in Xorg.log

This is due to the NVIDIA driver not detecting the EDID for the display. You need to manually specify the path to an EDID file or provide the same information in a similar way.

To provide the path to the EDID file edit the Device Section for the NVIDIA card in Xorg.conf, adding these lines and changing parts to reflect your own system:

If Xorg will not start try swapping out all references of CRT to DFB. card0 is the identifier for the intel card to which the display is connected via LVDS. The edid binary is in this directory. If the hardware arrangement is different, the value for CustomEDID might vary but yet this has to be confirmed. The path will start in any case with /sys/class/drm .

Alternatively you can generate your edid with tools like read-edid and point the driver to this file. Even modelines can be used, but then be sure to change «UseEDID» and «IgnoreEDID».

Wrong resolution without EDID errors

Using nvidia-xconfig, incorrect information might be generated in Xorg.conf and in particular wrong monitor refresh rates that restruct the possible resolutions. Try commenting out the HorizSync / VertRefresh lines. If this helps, you can probably also remove everything else not mentioned in this article.

Lockup issue (lspci hangs)

Symptoms: lspci hangs, system suspend fails, shutdown hangs, optirun hangs.

Applies to: newer laptops with GTX 965M or alike when bbswitch (e.g. via Bumblebee) or nouveau is in use.

When the dGPU power resource is turned on, it may fail to do so and hang in ACPI code (kernel bug 156341).

When using nouveau, disabling runtime power-management stops it from changing the power state, thus avoiding this issue. To disable runtime power-management, add nouveau.runpm=0 to the kernel parameters.

For known model-specific workarounds, see this issue. In other cases you can try to boot with acpi_osi=»!Windows 2015″ or acpi_osi=! acpi_osi=»Windows 2009″ added to your Kernel parameters. (Consider reporting your laptop to that issue.)

No screens found on a laptop/NVIDIA Optimus

Check if $ lspci | grep VGA outputs something similar to:

NVIDIA drivers now offer Optimus support since 319.12 Beta [5] with kernels above and including 3.9.

Another solution is to install the Intel driver to handle the screens, then if you want 3D software you should run them through Bumblebee to tell them to use the NVIDIA card.

Use switchable graphics

Using PRIME render offload

This is the official NVIDIA method to support switchable graphics.

Using nouveau

See PRIME for graphics switching and nouveau for open-source NVIDIA driver.

Using Bumblebee

Using nvidia-xrun

Using optimus-manager

See Optimus-manager upstream documentation. It covers both installation and configuration in Arch Linux systems.

Источник

Оцените статью