LINUX.ORG.RU

Переключение между nvidia и nouveau с перезагрузкой

 ,


0

1

Недавно перешел с nouveau на проприетарный драйвер nvidia, но возникла необходимость кое-что проверить с nouveau.

В сети по запросу «Переключение между nvidia и nouveau» (или примерно тому же запросу на английском) находятся рецепты по переключению «на лету», но они требуют какого-то продвинутого шаманства. Если меня вполне устроит не на лету, а с перезагрузкой с разными версиями ядра (скажем, чтобы грузились драйверы nvidia с ядром 4.12 и nouveau с 4.11 или 4.13), то это проще сделать? И если да, то как?


чтобы переключиться на nouveau, удали (или переименуй) свой xorg.conf, удали из блеклиста nouveau и добавь туда nvidia

eternal_sorrow ★★★★★
()

Между nvidia и nouveau на одной видеокарте «на лету» не бывает по определению.

На двух видеокартах вопрос даже не разбирал из-за отсутствия таковых. Но вангую что там всё тоже будет плохо.

Там Create a boot option for easy nvidia or nouveau display driver switching, nvidia vs nouveau, xcfgmaker описан мой опыт сабжа для gentoo-шника.

Вкратце суть для slackware/lfs если ты знаешь как настроить систему отдельно под nouveau (и всё в ядре Y а не M) или под nvidia то под систему одновременно с nvidia и nouveau с их переключением всё элементарно. То что в ядре под nouveau было у графики Y ставишь в M. В системе должны присутствовать одновременно оба модуля. Переключаться можно добавляя в блеклист один из модулей и в идеале ещё и подсовывая соответствующий конфиг иксов.

Успехов.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

Никак. Либо одно, либо другое. Т.е. только через удаление ненужного и установки нужного, потом наоборот.

piwww ★★★★
()

Если меня вполне устроит не на лету, а с перезагрузкой с разными версиями ядра

https://www.altlinux.org/Nvidia

По ссылке написано «на лету», но на деле там именно в зависимости от ядра.

AS ★★★★★
()
Ответ на: комментарий от piwww

Никак. Либо одно, либо другое. Т.е. только через удаление ненужного и установки нужного, потом наоборот.

Уважаемый если конкретно у тебя это не работает так это вовсе не значит что у всех оно не работает. Оба модуля одновременно установить можно их использовать одновременно нельзя. А дальше чтобы юзать один из них второй нужно заблеклистить и всё в принципе даже этого достаточно. Современные иксы умеют в автонастройку. Но чтобы с иксами не сношать мозг я и это завелосипедил и подменяю ещё и конфиг иксов.

И да это одна и та-же система и одно и то-же ядро. Реализуют тот-же прикол с одной версией ядра но двумя его экземплярами с разными конфигами. Ну ты понял да? Суть та-же... Просто в случае одного ядра с двумя модулями одновременно nouveau никак не может быть в Y (только в M) соответственно он при загрузке стартовать будет всегда немного дольше чем в случае двух ядер с разными конфигами и именами одно из которого будет с nouveau Y.

Но это детали...

init_6 ★★★★★
()
Ответ на: комментарий от AS

AS ты меня извини заранее... но там по твоей ссылке разговор как раз об втором варианте когда одна и та-же версия ядра но оно собрано дважды с разными именами и конкретно под nvidia или nouveau.

Можно и так. А можно и просто в одном ядре иметь одновременно и nouveau и nvidia. И чтоб в этом случае переключатся между модулями графики надо просто один из них в /proc/cmdline блеклистить при загрузке тогда второй заводится «автоматически» а запнутся может только на конфиге иксов.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

Я тоже самое и сказал, только покороче и без излишнего пафоса. А с вашими советами ТС сейчас угробит всю систему. Спорим на банку пива?

piwww ★★★★
()
Ответ на: комментарий от init_6

AS ты меня извини заранее... но там по твоей ссылке разговор как раз об втором варианте когда одна и та-же версия ядра но оно собрано дважды с разными именами и конкретно под nvidia или nouveau.

Так я сразу написал, что там выбор в зависимости от ядра, но там именно на названии ядра сделан акцент. И да, нет разницы, анализировать un-def/std-def, либо что-то ещё, например nouveau искать в /proc/cmdline, либо nvidia. Ядру можно любые параметры написать: что ядро не знает, то не будет применять, а разбирать это можно уже потом где захочется.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от piwww

Я тоже самое и сказал, только покороче и без излишнего пафоса.

Найди десять отличий между:

Т.е. только через удаление ненужного и установки нужного, потом наоборот.

И тем что я повторил уже несколько раз.

Иметь оба модуля одновременно с одним единственным ядром реально и ничего при этом не удаляя. Это не черная магия. И в таком случае для загрузки с nouveau достаточно nvidia.blacklist=true а с nvidia соответственно nouveau.blacklist=true (<- актуально для 2011го. Сейчас блеклистить немного больше.) Мало того второй модуль всегда в качестве запасного и готов в любой момент достаточно просто переключится на него.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

