Arch Linux: установка драйверов NVIDIA для GeForce GTX 1050 Ti

Автор: | 25/03/2019
 

Основной целью покупки нового ПК в декабре с NVIDIA 1050 была возможность играть в игры на Linux без необходимости перезагружаться в Windows.

Собственно, для этого надо установить драйвера, что бы система начала использовать “проприентарщину” вместо nouveau (хотя, справедливости ради, надо отметить, что на nouveau я и не пробовал запускать игры).

После нескольких предыдущих попыток пару лет тому установить драйвера NVIDIA на ноутбук – ожидал много попа-боли и ковыряния в конфигах и логах X.org, но, внезапно – всё завелось с полупинка.

Единственная “проблема”, которая возникла, была вызвана выбором неправильного драйвера, см. ниже.

Документация тут>>>.

Установка драйвера – попытка номер раз (неправильная)

Находим видеокарту, и проверяем используемый сейчас драйвер:

[simterm]

[setevoy@setevoy-arch-pc ~]$ lspci -k | grep -A 2 -E "(VGA|3D)"
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
        Subsystem: ASUSTeK Computer Inc. GP107 [GeForce GTX 1050 Ti]
        Kernel driver in use: nouveau

[/simterm]

Проверяем список старых карт тут>>>.

Собственно проблема была в том, что сначала я установил nvidia-lts, соблазнившись приставкой lts.

Устанавливем (нет):

[simterm]

[setevoy@setevoy-arch-pc .config]$ sudo pacman -S nvidia-lts

[/simterm]

Перезагружаемся, и – совершенно ожидаемо для меня в тот момент, потому что проблем ждал – Openbox не запускается.

Проверяем используемый драйвер:

[simterm]

[setevoy@setevoy-arch-pc ~]$ lspci -k | grep -A 2 -E "(VGA|3D)"
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
        Subsystem: ASUSTeK Computer Inc. GP107 [GeForce GTX 1050 Ti]
        Kernel modules: nouveau

[/simterm]

Kernel modules: nouveau

Эм…

Проверяем /var/log/Xorg.0.log:

[simterm]

...
[    32.079] (==) Matched nouveau as autoconfigured driver 0
[    32.079] (==) Matched nv as autoconfigured driver 1
[    32.079] (==) Matched modesetting as autoconfigured driver 2
[    32.079] (==) Matched fbdev as autoconfigured driver 3
[    32.079] (==) Matched vesa as autoconfigured driver 4
[    32.079] (==) Assigned the driver to the xf86ConfigLayout
[    32.079] (II) LoadModule: "nouveau"
[    32.107] (WW) Warning, couldn't open module nouveau
[    32.107] (EE) Failed to load module "nouveau" (module does not exist, 0)
[    32.107] (II) LoadModule: "nv"
[    32.107] (WW) Warning, couldn't open module nv
[    32.107] (EE) Failed to load module "nv" (module does not exist, 0)
[    32.107] (II) LoadModule: "modesetting"
[    32.107] (II) Loading /usr/lib/xorg/modules/drivers/modesetting_drv.so
[    32.123] (II) Module modesetting: vendor="X.Org Foundation"
[    32.123]    compiled for 1.20.3, module version = 1.20.3
[    32.123]    Module class: X.Org Video Driver
[    32.123]    ABI class: X.Org Video Driver, version 24.0
[    32.123] (II) LoadModule: "fbdev"
[    32.123] (WW) Warning, couldn't open module fbdev
[    32.123] (EE) Failed to load module "fbdev" (module does not exist, 0)
[    32.123] (II) LoadModule: "vesa"
[    32.123] (WW) Warning, couldn't open module vesa
[    32.123] (EE) Failed to load module "vesa" (module does not exist, 0)
[    32.123] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[    32.123] (EE) open /dev/dri/card0: No such file or directory
[    32.123] (WW) Falling back to old probe method for modesetting
[    32.123] (EE) open /dev/dri/card0: No such file or directory
[    32.123] (EE) Screen 0 deleted because of no matching config section.
[    32.123] (II) UnloadModule: "modesetting"
[    32.123] (EE) Device(s) detected, but none match those in the config file.
[    32.123] (EE) 
Fatal server error:
[    32.123] (EE) no screens found(EE) 
...

