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

в 8:08, , рубрики: archlinux, bash, linux, Nvidia, Optimus, Видеокарты, Компьютерное железо, Настройка Linux, Ноутбуки

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

Перед тем, как начать основное повествование, я бы хотел уточнить несколько моментов. Статья направлена в первую очередь на обладателей ноутбуков с технологией 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. Если Вам они интересны, в подвале вы найдете ссылки на материалы по ним.

Послесловие

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

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

Автор: tapochek2004

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js