с nouveau достаточно nvidia.blacklist=true а с nvidia соответственно nouveau.blacklist=true

Эо вот про что я написал. Кто-то должен обработать это самое nvidia.blacklist и nouveau.blacklist. Это уже в зависимости либо от дистрибутива, либо от собственного скрипта. Но это уже детали, а принципиально это всё то же самое, что в качестве переключателя использовать название ядра.

AS ★★★★★
()
Ответ на: комментарий от AS

Но это уже детали

Принципиально разница только одно ядро с двумя модулями сразу и + свой велосипед или два ядра каждое отдельно под один из модулей + свой велосипед. :)

init_6 ★★★★★
()

Добился, чего хотел, хотя у меня Манджаро, так что пришлось повозиться, потому что в чистом виде предложенные решения не подходили.

Сначала самой привлекательной показалась идея по ссылке с Альт линуксом, предложенной AS - заблэкклистить оба модуля и сделать шелл-скрипт, который будет грепать версию ядра (только в моем случае это было бы

uname -r |grep 4.12.
) и грузить соответствующий модуль. Как я понимаю, подразумевается, что в этом случае modprobe имеет приоритет над черным списком? Но попытки загрузить какой-нибудь модуль таким макаром провалились. Кстати, у меня такой скрипт нужно было помещать в /etc/profile.d/. Какие-нибудь другие действия, вроде
touch /somefile
выполнялись, а загрузить модуль - фиг. Возможно, у меня что-то настроено по-другому, и черный список имеет приоритет? Может, как-то связано с тем, что другая система инициализации - systemd? В любом случае, другой способ оказался успешным.

Методом проб и ошибок выяснил, что если установлены оба модуля и ни один из них не в черном списке, то система пытается загрузить оба, но nouveau почему-то имеет приоритет :) Так что можно обойтись без лишних настроек, просто установить и то, и другое, ничего не блэклистить в системных настройках, а только в строке граба, грузящей ядро, заблэклистить нуво, как посоветовал init_6 по ссылке, посвященной Gentoo. Только в моем случае не пришлось в одном случае блэклистить нуво, в другом - нвидиа, потому что нуво сам по себе грузится по умолчанию (интересно, почему). Так что блэклистить нужно только нуво, в том случае, когда нужно загрузить nvidia. Кстати, строка, вносящая модуль в черный список в записи граб, у меня оказалась другой (из-за другой версии граб? Или другой версии ядра?): modprobe.blacklist=modulename.

Остался вопрос:

glxinfo | grep OpenGL
при загрузке c nvidia показывает, что все в порядке, а при nouveau выдает:
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  155 (GLX)
  Minor opcode of failed request:  24 (X_GLXCreateNewContext)
  Value in failed request:  0x0
  Serial number of failed request:  35
  Current serial number in output stream:  36

Но при этом

dmesg |grep nouveau
выдает:
[    3.081321] fb: switching to nouveaufb from VESA VGA
[    3.083875] nouveau 0000:01:00.0: NVIDIA G92 (092a00a2)
[    3.233963] nouveau 0000:01:00.0: bios: version 62.92.84.00.06
[    3.256204] nouveau 0000:01:00.0: fb: 512 MiB GDDR3
[    3.306376] nouveau 0000:01:00.0: DRM: VRAM: 512 MiB
[    3.306378] nouveau 0000:01:00.0: DRM: GART: 1048576 MiB
[    3.306385] nouveau 0000:01:00.0: DRM: TMDS table version 2.0
[    3.306387] nouveau 0000:01:00.0: DRM: DCB version 4.0
[    3.306391] nouveau 0000:01:00.0: DRM: DCB outp 00: 04011310 00000028
[    3.306394] nouveau 0000:01:00.0: DRM: DCB outp 01: 02000300 00020028
[    3.306397] nouveau 0000:01:00.0: DRM: DCB outp 02: 01000302 00020030
[    3.306399] nouveau 0000:01:00.0: DRM: DCB outp 03: 02022322 00020010
[    3.306401] nouveau 0000:01:00.0: DRM: DCB conn 00: 00001030
[    3.306403] nouveau 0000:01:00.0: DRM: DCB conn 01: 00000100
[    3.306405] nouveau 0000:01:00.0: DRM: DCB conn 02: 00002261
[    3.316648] nouveau 0000:01:00.0: hwmon_device_register() is deprecated. Please convert the driver to use hwmon_device_register_with_info().
[    3.332356] nouveau 0000:01:00.0: DRM: MM: using CRYPT for buffer copies
[    3.377333] nouveau 0000:01:00.0: DRM: allocated 1280x1024 fb: 0x70000, bo f4b50c00
[    3.379717] fbcon: nouveaufb (fb0) is primary device
[    3.488059] nouveau 0000:01:00.0: fb0: nouveaufb frame buffer device
[    3.500433] [drm] Initialized nouveau 1.3.1 20120801 for 0000:01:00.0 on minor 0

