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


Перед тем, как начать основное повествование, я бы хотел уточнить несколько моментов. Статья направлена в первую очередь на обладателей ноутбуков с технологией Nvidia Optimus, желающих установить себе GNU/Linux(далее Linux). Материал направлен на то, чтобы вышеуказанная ЦА ознакомилась с возможными решениями вопроса и на то, чтобы облегчить и ускорить ею его решение. Кроме того, статья не в последнюю очередь является мотивирующей, и направлена на понимание людьми одной простой истины: в Linux, как и в жизни, всегда найдётся обходной путь, и если Вы сдадитесь, лучше(в большинстве случаев) не станет.
Qui quaerit, reperit
— Латинская поговорка

Предисловие


До поры до времени я был обычным линуксоидом. Тестил разные дистрибутивы, потихоньку узнавал новое. Просто потому, что мне было интересно. Как правило, «знания» ограничивались 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, и всё же я это сделал!

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


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

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

nvidia-drm.modeset=1

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

#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

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

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

chmod +x /etc/lightdm/display_setup.sh

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

nano /etc/lightdm/lightdm.conf

Впишем параметр

display-setup-script=/etc/lightdm/display_setup.sh

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

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


sudo pacman -S intel-ucode

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

sudo pacman -S lib32-mesa-demos mesa-demos libva-vdpau-driver nvidia nvidia-libgl lib32-nvidia-utils nvidia-settings lib32-opencl-nvidia

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

systemctl enable nvidia-persistenced.service

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

sudo grub-mkconfig -o /boot/grub/grub.cfg

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

mkinitcpio -p linux

Проверим .xinitrc:

nano ~/.xinitrc

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

exec gnome-session

для GNOME и

exec startkde

для KDE Plasma.

Перезагрузимся:

reboot

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

О Bumblebee и PRIME


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

Послесловие


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

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

Список источников


О микрокоде: ru.wikipedia.org/wiki/Микрокод
О Bumblebee: wiki.archlinux.org/index.php/Bumblebee_(Русский)
О PRIME: wiki.archlinux.org/index.php/PRIME
Тред: devtalk.nvidia.com/default/topic/1027679/linux/optimus-support-for-arch-linux-for-dell-i7559-dual-graphics-intel-nvidia-gtx-960m-laptop-/2
О персистентности: ru.wikipedia.org/wiki/Персистентность

