TL;DR: Купил на Avito ASUS N56VZ 2012 года (i7-3630QM, GT 650M) за 6800 ₽, восстановил его после чужого «ремонта», поставил Linux Mint 22.3 и упёрся в NVIDIA Optimus. Собрал драйвер 470 с патчами из репозитория joanbm под ядро 6.14.0-37, победил чёрный экран, настроил PRIME Render Offload и DXVK, заставил Vulkan увидеть NVIDIA и запустил Skyrim. Девять дней, один нерабочий nvidia-xconfig и одно «АЛДУИН ЛЕТИТ!».

Эта статья не гайд «как правильно», а дневник: что я делал, где ошибался и что в итоге заработало. Выжимка в конце оформлена как пошаговая инструкция, так что если вам нужна она, листайте сразу туда. Если хотите понять, почему «просто поставить драйвер NVIDIA на Linux» может занять неделю, читайте целиком.
Я не разработчик ядра, а любитель. Зато за девять дней научился читать логи, быстро разбираться в незнакомом с помощью поисковика и нейросетей, не бояться исходников и делать бэкап перед каждым рискованным шагом. Всё описанное воспроизводимо на таком же железе и софте. На других версиях ядра и драйвера патчи придётся подгонять.
Железо и софт
Ноутбук: ASUS N56VZ (2012), Core i7-3630QM, Intel HD 4000 + NVIDIA GT 650M (2 ГБ), 6 ГБ ОЗУ (4+2), SSD WD Green 480 ГБ
ОС: Linux Mint 22.3, ядро 6.14.0-37
Драйвер: NVIDIA 470.256.02, последний релиз legacy-ветки 470 для Kepler. Новые ветки GT 650M не поддерживают
Игра: Skyrim SE 2011, Wine + Lutris, DXVK 1.10.3

Дни 1–2. Покупка и вскрытие
Я хотел сделать другу подарок. Он давно мечтал об игровом железе, и я решил взять эту мечту в оборот. Бюджет был жёсткий: чем дешевле, тем лучше. Приставки отпали сразу, потому что одно неверное движение с прошивкой Nintendo Switch, и получится солидный кирпич за 15 тысяч. Полноценный ПК дома просто не поместился бы, так что оставался ноутбук. Требования сложились быстро.
Во-первых, ремонтопригодность: сервис бы по деньгам я бы не потянул, ремонтировать пришлось бы самому и хотелось облегчить себе процесс, поэтому макбуки, какими бы красивыми они ни были, отпали сразу, и тому было две причины- первая в железе. У меня самого MacBook Pro 2018 года, и я на своей шкуре знаю, что даже простая чистка от пыли или замена термопасты там означает трясущиеся руки и мысль «не порвал ли я шлейф» и «все ли винты на месте». Без профессионального инструмента туда лучше не лезть, а ремонт часто стоит дороже самой машины. Вторая причина в системе: из-за закрытой macOS многие игры, которые нужны другу, на макбуке просто не запустить. К тому же, зная друга, клавиатуру типа «бабочка» он убил бы за два дня. Красиво, инженерно впечатляюще, но мне нужна была техника, которую я потяну по деньгам.
Во-вторых, железо должно быть адекватным: никаких Pentium и Celeron, которые сегодня и Word не вытянут, и желательно дискретная видеокарта. Друг фанат Resident Evil, Skyrim, Warcraft, Undertale, The Witcher и Hearts of Iron, и машина должна была потянуть весь этот фантастический набор.
Искал только на Avito: там иногда попадаются алмазы. Опыт поиска на таких «барахолках» у меня был, я не раз покупал там технику и запчасти к ней. За неделю мучительных поисков я выучил характеристики ноутбуков наизусть и завёл таблицу, где сравнивал цену и производительность. Попадались три категории: как «новые» и начищены до блеска, но слабые; убитые «на запчасти» (без экрана, без клавиатуры, с треснувшим корпусом); и списанные офисные Lenovo, рабочие, но продавцы не торговались, а 10+ тысяч выходили за бюджет.
И когда я почти отчаялся, мне попался ничем не примечательный пыльный хлам. Я зашёл в характеристики без особых надежд и выпал: Intel Core i7 (4 ядра, 8 потоков), 15,6-дюймовый Full HD и, главное, дискретная NVIDIA GeForce GT 650M. ASUS N56VZ, 2012 год. SSD на 480 ГБ и RAM 6 ГБ памяти уже стояли внутри( написано, что HDD накопитель, так что когда при вскрытии я обнаружил SSD- пищал от радости). Владелец писал: «живой, но нет зарядки, торг уместен».

