NVIDIA + Wayland 在 Arch Linux 上的完整配置指南

适用于 Arch Linux 用户,让 NVIDIA 显卡在 Wayland 下正常运行。

Wayland 是 Linux 图形系统的新一代显示协议,逐渐取代传统的 Xorg。
虽然 Wayland 在安全性和架构上更先进,但 NVIDIA 显卡长期以来在 Wayland 上兼容性较差,经常出现渲染或性能问题。

随着 NVIDIA 驱动逐渐支持 GBM (Generic Buffer Management),现在在 Arch Linux 上使用 NVIDIA + Wayland 已经变得可行。

本文将介绍完整配置步骤。


1 设置环境变量

NVIDIA 新驱动支持 GBM 后端,Wayland 合成器通常默认使用它。

编辑环境变量文件:

sudo nano /etc/environment

添加以下内容:

GBM_BACKEND=nvidia-drm
__GLX_VENDOR_LIBRARY_NAME=nvidia

保存退出。


2 在系统启动时加载 NVIDIA 模块

为了确保 NVIDIA 模块在系统启动时加载,需要将模块加入 initramfs

编辑配置文件:

sudo nano /etc/mkinitcpio.conf

找到:

MODULES=()

修改为:

MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

移除 kms hook

在同一个文件中找到:

HOOKS=()

删除其中的:

kms

原因:

  • 避免加载 nouveau 开源驱动
  • 防止与 NVIDIA 官方驱动冲突

重新生成 initramfs

执行:

sudo mkinitcpio -P

如果出现类似:

WARNING: Possibly missing firmware

通常可以忽略。


3 启用 DRM (Direct Rendering Manager)

Wayland 依赖 DRM 内核模式设置 (KMS) 才能正常运行。(ArchWiki)

需要在 GRUB 启动参数中启用 NVIDIA DRM。

编辑 GRUB 配置:

sudo nano /etc/default/grub

找到:

GRUB_CMDLINE_LINUX_DEFAULT=

修改为:

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 nomodeset nvidia-drm.modeset=1 nvidia_drm.fbdev=1"

KDE Plasma 用户额外参数

如果使用 KDE Plasma,建议再加一个参数:

nvidia.NVreg_EnableGpuFirmware=0

最终示例:

GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 nomodeset nvidia-drm.modeset=1 nvidia_drm.fbdev=1 nvidia.NVreg_EnableGpuFirmware=0"

重新生成 GRUB

执行:

sudo grub-mkconfig -o /boot/grub/grub.cfg

4 重启并测试 Wayland

重启系统:

reboot

登录界面选择:

Wayland Session

例如:

  • GNOME Wayland
  • Plasma Wayland
  • Hyprland

5 验证 NVIDIA DRM 是否启用

执行:

cat /sys/module/nvidia_drm/parameters/modeset

如果输出:

Y

说明 DRM 已成功启用。


6 注意事项

1 桌面环境支持程度

Wayland 支持程度不同:

推荐:

  • GNOME
  • KDE Plasma
  • Hyprland

支持较差:

  • Cinnamon

2 应用兼容性

部分应用仍依赖 X11,需要通过 Xwayland 运行。

可能出现:

  • UI 问题
  • 性能下降
  • 窗口异常

3 NVIDIA 与 Wayland仍在改进

虽然现在已经可用,但仍存在:

  • 一些游戏问题
  • 多显示器问题
  • 某些应用兼容性问题

总结

通过以下步骤可以让 Arch + NVIDIA + Wayland 正常运行:

1️⃣ 设置 GBM 环境变量
2️⃣ 在 initramfs 中加载 NVIDIA 模块
3️⃣ 删除 kms hook
4️⃣ 启用 NVIDIA DRM
5️⃣ 重新生成 GRUB
6️⃣ 登录 Wayland 会话

完成后即可在 Arch Linux 上使用 Wayland + NVIDIA。