Комментарии (16)


  1. lieff
    14.06.2018 12:37

    С оптимусом и на винде как повезет. У меня довольно топовый на свое время ASUS с GTX 870, изначально все работало как надо, после обновления до 10 все сломалось. Или работает GTX и большой нагрев, или интел и никакая скорость, авто-переключение не работает. Появились неприятные фризы в играх.

    После отката на 7 оказалось что работает только пара старых драйверов, а новым играм то нужны новые драйвера, что не удивительно, я лично сталкивался с багами nvidia компилятора, приходилось вставлять хаки типа #pragma optionNV(inline none), чтобы валидный код скомпилился.


    1. Focushift
      14.06.2018 13:20

      У нас был на работе ноут Сони с Вистой, поставил семерку, начались проблемы, оказалось что нужно обновление биоса.


      1. tapochek2004 Автор
        14.06.2018 18:39

        Ну, не знаю. У меня на 10 всё заводилось без манипуляций, при подключении к внешнему монитору карта Intel просто автоматически отключалась. А с 7 даже не пробовал, ибо на новых ноутбуках нет многих драйверов. По сути единственный вариант из семейства Windows на ноутах с 2-мя картами — Windows 10.


  1. dion
    14.06.2018 15:14

    xrandr --setprovideroutputsource modesetting NVIDIA-0

    Это внезапно и есть часть PRIME


    1. tapochek2004 Автор
      14.06.2018 18:33

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


    1. tapochek2004 Автор
      14.06.2018 19:54

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


  1. vaut
    14.06.2018 17:00

    Я внимательно читал и так и не понял при чем Nouveau.
    Из-за этой отличной реализации драйверов у меня ноут грелся до 60 градусов просто рисуя приглашение для логина в tty без иксов (видеокарта древняя).
    Известная картинка с Линусом Торвольдсом.


    1. tapochek2004 Автор
      14.06.2018 18:40

      Прошу прощения. Уточнил в статье.


  1. Mikihiso
    14.06.2018 18:34

    Ну хоть конкретно под Арчем я оптимус не заводил(был опыт только gentoo и ubuntu), хочу сказать что под убунтой nvidia prime работает оч даже норм(под gentoo все приходилось естесственно настраивать руками, по Арче-вики), и по сути он примерно то же самое и делает, только это автоматизировано.
    Есть еще естесственно (куда ж без них) иногда и приколы с драйверами. Конкретную версию драйвера сейчас не помню(вроде какая-то из версий 17го года), но несмотря на то, что дрова были в стабильной ветке репозитория, в них оказался баг, который чисто технически не позволял завести оптимус, поэтому пришлось пакет маскировать и брать предыдущую версию.


  1. dpogibenko
    14.06.2018 18:34

    Mint Cinnamon неплохо работает с подобными ноутами из коробки(он вообще неплохо работает из коробки, в отличии от других дистрибутивов). Но все равно взаимодействие с 2-мя видюхами под линуксом — это боль.


    1. tapochek2004 Автор
      14.06.2018 18:35

      Вы правы. Когда-то ставил на этот ноут Mint, все завелось «из коробки». Но сами понимаете, амбиции, «минт для нубасов», и все такое…


  1. Romaker
    14.06.2018 20:12

    На ноутбуках с iGPU и dGPU nvidia есть проблема с отключением dgpu при переключении на igpu в последней версии Ubuntu 18.04 и форках. Видеочип dgpu не снижает потребление. Нужно отключать вручную.


  1. en1gma
    15.06.2018 20:44

    а это точно optimus? ведь optimus — это когда nv «фактически» рендерит в фреймбуфер на igp. выводом на экран занимается в случае optimus исключительно igp. у nv есть чипы в принципе без видеовывода, например, gk208.
    ваша проблема исключительно в кривой реализации igpu+dgpu в модели вашего ноута, которая накладывается на поддержу в ванильных драйверах только optimus в правильной его реализации. подобные кривые реализации были во времена когда nv уже умела 4к, а intel ещё нет.
    по-видимому, под виндой при подключении моника к видеовыводу dgpu просто переводит систему из режима псеводо-optimus в режим с двумя независимыми видюшками, и, самое главное, драйвер корректно это отрабатывает, а всё остальное лирика.


    1. tapochek2004 Автор
      15.06.2018 21:24

      Возможно, Вы правы. У меня ноутбук Dell Inspiron 7567. Самое интересное, что на других ноутбуках от Dell(например, серия Latitude) технологию Nvidia Optimus можно отключить из BIOS, причем при этом карта Intel отключается. Здесь же это невозможно. Вероятно, на сабже за Optimus действительно выдаётся какая-то кривая реализация Dual Graphics от Dell, поскольку я часто встречал людей с подобной проблемой(HDMI-выход на nGPU), и у всех были… угадайте, ноутбуки какой фирмы? Правильно, Dell. Но статья всё равно актуальна, поскольку неважно, действительно ли это Nvidia Optimus или какое-то непонятное его подобие, инструкция всё равно сработала, и не только у меня.


      1. en1gma
        15.06.2018 21:43

        так реализаций Dual Graphics было и есть очень и очень достаточно… вы, видимо, не застали времена, когда для каждой реализации выпускался свой драйвер производителем платформы. optimus (как и powerxpress выше v4 от amd) — это попытка стандартизировать реализации Dual Graphics.
        например, у другого мастодонта у hp тоже не совсем совместимая с ванильными дровами реализация Dual Graphics. но там одно время на foxconn'овских платформах в «nvram setup» можно было выбрать mux-ed или mux-less реализацию, а в mux-ed дополнительно можно выбрать какую видюшку отключить.
        ну и яблоко — у которой были всегда свои ни с чем не совместимые реализации Dual Graphics.


        1. tapochek2004 Автор
          15.06.2018 23:06

          Да, таки не застал — познакомился с вопросом только 3 месяца назад. Спасибо, что просветили. А насчет драйверов для каждой реализации — у Dell есть что-то под названием SupportAssist(прога для установки драйверов для Dell'овской продукции), но это решение только для винды и там лично у меня всё работало и без него, так что необходимость таких «костылей» в данном случае под большим вопросом.
          Поэтому вероятно, что реализация в сабже всё же базируется на Nvidia Optimus.