Проверить ноутбук было невозможно: зарядки нет, а батарея за годы простоя села в ноль. Петли экрана шатались уже при покупке, но я решил, что их просто надо подтянуть.
Я понимал, что это может оказаться труп, но этот доисторический монстр уже стоял первым в моей таблице. Я задал владельцу кучу вопросов, выбил скидку в пару тысяч и договорился о встрече.
Так что я собрал 6800 ₽ наличными, взял спортивную сумку и поехал на другой конец города за котом Шрёдингера. Уже по пути обратно заказал зарядку на маркетплейсе, подходящая оказалась последней в наличии.
Вскрытие деда
Дома первым делом я полез внутрь. Термопаста, набор отвёрток, изопропанол и сжатый воздух уже были, до этого я чистил свой мак и примерно понимал, с чем придется столкнуться. Но одно дело чистить инженерную работу за миллиарды долларов, где шлейфы тоньше человеческого волоса, и совсем другое — лезть в ноутбук, в котором, судя по всему, последним копался школьник на уроке труда.
N56VZ разбирается нестандартно. Здесь нет люка в днище с аккуратно лежащими в ряд компонентами: все внутренности крепятся к верхней части корпуса, той, где клавиатура. Чтобы добраться до начинки, её приходится снимать целиком, предварительно отсоединив ОЗУ, аккумулятор, SSD и дисковод. Потом нужно полуоткрыть конструкцию и, пролезая в микрощели, отключить шлейфы матрицы, Wi-Fi/Bluetooth-модуля и клавиатуры. Инженеров этого шедевра я вспоминаю до сих пор, и не всегда добрым словом. Разборка превратилась в цепочку «выкрутил винт, поддел корпус картой, начал открывать, отпустил проверить, и всё захлопнулось обратно, потому что рядом оказался второй винт, который оказался меньше по размеру и застрял в пазах, так что сверху его просто не видно. С горем пополам вскрыв эту махину, я тут же получил в лицо облако пыли и чуть не уронил ноутбук на пол. Под звуки туториала с YouTube мы продолжили знакомство с дедом.

