LINUX.ORG.RU

Установка в Debian stable nvidia-legacy-390xx-driver

 , ,


0

1

Update: Наконец установил драйвер, но __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia не работает. Зато переключение intel only и nvidia only с ребутом работает.

Итак, есть система Debian 12 bookworm. На вики показали как устанавливается драйвера нвидии (у меня ноутбучная GT650M):

# apt update
# apt install nvidia-legacy-390xx-driver firmware-misc-nonfree

Однако этот пакет есть в репах sid и bullseye, и более ранних, но нету в репах bookworm. Нагуглил вариант безопасного добавления репы другого релиза в stable, однако у меня при sudo apt update захотел обновить пол системы, поэтому я ешё немного подправил конфиг:

$ cat /etc/apt/preferences.d/art-pin-priority                                                    
Package: *
Pin: release a=stable
Pin-Priority: 990

Package: *
Pin: release a=testing
Pin-Priority: 650

Package: *
Pin: release a=unstable,sid
Pin-Priority: 50

Здесь я узнал про варианты Pin-Priority:

Значения веса приоритета могут быть следующими:

P >= 1000 - пакет будет установлен, даже если это приведет к понижению версии уже установленного пакета
990 <= P < 1000 - пакет будет установлен, если не установлена более новая версия
500 <= P < 990 - пакет будет установлен, если нет пакета принадлежащего к целевому выпуску или не установлена более новая версия
100 <= P < 500 - пакет будет установлен, если нет кандидатов из других источников или установленного пакета более новой версии
0 < P < 100 - пакет будет установлен, если нет других кандидатов и установленных пакетов любой версии
P < 0 - пакет не будет установлен ни при каких условиях
P = 0 - неопределенное состояние, не используется

Теперь при sudo apt update apt не рвётся ничего обновлять. Недавно узнал про опцию -s или --dry-run для apt. Пробую: $ apt -s install -t sid nvidia-legacy-390xx-driver firmware-misc-nonfree &> nvidia-390-sid-install-log.txt. Это dry run без рута - симуляция вместо рискованных действий. И там жопа: 4214 строк вывода (включая пустые), ключевое там Обновлено 1002 пакетов, установлено 230 новых пакетов, для удаления отмечено 519 пакетов, и 1807 пакетов не обновлено. Удаляет, но не обновляет кучу пакетов, которые я явно устанавливал sudo apt install foo. Помимо прочего, драйвер нвидии из сида зависит от более новой libc6 из сида, думаю она могла сломать (в dry run) пол системы.

В другом месте человек поставил нвидию из bullseye, а не sid, у него не встало из-за ядра 6.1, на ядре 5.10 у него заработало. Как думаете, попробовать этот вариант? Хотя там в конце рекомендуют ставить из sid для ядра 6.1.

Проверил - производительность Nouveau хуже, чем у интегряхи.

В крайнем случае могу пересесть на bullseye, а программы, нужные свежими ставить из flatpak.

Update: С помощью sudo apt install nvidia-legacy-390xx-driver/unstable firmware-misc-nonfree/unstable драйвер установился, модуль загружается:

$ lsmod | grep nvidia                                                                            
nvidia_drm             53248  0
nvidia_modeset       1060864  1 nvidia_drm
nvidia              15896576  4 nvidia_modeset
ipmi_msghandler        77824  2 ipmi_devintf,nvidia
drm_kms_helper        208896  3 drm_display_helper,nvidia_drm,i915
drm                   614400  36 drm_kms_helper,drm_display_helper,drm_buddy,nvidia_drm,i915,ttm
video                  65536  4 dell_wmi,nvidia,dell_laptop,i915

Более того, пакет не создавал никаких xorg.conf, я руками нашёл в инете (НЕ с первого раза) конфиг, который грузит обе видюхи и НЕ делает unload nvidia:

$ cat /etc/X11/xorg.conf.d/10-nvidia-forum-prime.conf                                            
Section "ServerLayout"
        Identifier "layout"
        Option "AllowNVIDIAGPUScreens"
EndSection

Section "Device"
        Identifier "intel"
        Driver "modesetting"
EndSection

Section "Device"
        Identifier "nvidia"
        Driver "nvidia"
EndSection

Section "OutputClass"
        Identifier "intel"
        MatchDriver "i915"
        Driver "modesetting"
EndSection

Section "OutputClass"
        Identifier "nvidia"
        MatchDriver "nvidia-drm"
        Driver "nvidia"
        ModulePath "/usr/lib/nvidia/xorg"
        ModulePath "/usr/lib/xorg/modules"
EndSection

Вот здесь, в секции Using NVIDIA GPU as the primary GPU показана инструкция и конфиги для nvidia-only, не забудьте заставить ваш display manager подшаманить над xrandr (та же статья, тот же раздел).

Также здесь нашёл хак чтобы принудительно загружать модуль ядра нвидии:

Maybe it helps to preload the kernel driver. Try this:
Create /etc/systemd/system/load-nvidia.service

[Unit]
Description=Load Nvidia driver
Before=display-manager.service

[Service]
Type=oneshot
ExecStart=/sbin/modprobe nvidia

[Install]
WantedBy=display-manager.service

and enable it using
`sudo systemctl enable load-nvidia`
make sure /sbin/modprobe is the correct path. Then reboot.


Последнее исправление: arturianec100 (всего исправлений: 2)

Чтобы альтернативаные источники от других не пытались устанавливаться - допиши в /etc/apt/apt.conf строку

APT::Default-Release "/^bookworm(|-security|-updates)$/";

pin можно не трогать.

Что касается конкретно 390х драйверов - то я из-за них использую bullseye.