[/simterm]

Okay… Google? 🙂

Нагуглилось обсуждение тут>>>,

Попробуем обновить initramfs, как упоминается в документации тут>>> и тут>>>.

Редактируем /etc/mkinitcpio.conf, добавляем модули:

...
MODULES=(nouveau, nv)
...

Собираем ядро, сохраняем его отдельно – с другим именем, что бы не затереть нынешнее:

[simterm]

[root@setevoy-arch-pc setevoy]# mkinitcpio -g /boot/linux-nv.img
==> Starting build: 4.20.11-arch2-1-ARCH
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [keyboard]
  -> Running build hook: [keymap]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
  -> Running build hook: [lvm2]
  -> Running build hook: [filesystems]
  -> Running build hook: [fsck]
==> ERROR: module not found: `nouveau,'
==> ERROR: module not found: `nv'
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/linux-nv.img
==> WARNING: errors were encountered during the build. The image may not be complete.

[/simterm]

Ладно… С этим решением явно что-то не так, но делалось вечером, искать правильные имена модулей или чем там вызвана ошибка – откровенно лень.

Установка драйвера – попытка номер два (правильная)

Проверяем установленные пакеты, и обращаем внимание на описание:

[simterm]

[root@setevoy-arch-pc setevoy]# pacman -Qs nvidia
local/libvdpau 1.1.1+3+ga21bf7a-1
    Nvidia VDPAU library
local/nvidia-lts 1:418.43-1
    NVIDIA drivers for linux-lts
local/nvidia-utils 418.43-2
    NVIDIA drivers utilities

[/simterm]

NVIDIA drivers for linux-lts

Вот тут я понял свою ошибку: пакет с ядром linux-lts != linux, соответсвенно пакет nvidia-lts != nvidia и не явлется версией ядра с Long Term Support, а просто предназначен для другой версии ядра.

Удаляем этот драйвер:

[simterm]

[setevoy@setevoy-arch-pc ~]$ sudo pacman -Rsn nvidia-lts

[/simterm]

Устанавливаем обычный nvidia пакет:

[simterm]

[setevoy@setevoy-arch-pc ~]$ sudo pacman -S nvidia

[/simterm]

Перезагружаем машину, проверяем:

[simterm]

[setevoy@setevoy-arch-pc ~]$ lspci -k | grep -A 2 -E "(VGA|3D)"
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
        Subsystem: ASUSTeK Computer Inc. GP107 [GeForce GTX 1050 Ti]
        Kernel driver in use: nvidia

[/simterm]

Kernel driver in use: nvidia

Окей.

Настройка мониторов

Последний нюанс – мониторы переименовались, так что надо обновить их настройку.

С nouveau они были:

[simterm]

[setevoy@setevoy-arch-pc ~]$ cat .config/openbox/autostart 
xrandr --output HDMI-1 --primary
xrandr --output HDMI-1 --left-of DVI-D-1

[/simterm]

А теперь:

[simterm]

[setevoy@setevoy-arch-pc .config]$ xrandr --listmonitors
Monitors: 2
 0: +DVI-D-0 1920/530x1080/300+0+0  DVI-D-0
 1: +HDMI-0 1920/531x1080/299+1920+0  HDMI-0

[/simterm]

Обновляем конфиг, приводим к виду:

[simterm]

[setevoy@setevoy-arch-pc ~]$ cat .config/openbox/autostart
# nouveau
#xrandr --output HDMI-1 --primary
#xrandr --output HDMI-1 --left-of DVI-D-1

# nvidia
xrandr --output HDMI-0 --primary
xrandr --output HDMI-0 --left-of DVI-D-0

# tools
setxkbmap -layout us,ru -option grp:lctrl_lshift_toggle,grp_led:scroll -variant winkeys &
volumeicon &
qxkb &

[/simterm]

Лучше бы делать это через правила udev – но всё не доходят руки.

Готово.