Чужой «ремонт»
До меня ноутбук уже «чинили», и чинили так, что я пару раз пожалел о покупке. Находки сыпались одна за другой:
винты были перепутаны местами, из-за чего разборка превращалась в головоломку;
петли экрана вырваны с корнем вместе с креплениями на поддоне (вот почему экран шатался ещё при покупке);
на материнской плате местами грязь, жвачка и какая-то краска;
шлейф дочерней платы с разъёмом VGA перекручен;
термопаста размазана не только по кристаллам, но и вокруг них. Когда я открутил вентилятор, я, мягко говоря, пребывал в состоянии шока.
Я не профессионал, но даже мне очевидно: термопаста должна быть только на кристалле процессора и видеокарты, но никак не вокруг них(ее не выдавило за время использования, ее так и намазывали жирным слоем на кристаллы и вокруг них). Шлейф дочерней платы с VGA я выбросил, саму плату поставил на место как заглушку: к материнке она не подключена, а VGA мне сейчас не нужен.
Кулер и радиаторы я чистил на балконе. Пыли наскреб на целый стакан (не спрашивайте, зачем я это измерял). Потом оттёр материнскую плату и обработал каждый разъём. К концу вечера спина отваливалась, а руки просили пощады, но результатом я был доволен. Я поставил всё на место, нанёс свежую MX-4 и вкрутил винты строго по размеру. Экран осмотрел отдельно: видимых повреждений нет, только трещины на рамке и те самые петли.
Петли
С петлями была вообще беда. Новый корпус пока не по карману, а экран надо было как-то держать. Тут я вспомнил про свой неоконченный диплом реставратора живописи и придумал вот что. В пластиковый обрубок на поддоне я запихнул кусочек ваты, залил клеем «Кристалл» и, пока он схватывался, поставил на место родное медное крепление. Потом так же облепил голый паз под винт ватой с клеем. Проще говоря, я сделал композит, который при застывании превратился в пластик. Проверил - встало намертво. Для красоты, насколько это возможно, закрыл всё чёрной изолентой.
Теперь экран держится на двух болтах из трёх с каждой стороны. Эти болты вкручены в медные крепления, которые держатся на вате, клее и вере в лучшее. Некрасиво, но работает, тесты цикла открывания и закрывания положительные. Если открывать аккуратно, до замены корпуса эта технология дотянет. Плюсом тем же композитом подклеил треснувшую перегородку от слота для CD/DVD-дисковода. Выглядит для временного ремонта очень даже прилично.



Первое включение
Я защёлкнул пластик, подсоединил оставшиеся шлейфы и вернул на место ОЗУ, SSD и дисковод. Батарею пока не вставлял: на всякий случай решил включать от сети. Подключаю зарядку и слышу тихий шум кулера. Через пару секунд на экране появился логотип ASUS. Ноутбук жив.
Дни 3–4. Mint и первая игра
Минут десять ноутбук грузился до окна входа в Windows 10 Home. Я проверил работу клавиатуры, звука и USB-портов, убедился, что всё работает, и выключил его. Пароль прошлого владельца я не знал, так что аккаунт прошлого хозяина и его тайны остались при нём, SSD я решил стереть целиком, не заглядывая внутрь.
К переустановке меня толкнуло сразу несколько причин:
я не знал пароля;
хотел попробовать поставить какой-нибудь дистрибутив Linux;
Linux весит заметно меньше Windows, и ноутбуку, судя по долгой загрузке, прежняя система давалась тяжело.
Последний пункт подтвердился: после переустановки он стал заметно резче реагировать на мои действия.
Я выбрал Linux Mint 22.3: для новичка он дружелюбный и стабильный. Другого компьютера дома нет, так что ISO-образ я скачал на свой мак и записал через BalenaEtcher на внешний жёсткий диск, который тем самым сыграл роль флешки (позже он остался под бэкапы). Дальше всё просто: загрузился с диска, запустил установщик и перезаписал внутренний SSD.
Потом я донастроил систему и сделал кастом под macOS. Да, я яблочник, глаз радуется, когда всё выглядит знакомо. Сторонние темы я не ставил, всё делалось штатными настройками: поменял цвет и прозрачность, настроил функционал и расположение панелей. Их у меня две, сверху и снизу, и из них получилось подобие привычного дока и строки меню.

Для проверки я поставил s-tui и погонял процессор под нагрузкой. Температуры были в норме, троттлинга не было. Для начала этого хватило: железо живое.
Установка первой игры: Undertale как проверка
Моей задачей было не только вернуть ноутбук к жизни, но и предоставить другу рабочую лошадку, а главное пригодную для игр. Для первой проверки я взял Undertale: она нужна была, чтобы проверить звук, картинку, работу привода и плавность хода и отзыва клавиатуры , ну и просто потому, что я люблю эту игру. У меня есть коллекционное издание, с дисками игры и всех саундтреков. На диске с игрой лежат версии под Linux, macOS и Windows. Linux-версия оказалась готовой папкой с исполняемым файлом. Я вставил диск в дисковод и скопировал папку с игрой целиком. Теперь всё свелось к двум действиям: дать файлу право на запуск и запустить его:
chmod +x UNDERTALE ./UNDERTALE
Игра сообщила, что ей не хватает 32-битных библиотек. Сначала я включил поддержку i386:
sudo dpkg --add-architecture i386 sudo apt update sudo apt install libglu1-mesa:i386
Здесь я споткнулся об имя: пакет libglu1:i386 в Mint называется libglu1-mesa:i386. Запуск показывал ошибки одну за другой, и терминал каждый раз сам называл, чего не хватает. Сначала не нашлась libopenal.so.1, и помогло:
sudo apt install libopenal1:i386
Затем игра запросила libcrypto.so.1.0.0, то есть OpenSSL 1.0, которого в современных репозиториях уже нет. Я скачал старый 32-битный пакет libssl1.0.0 из архива Ubuntu и поставил его через dpkg -i. После этого Undertale запустилась.

