在Guix System上配置Nvidia GPU

Author: R.W.Flurando

Tags: nvidia, gpu, guix

电脑配置升级了,现在电脑内有一张Nvidia 5060的游戏显卡。

然而,在Linux,准确说在Guix上配置它的过程并不顺利。

遗憾的是,Nonguix的GitLab官方文档和Systemcrafter上的教程都过时了

或者说对RTX5060不起作用

最后我东拼西凑才弄出一个可运行的配置

无法用于显示,只能opengl接口加速。

我猜测用于显示需要把guix所有的包都replace-mesa才行。

算了。

目前可以驱动,需要用显卡的程序按说明将mesa换成nvda即可。

使用时得附带两个环境变量。

废话就没必要说了,下面是相关系统配置

(use-modules (nongnu packages linux)
             (nongnu packages nvidia)
             (nongnu services nvidia))
(operating-system
  (kernel linux)
  (kernel-arguments '("modprobe.blacklist=nouveau"
                      "nvidia_drm.modeset=1"))
  (kernel-loadable-modules (list nvidia-module-open))
  (firmware (cons* nvidia-firmware %base-firmware))
  (services
    (cons*
     (service nvidia-service-type
          (nvidia-configuration
           (module nvidia-module-open)))
     %desktop-services)))

除了kernel-loadable-module那行可以删,其它都是必要的,特别是nvidia-firmware

而且,由于我们要加载nvidia-firmware,只能使用nonguix提供的带不可审查二进制包的内核。

现在显卡是能动了,但怎么让程序使用它呢?

如果你要将它放到配置里,就用replace-mesa包一下

如果是guix shell里,就临时用--with-graft=mesa=nvda

这是由于默认的mesa没法用Nvidia的专有驱动

这样还不够,设置两个环境变量

export __GLX_VENDOR_LIBRARY_NAME=nvidia
export __NV_PRIME_RENDER_OFFLOAD=1

当然,你可以直接写到命令开头,比如__GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1 <替换过mesa的软件包>

我使用godot测试,确实输出了opengl使用显卡的信息。