Да и запустил ради пробы Doomsday - вроде все рисует нормально, да и в выхлопе консоли после его запуска есть:

001.844 G      [Sys_GLInitialize] OpenGL information:
                                    Version:  3.0 Mesa 17.2.4
                                    Renderer: NV92
                                    Vendor:   nouveau

Как все-таки узнать, работает нуво как нужно, или нет?

Kzer-Za
() автор топика
Ответ на: комментарий от init_6

Если ТС по Вашему совету убъет систему, с Вас банка пива. И еще про дистрибутивы: пользую Опенсусю, там эта задача через YaST решается двумя кликами без всяких самокатов (велосипедов) двумя кликами без перезагрузки системы (перегружаются только иксы).

piwww ★★★★
()
Ответ на: комментарий от Kzer-Za

Кстати, строка, вносящая модуль в черный список в записи граб, у меня оказалась другой (из-за другой версии граб? Или другой версии ядра?): modprobe.blacklist=modulename.

Ни Grub, ни ядро это не обрабатывают. Это обрабатывается где-то ещё, и это что-то ещё просто берёт этот параметр из /proc/cmdline. Можно попробовать погрепать /etc на предмет того, кто это. Но этот кто-то может оказаться и не в /etc.

Вот что понимает само ядро:
https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt

Остальное ядром игнорируется.

AS ★★★★★
()
Ответ на: комментарий от piwww

Если ТС по Вашему совету убъет систему

Таким образом систему не убивают. Ну не загрузится у него xorg, и что ? В консольке откатит конфиг загрузчика, и всё.

AS ★★★★★
()
Ответ на: комментарий от piwww

Он уже нашел другой вариант.

Это тот же самый вариант по сути: управление тем, что грузит модуль, через /proc/cmdline.

AS ★★★★★
()
Ответ на: комментарий от piwww

Если ТС по Вашему совету убъет систему, с Вас банка пива.

Если что я на описанном методе спокойно прожил более пяти лет и хз сколько обновлений и ядра и блоба nvidia вплоть до благополучной смерти своего ноута уже от его старости. Остальное в руках ТС. И да, как уже было замечено, имея оба сразу модуля графики трудно «убить систему».

там эта задача через YaST решается двумя кликами без всяких самокатов (велосипедов) двумя кликами без перезагрузки системы (перегружаются только иксы).

«Эта» это какая именно задача? Удаление nvidia и переключение на nouveau или наоборот? Так в любом дистрибутиве с пакетным манагером такое делается элементарно и не дольше твоих «пары кликов». Всегда твой капитан.

init_6 ★★★★★
()

Бессмысленное рукоблуство.

anonymous
()
Ответ на: комментарий от Kzer-Za

но nouveau почему-то имеет приоритет :)

Kzer-Za я сегодня добрый я тебе намекну... С каких подсистем начинается загрузка ведра? Ведро свой лог запуска куда-то выводит в процессе? Я не зря там писал "актуально для 2011го. Сейчас блеклистить немного больше." именно потому что fb от nouveau будет конфликтовать с любым вариантом fb на nvidia.

Коротко говоря для загрузки с nvidia ныне надо: nouveau.modeset=0 modprobe.blacklist=nouveau modprobe.blacklist=ttm modprobe.black list=drm_kms_helper modprobe.blacklist=drm. Это вырубает начисто всё что касается nouveau вместе с drm и fb т.е. да до иксов в этом случае на экране ничего не буде кроме квадрата Малевича.

init_6 ★★★★★
()
Ответ на: комментарий от Kzer-Za

в строке запуска ядра в грабе есть <*>. Что оно значит?

Любой символ. По сути там версия вообще не важна а главное с какими параметрами загружается. И вообще из всего этого самое трудное как раз делать два пункта в grub. Хотя в последнее время я для себя делал проще - оставлял загрузку только с nvidia. А nouveau как запасной вариант и в него загружался тупо редактированием параметров прямо в grub.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

А дальше чтобы юзать один из них второй нужно заблеклистить и всё в принципе даже этого достаточно.

Хм, при установке блоба нвидии из rpmfusion ничего в блеклист не попадает. Недавно akmods не осилил сборку под новое ядро при старте, загрузилось nouveau. После принудительной сборки модулей akmods --force, молча загрузился блоб. Не знаю, что там за магия, но от лицезрения чёрного экрана из-за заблоченного nouveau, сия магия уберегла.

luiswoo
()
Ответ на: комментарий от luiswoo

luiswoo никакой магии здесь нет. Работать будет первый подхватившийся модуль из нескольких. Чем выставляется приоритет модулей другой вопрос. Самый простой вариант черный список. Дальше можно к примеру в initramfs запихать нужный модуль тогда он гарантированно загрузится быстрее. Короче это уже детали.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

Самый простой вариант черный список.

В Федоре из чёрного списка автоматом уже ничего не грузится, что довольно существенная деталь. Тем не менее, добавление nouveau в чёрный список кочует из инструкции в инструкцию.

luiswoo
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.