Восьмибитная графика ни на что особо не давила, и я решил, что ноутбук в порядке. Я пока не подозревал, что у него две видеокарты и что Undertale рисовала встроенная, а не NVIDIA, которую я считал единственной. Об этом я узнал, когда добрался до Skyrim, и вот тут началось самое интересное.
День 4. Skyrim и открытие, что у меня две видеокарты
Skyrim — игра для Windows, а под Linux она идёт через Wine. Название этой инопланетной технологии расшифровывается как Wine Is Not an Emulator: это не эмулятор, а слой совместимости, который переводит вызовы Windows в вызовы Linux. Запускать я решил через Bottles, программу-обёртку над Wine. В ней каждое приложение живёт в своей «бутылке»: это изолированное окружение со своей версией Wine, настройками и зависимостями (в самом Wine то же самое называется префиксом). Я запустил файл-установщик.
Первая бутылка и разрядность
Установщик падал на 17% с ошибкой isDone.dll. Я пересоздал бутылку в 64-битном режиме, и ошибка исчезла. Судя по всему, 32-битный процесс упирался в лимит адресуемой памяти при распаковке, а на 14-летнем ноутбуке лишний лимит ни к чему. К тому же Special Edition сама 64-битная, так что бутылка в этом режиме понадобилась бы всё равно.
Установка прошла, но игра не запускалась вообще. Тогда я поставил зависимости. Часть галочек в моей версии Bottles упорно не ставилась, поэтому я прошёл весь список подряд, все 112 пунктов. Игра заработала без вылетов, но выглядела ужасно- Skyrim, превратился в Minecraft.
Когда я шутил, что Skyrim превратился в Minecraft, я не шутил. Вместо дыма и снега в меню загрузки получились ломаные плитки, а шрифт рассыпался на белые прямоугольники, из которых прочитать ничего нельзя. Но игра хотя бы запустилась, и я уже этому радовался.


В игре было не лучше. Вся картинка была залита синим, будто на экран наложили фильтр, повозка дёргалась, анимация шла покадрово. Это было слайд-шоу.

Охота на причину
Я решил, что виноват Wine или DXVK. DXVK переводит вызовы DirectX в Vulkan, и версия, которая подходит одному железу, на другом может вести себя странно. Сначала я попробовал переключить рендерер на OpenGL, но игра вылетала на этапе лаунчера. Я вернулся к DXVK и стал перебирать его версии. Рабочей оказалась 1.10.3: с ней игра запускалась и доезжала до конца первой катсцены, но плавности это не добавило.
Несколько часов я ходил кругами. Данных набралось много: логи бутылки и десяток страниц из Google с описаниями похожих симптомов. У меня ничего не складывалось, и я скормил всё это нейросети. Среди массы текста она нашла строку, которую я сам не заметил: игра рендерится на встроенной графике. Я думал, что в ноутбуке стоит только NVIDIA, и тут же задался вопросом, откуда взялась встройка. Ответ дала команда:
lspci -k | grep -EA3 ‘VGA|3D‘
В выводе оказалось два устройства:
Intel HD 4000 — встроенная, рендерила всё это время.
NVIDIA GeForce GT 650M — дискретная. В строке Kernel driver in use у неё стоял открытый драйвер nouveau.
Примечание: фильтр VGA|3D нужен потому, что на многих Optimus-ноутбуках дискретка числится не как VGA, а как «3D controller», и одним из двух слов её легко не заметить. У меня она записана как VGA, но фильтр лучше брать с обоими.

