The main goal when I was buying a new PC with NVIDIA GeForce GTX 1050 Ti was an ability to play games on Arch Linux without reboots into Windows.
For this need to install NVIDIA drivers so Linux will use it instead of nouveau
(although I didn’t even try to run any game with nouveau
).
After a couple of my attempts to install NVIDIA drivers on my laptop a few years ago, I expected issues here as well and was ready for long and deep dive into X.Org configs and logs. Suddenly, everything went almost without problems – the only one I faced with was caused by my own mistake, see about it below.
Documentation is here>>>.
Contents
NVIDIA driver installation – attempt #1 (wrong)
Find a video card and a driver used now::
[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]
Check old cards list here тут>>>.
Actually, the only issue was caused by the fact that I was tempted by the “lts” postfix in the nvidia-lts
package name.
Install it (no):
[simterm]
[setevoy@setevoy-arch-pc .config]$ sudo pacman -S nvidia-lts
[/simterm]
Reboot PC and absolutely expected for me as I was waiting for problems – Openbox won’t start.
Check the driver used now:
[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
Ummm…
And X.Org log /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? 🙂
Found this>>> discussion – let’s try.
Need to update initramfs
as mentioned here>>> and here>>>.
Edit the /etc/mkinitcpio.conf
, add modules there:
... MODULES=(nouveau, nv) ...
Build a new kernel with a custom name to not overwrite the existing one:
[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]
Well… There is something wrong with this solution and as I did it in the evening – didn’t want to waste time looking for reasons and/or correct modules names.
NVIDIA driver installation – attempt #2 (correct)
Check NVIDIA-related packages installed now and pay attention to descriptions:
[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
And here I got my mistake: the kernel’s package linux-lts
!= linux
and respectively nvidia-lts
!= nvidia
and isn’t driver version with Long term Support but just driver for another kernel’s version.
Remove this driver:
[simterm]
[setevoy@setevoy-arch-pc ~]$ sudo pacman -Rsn nvidia-lts
[/simterm]
Install the common nvidia
package:
[simterm]
[setevoy@setevoy-arch-pc ~]$ sudo pacman -S nvidia
[/simterm]
Reboot PC one more time and check the driver used now:
[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
Okay.
Monitors configuration
The last thing to do now is to update my monitors’ settings.
With the nouveau
they had names:
[simterm]
[setevoy@setevoy-arch-pc ~]$ cat .config/openbox/autostart xrandr --output HDMI-1 --primary xrandr --output HDMI-1 --left-of DVI-D-1
[/simterm]
But now:
[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]
Update Openbox’s config and set them with the new names:
[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]
In fact, better to do it with the udev
rules – but still can’t find to realize it.
Done.