875 字
4 分钟
Arch Linux 启用独显直连(NVIDIA)
2025-01-01

前言#

IMPORTANT

这篇博客很多文字是照搬那个参考链接的,感觉即使我自己手打文稿也觉得和原文讲的差不多,就懒得想了直接Ctrl+C Ctrl+V了。

本博客参考网页:点我

有一次周末,我在安装好的Arch Linux系统和NVIDIA驱动之后玩MC,发现帧数撑死只有100多,查看nvidia-smi发现能正常使用命令行,但是游戏画面还是卡的很严重,于是我开始排查问题。(如图,MC打开F3界面发现视频驱动使用的是Intel核显)

pAzxyqA.png

解决方法#

上篇文章我介绍了安装NVIDIA驱动,没看过的先点这里

1. 安装切换工具#

网上的大多数博客仅仅是在hybrid模式下仅使用独显允许所有进程,并非真正的独显直连。这种配置下独立显卡绘制完成后,会将framebuffer交由集成显卡然后输出至显示器,不仅延迟更高,性能也会受到总线带宽的限制。

system76Pop!_OS是为数不多的自带独显驱动和管理器的发行版,并且system76编写了一个优秀的电源管理器system76-power用于控制电源配置和显卡模式。根据我的使用经验,我更倾向于使用system76-power而不是optimus-manager或其他管理器。并且optimus-manager只能在混合模式下使用独显,而不是真正的独显直连。

对于Arch Linux用户,system76-power已经包含在aur中,软件包名为system76-power。该工具由Rust编写,并依赖多个crates

使用yay安装:

yay -S system76-power

启用system76-power守护服务#

sudo systemctl enable com.system76.PowerDaemon.service
sudo systemctl start com.system76.PowerDaemon.service

切换到独显渲染#

sudo system76-power graphics nvidia

此时仍然不是独显直连状态,仅仅是只使用nvidia显卡渲染。

允许Nvidia-drm作为默认渲染源#

CAUTION

目前独显直连通过XRandR--setprovideroutputsource实现,这意味着Wayland目前无法使用独显直连。(未考证)

检查/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf,其中有一个文件已经存在了类似一下的内容,这意味着它是你要修改的配置文件。

(如果/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf的文件不存在就直接复制一模一样的过去),不影响也不冲突。

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

Option "AllowEmptyInitialConfiguration"后添加一行Option "PrimaryGPU" "yes"

配置显示源自动切换#

如果此时重启,在进入DE时应该会导致黑屏。这是由于Xorg将集成显卡作为了输出源而不是独立显卡。我们需要在DE实际启动前将显示源切换成Nvidia显卡。

根据不同的DM,需要进行不同的配置。

SDDM#

/usr/share/sddm/scripts/Xsetup中添加以下内容:

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

GNOME#

/usr/share/gdm/greeter/autostart/optimus.desktop/etc/xdg/autostart/optimus.desktop中添加以下相同的内容:

[Desktop Entry]
Type=Application
Name=Optimus
Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer

不使用DM#

如果不使用DM,在~/.xinitrc中添加以下内容:

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

LightDM#

参考Arch Wiki

重启#

重新启动后,应该能够进入DM和桌面。在终端中执行nvidia-smi,应该能够发现所有的GUI进程都由Nvidia显卡渲染,并且Xorg占用数百兆内存。

pAzziIx.png

效果#

在进行上文的步骤后,我立刻打开Minecraft,按下F3查看渲染模式,发现已经切换到了Nvidia显卡渲染,游戏画面立刻变得流畅,帧数也上去了。(请选择你的拍屏大师.png)

pAzzVzD.jpg

Arch Linux 启用独显直连(NVIDIA)
https://lingxi9374.github.io/posts/教程/arch-nvidia/
作者
泠熙_LingXi_
发布于
2025-01-01
许可协议
CC BY-NC-SA 4.0