Я находился состоянии шока- купил этот ноутбук ради GT 650M (и ради i7, мне было интересно, что это за зверь), а она спала и не отрабатывала свои 6800 рублей. Несколько часов я гонял тяжёлую 3D-графику на встроенной видеокарте и винил в этом Wine.
Что такое Optimus и почему в Linux это боль
NVIDIA Optimus — схема ноутбуков, где две видеокарты работают в паре: Intel для обычной графики и экономии энергии, NVIDIA для тяжёлого рендера. В Windows переключение прозрачное, в Linux всё иначе. Физически матрица подключена к Intel, NVIDIA может только отрендерить кадр и отдать его Intel, и эта схема называется PRIME Render Offload.
Заодно разъяснилось, почему nouveau меня не спасал. Это открытый драйвер, который пишут по наблюдению за железом, без документации производителя. Карту он видит, но не умеет раскачивать её частоты и для игр не годится. Нужен проприетарный драйвер NVIDIA. А чтобы конкретное приложение вообще пошло на дискретку, его надо попросить об этом переменными окружения.
Но сначала драйвер, им я занялся на следующий день.
Дни 5–6. Драйвер 470 против ядра 6.14: как собирать не надо
Skyrim всё ещё шёл на встройке, и нужен был драйвер для GT 650M. Тут выяснилось, что с ней всё непросто. Карта на архитектуре Kepler, и последняя ветка драйверов, которая её поддерживает, это 470. Свежие ветки её не видят. Ветка вышла в 2021 году (нужная мне сборка 470.256.02 в июне 2024), а у меня Mint 22.3 с ядром 6.14 из 2025-го.
Менеджер драйверов Mint для моей карты ничего не предложил. Позже выяснилось, что пакет nvidia-driver-470 в репозитории есть, но готовые модули к нему собраны только под ядра до 6.11, а у меня 6.14. Я скачал с сайта NVIDIA официальный NVIDIA-Linux-x86_64-470.256.02.run, но при установке он падал с ошибкой, поэтому мне пришлось распаковать его и патчить исходники руками.
Драйвер нельзя ставить из работающего графического сеанса, поэтому я перешёл в текстовую консоль tty2 (Ctrl+Alt+F2), остановил lightdm (sudo systemctl stop lightdm) и запустил установку, скачал .run и запустил установщик.
Что внутри проприетарного драйвера
Драйвер у NVIDIA закрытый, но я спокойно открывал его файлы в nano. Дело в том, что в .run лежат две части:
закрытая: готовый бинарный блоб (nv-kernel.o_binary), где вся логика карты, его не прочитать;
открытая: исходный код прослойки, которая связывает блоб с конкретным ядром Linux. Он компилируется прямо на вашей машине.
Править можно только прослойку, с ней я и боролся. Собирает её DKMS: система, которая автоматически пересобирает модули при обновлении ядра. Она берёт исходники из /usr/src/, собирает в /var/lib/dkms/ и ставит готовый модуль в каталог модулей ядра.
Цепочка ошибок
Сборка падала одна за другой:
const static в nv-kthread-q.c. GCC 13 ругался на устаревший порядок слов, правильно static const. В моём случае сборка из-за этого падала. Я нашёл три места и поправил в nano.
implicit declaration of function 'follow_pfn'. В новых ядрах функцию переименовали в unsafe_follow_pfn, а старое имя убрали. Я заглушил её return -EINVAL в os-mlock.c. Это не починка, а отключение части работы с памятью. Для моей задачи прошло, но это компромисс.
Поля .date и .output_poll_changed в drm_driver. Из ядра их удалили. Закомментировал в nvidia-drm-drv.c, снова ценой отключения соответствующих функций.
nv_node_end_pfn. Функции больше нет, заменил на return 0. Ещё одна заглушка.
Каждый цикл выглядел одинаково: читаю make.log, правлю, пересобираю, и сборка падает в новом месте (Error 2).
Линковка
Финальный гвоздь: сборка дошла до линковки, и линкер сообщил ld: cannot find ./nvidia/nv-kernel.o: No such file or directory. Здесь как раз не хватало закрытого блоба. Я создавал симлинки вручную, копировал nv-kernel.o_binary по папкам (/usr/src/ и /var/lib/dkms/) и заставлял DKMS пересобирать проект. Оказалось, что DKMS копирует исходники к себе и использует относительные пути, поэтому мои симлинки ломались на каждом шаге. В Kbuild я нашёл строку с ln -sf, которая создавала нерабочий путь, но победить DKMS до конца не смог.
Вся эта борьба заняла пару часов безвылазного сидения в tty2. Вывод такой: проприетарный модуль под чужое ядро руками собрать можно, но это не «пара патчей», а бесконечная гонка с ядром. Даже собранный DKMS-модуль может сломаться при следующем обновлении ядра, потому что патчи привязаны к конкретным версиям.
Я сделал перерыв и стал читать, как с этой проблемой справились другие. На GitHub нашёл репозиторий joanbm/nvidia-470xx-linux-mainline: патчи для свежих ядер и скрипт установки. Я сравнил мои правки с патчами из репозитория, и мои «уникальные» заглушки там уже были сделаны аккуратнее, с учётом устройства ядра. Я был не первым, кто прошёл этот путь.
Дни 7–8. joanbm, чёрный экран и вторая попытка
Первая установка
Подготовка по README репозитория:
sudo systemctl stop lightdm ## сначала остановка графики! sudo apt install git wget build-essential linux-headers-generic libglvnd-dev dkms git clone https://github.com/joanbm/nvidia-470xx-linux-mainline cd nvidia-470xx-linux-mainline ./install --dkms
Скрипт сам скачал .run, применил патчи и запустил установщик с DKMS.