В крайнем случае могу пересесть на bullseye, а программы, нужные свежими ставить из flatpak.

А вот это очень плохой вариант, фталпак надо изничтожать если он случайно оказался в системе.

Ещё вариант: использовать bookworm с ядром от bullseye - тогда и видеодрайвер подойдёт.

Ну и ещё: скомпилируй сам бекпорт 390 из sid-а в bookworm, там вроде несколько команд всего обычно, но я их не помню.

firkax ★★★★★
()

У меня в необжитом дебиане для опытов у стабл Pin-Priority: 700 , сид - 600, драйвера поставлены через apt-get install nvidia-legacy-390xx-driver/unstable вроде, оно в таком виде иначе зависимости разруливает, чем если install -t sid использовать

Upd. Хотя libc6 действительно сидовская, в моём случае ничего не поломало, правда и ломать было особо нечего - пока там jwm с минимумом софта.

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

sudo apt install foo/unstable действительно помог поставить драйвер, хотя всё равно не работает для nvidia-settings:

$ apt -s install nvidia-settings-legacy-390xx                                                    
ЗАМЕЧАНИЕ: Производится только имитация работы!
           Для реальной работы apt требуются права суперпользователя.
           Учтите, что блокировка не используется, поэтому нет полного
           соответствия с текущей реальной ситуацией!
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Некоторые пакеты не могут быть установлены. Возможно, то, что вы просите,
неосуществимо, или же вы используете нестабильную версию дистрибутива, где
запрошенные вами пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, вам поможет:

Следующие пакеты имеют неудовлетворённые зависимости:
 libglib2.0-0t64 : Зависит: libc6 (>= 2.38) но 2.36-9+deb12u7 должен быть установлен
                   Зависит: libmount1 (>= 2.40~rc2) но 2.38.1-5+deb12u1 должен быть установлен
 libgtk-3-0t64 : Зависит: libatk-bridge2.0-0t64 (>= 2.15.1) но он не будет установлен
                 Зависит: libatk1.0-0t64 (>= 2.35.1) но он не будет установлен
                 Зависит: libc6 (>= 2.38) но 2.36-9+deb12u7 должен быть установлен
                 Зависит: libcloudproviders0 (>= 0.3.2) но 0.3.1-2 должен быть установлен
                 Зависит: libcups2t64 (>= 1.7.0) но он не будет установлен
                 Зависит: libgtk-3-common (>= 3.24.42-1) но 3.24.38-2~deb12u1 должен быть установлен
E: Невозможно исправить ошибки: у вас зафиксированы сломанные пакеты.

Хотя запустить что-нибудь под нвидией пока не удаётся, продолжаю попытки.

arturianec100
() автор топика
Ответ на: комментарий от TheFallenAngel

Хотя libc6 действительно сидовская, в моём случае ничего не поломало

На всякий случай: то, что у glibc больше версия - не страшно и сломать ничего в норме и не может. Старый софт на новом glibc всегда должен работать правильно. Плохо другое: в sid вполне могут быть забагованные пакеты, вот введёшь apt-get upgrade и обновится он до какого-то бага и тут уже может и всё сломать.

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

Ты можешь для отладки использовать команду apt-cache policy Она покажет какие у тебя приоритеты апт подхватил. И не выставляй дефолтные значения, свой 500 от 500 по умолчанию не отличить.

PRN
()
Последнее исправление: PRN (всего исправлений: 2)
Ответ на: комментарий от AbbaT

Спасибо, переключение между intel only и nvidia only заработало чуть ли не сразу, в отличие от пол дня попыток заставить работать prime и офигевать от того, что ничто не помогает. Кстати, nouveau поддерживает prime с нулём лишних действий, правда перф хуже, чем у интегряхи.

arturianec100
() автор топика
3 августа 2024 г.

С ходу такой вариант вроде не попадается, поэтому оставлю на всякий это здесь, вдруг кому пригодится - сборка старых драйверов nvidia-legacy-390xx-driver(да и для nvidia-legacy-340xx-driver всё наверняка тож самое) из сида на debian bookworm он же stable на данный момент: добавляем в сорс.лист откуда будем брать исходники, для примера строка выглядит так deb-src http://mirror.yandex.ru/debian unstable main contrib non-free non-free-firmware, естественно apt update, дальше устанавливаем необходимые зависимости для сборки, создаём-переходим в каталог для будущей сборки, скачиваем исходники, переходим в распакованное и билдим:)

apt build-dep nvidia-graphics-drivers-legacy-390xx
apt source nvidia-graphics-drivers-legacy-390xx
cd ./nvidia-graphics-drivers-legacy-390xx-390.157/
dpkg-buildpackage -us -uc

Как вариант использовать apt-src, оно выйдет чуть менее многословное, даже может в одну команду всё, но если есть необходимость собрать для wine/steam и 32битные версии, то всё равно придётся делать как выше, но с дополнительным поправками, для зависимостей apt build-dep -a=i386 nvidia-graphics-drivers-legacy-390xx + нужно поставить binutils-i686-linux-gnu, сборка выглядит так DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -ai386 -Pcross,nocheck. По итогу имеем каталог с нашими пакетами, из которого можно сделать локальный репо, список пакетов генерит dpkg-scanpackages -m . > Packages, в сорс.лист добавить где оно всё лежит, что то вроде deb [trusted=yes] file:/mylocalbuilds ./ После опять же apt update. Как альтернатива для тех же целей есть local-apt-repository. Для 32битного устанавливаем пакет nvidia-legacy-390xx-driver-libs:i386

TheFallenAngel ★★
()