В конце установщик спросил: «Запустить nvidia-xconfig?» Я, не думая, нажал «Да». Это было ошибкой.

Чёрный экран
После перезагрузки экран стал чёрным. Причина, как я понимаю, в том, что nvidia-xconfig создаёт конфиг X, по которому картинку на экран выводит NVIDIA. А на Optimus-ноутбуке экран физически подключён к Intel, и NVIDIA писать в него напрямую не может.
Через Ctrl+Alt+F2 я зашёл в консоль и принял варварское решение: снёс всё, и самопал, и провальную установку joanbm, и поставил заново, на этот раз ответив «Нет».
sudo dkms remove -m nvidia -v 470.256.02 --all sudo rm -rf /usr/src/nvidia-470.256.02 sudo rm -rf /var/lib/dkms/nvidia sudo rm -f /etc/X11/xorg.conf sudo rm -f /etc/X11/xorg.conf.d/20-nvidia.conf
Если по README вы создавали blacklist для nouveau, файл из /usr/lib/modprobe.d/ тоже стоит удалить.
Вторая попытка
Я клонировал репозиторий заново и запустил ./install --dkms. Когда дошло до вопроса про nvidia-xconfig, я твёрдо нажал «Нет».

После перезагрузки графика поднялась через Intel, без чёрного экрана. Я ввёл заветное nvidia-smi, и карта ответила: GeForce GT 650M, драйвер 470.256.02, 2000 MiB видеопамяти. Проверил dkms status (модуль собран под 6.14), lsmod | grep nvidia (модуль загружен) и modinfo nvidia (проприетарный драйвер, не nouveau). lspci -k теперь показывает Kernel driver in use: nvidia.

Драйвер встал успешно, но радовался я рано, так как Skyrim всё ещё почему-то шёл на Intel.
День 9. Lutris, Vulkan и первый дракон
Переменные и переезд
Чтобы приложение пошло на дискретку, ему надо об этом сказать переменными окружения. Для PRIME Render Offload это две стандартные из документации NVIDIA:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia
В Bottles они сработали лишь отчасти: FPS немного вырос, но Vulkan так и не заработал в полную силу. Подозреваю, что проблема была в изоляции Flatpak (песочнице нужно своё NVIDIA-расширение под точную версию драйвера). Проверять я не стал, а просто переехал на нативный Lutris, который работает с системными библиотеками напрямую. Это помогло.
Vulkan ICD
В логах после очередного неудачного запуска игры светилось предупреждение MESA-INTEL: warning: Ivy Bridge Vulkan support is incomplete, что намекало на участие Intel. Файл nvidia_icd.json лежал в /etc/vulkan/icd.d/, а в /usr/share/vulkan/icd.d/ его не было, я решил просто скопировать:
ls /usr/share/vulkan/icd.d/ sudo cp /etc/vulkan/icd.d/nvidia_icd.json /usr/share/vulkan/icd.d/
Без копии игра не работала, с копией запустилась без проблем. Почему так, я не знаю: по документации загрузчик Vulkan смотрит в оба каталога. Теперь vulkaninfo показывает обе карты (Vulkan 1.2) и видит NVIDIA даже дважды, видимо, из-за дубликата файла:
apiVersion = 1.2.318 deviceName = Intel(R) HD Graphics 4000 (IVB GT2) apiVersion = 1.2.175 deviceName = NVIDIA GeForce GT 650M apiVersion = 1.2.175 deviceName = NVIDIA GeForce GT 650M
DXVK
DXVK переводит вызовы DirectX в Vulkan. Рабочей оказалась только версия 1.10.3, версии 2 и 3 вылетали и в Bottles, и в Lutris. Объяснение простое: DXVK 2.x требует Vulkan 1.3, 3.x по сообщениям о релизе требует 1.4, а у GT 650M на драйвере 470 Vulkan 1.2.175. Lutris предлагал обновиться до версии 3, я отказался и зафиксировал 1.10.3.
Установка Skyrim в Lutris и его переменные
Skyrim SE я переустановил в Lutris. Снова наступил на те же грабли: 32-битный префикс и ошибка isDone.dll. Но на этот раз я сразу знал, что делать: пересоздал префикс 64-битным.

Переменные я вписывал в таблицу Lutris строкой целиком, ИМЯ=значение, в столбец Value, оставляя Key пустым. Lutris хранит переменные как пары «ключ — значение», и все три оказались под одним пустым ключом, так что сохранилась только последняя. Правильно так: Key __NV_PRIME_RENDER_OFFLOAD, Value 1. В настройках так же был тумблер «Включить NVIDIA Prime Render Offload» в настройках Lutris я тогда не заметил, был слишком уставшим.
(Апдейт спустя месяц: по какой-то причине 3D игры вообще игнорируют этот тумблер, а переменные работают, лучше пользоваться ими).
Алдуин
Игра запустилась. Я позвал друга (это он стал владельцем ноутбука) и сел рядом. Он нажал «Новая игра», пошла заставка, повозка тронулась. Та самая сцена, которая раньше превращалась в синее слайд-шоу, теперь шла плавно: лошадь, снег, разговоры пленников. Игра не вылетела и дожила до второй катсцены.
А потом прилетел Алдуин Друг заорал «АЛДУИН ЛЕТИТ!», а я чуть не упал со стула. Экран трясло от рёва, трава, камни и чешуя огромного дракона были видны в деталях. Игра шла на ультра-пресете из лаунчера Skyrim, в 1920×1080, со сглаживанием TAA. «Я УМИРАЮ!» я тоже слышал вживую, сидя рядом.
Это был лучший отзыв на мою работу за всю жизнь, жаль, заскринить не успел.



Что я вынес из девяти дней:
Optimus в Linux решаем. Главное не запускать nvidia-xconfig на Optimus-ноутбуке.
Логи быстрее форумов. lspci -k, lsmod, make.log, vulkaninfo и логи Wine отвечали на вопросы быстрее, чем гугл.
Ручные патчи ядра это не «пара строк». Мои заглушки return -EINVAL и return 0 отключают функциональность, а не портируют её. Для одной задачи сойдёт, для системы на каждый день нет.
DKMS мощный, но капризный. При обновлении ядра сборку легаси-драйвера придётся проверять заново.
Сообщество спасает время. Репозиторий joanbm/nvidia-470xx-linux-mainline сэкономил мне несколько дней, а моё «изобретение велосипеда» пригодилось только как учёба.
Flatpak и драйвер NVIDIA плохо дружат (подозреваю). Нативный Lutris оказался проще Bottles, хоть внешне не такой дружелюбный к новичкам, вроде меня.
Сначала проверь, на чём рендерится игра. Только потом крути настройки Wine.
Что бы я сделал иначе:
Сразу проверил бы lspci -k, а не узнавал о второй карте на четвёртый день.
Не запускал бы nvidia-xconfig, а запустив, просто удалил бы xorg.conf, не сметая весь драйвер.
Начал бы с Lutris, а не с Bottles.
Смотрел бы в логи раньше, чем в настройки.
Выжимка для тех, кто повторит путь
Ноутбук с NVIDIA Optimus и картой на Kepler, Linux Mint 22.3 с ядром 6.14. На других версиях патчи придётся подгонять.
1. Найдите обе видеокарты. Сначала-физически, загляните под капот, проверьте, где стоят видиокарты, как распаяны по плате, откуда идет вывод на матрицу. Затем -программно, введите в терминале запрос, дискретка часто числится как «3D controller»:
lspci -k | grep -EA3 'VGA|3D'
2. Поставьте драйвер 470 через репозиторий сообщества. Из текстовой консоли (Ctrl+Alt+F2)(не забудьте отключить графику, иначе установка не начнется, а терминал выдаст ошибку):
sudo systemctl stop lightdm sudo apt install git wget build-essential linux-headers-generic libglvnd-dev dkms git clone https://github.com/joanbm/nvidia-470xx-linux-mainline cd nvidia-470xx-linux-mainline sudo systemctl stop lightdm ./install --dkms
3. На вопрос про nvidia-xconfig отвечайте «Нет». Если ответили «Да» и получили чёрный экран, зайдите через tty и удалите /etc/X11/xorg.conf.
4. Проверьте драйвер после перезагрузки:
nvidia-smi dkms status lspci -k | grep -EA3 'VGA|3D'
Должны появиться название вашей видеокарты, модуль, собранный под текущее ядро, и Kernel driver in use: nvidia.
5. Помогите Vulkan увидеть NVIDIA. У меня без этого игра не запускалась:
sudo cp /etc/vulkan/icd.d/nvidia_icd.json /usr/share/vulkan/icd.d/ vulkaninfo --summary | grep deviceName
6. В Lutris добавьте переменные окружения. Каждая идёт отдельной строкой: имя в столбец Key, значение в Value. Если вписать «ИМЯ=значение» целиком в Value, сохранится только последняя:
Key |
Value |
__NV_PRIME_RENDER_OFFLOAD |
1 |
__GLX_VENDOR_LIBRARY_NAME |
nvidia |
7. Для Kepler с драйвером 470 берите DXVK 1.10.3. Версии 2.x и новее у меня вылетали.
8. Wine-префикс делайте 64-битным, не ставьте автоматическое определение, иногда оно хромает.. Так у меня исчезла ошибка isDone.dll на установке.
9. После обновления ядра проверяйте dkms status и при необходимости пересобирайте модуль.
Благодарности
Автору репозитория joanbm, авторам гайдов по Optimus и документации NVIDIA. Без вас я бы до сих пор смотрел на чёрный экран.