zcmimi's blog
avatar
zcmimi
2020-08-30 10:06:00
  • 本文总阅读量

注: 以下全部在root用户下运行

亲测有效

安装所需包

首先安装linux-headers,如果是linux-lts则是linux-lts-headers:

pacman -S linux-headers

接着安装nvidia驱动:

pacman -S nvidia nvidia-utils nvidia-utils nvidia-settings nvidia-dkms

其中安装nvidia-dkms,就不用对每个内核都安装对应驱动(如linux-lts需要安装nvidia-lts)

开始配置

查看n卡的BusID,并记住:

lspci | egrep 'VGA|3D'

生成配置文件:

nvidia-xconfig

修改配置文件/etc/X11/xorg.conf,需要在文件开头补充以下内容:

Section "Module"                                                      #此部分可能没有,自行添加
    load "modesetting"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "1:0:0"                                            #此处填刚刚查询到的BusID
    Option         "AllowEmptyInitialConfiguration"
EndSection

配置启动器

lightdm

编辑/etc/lightdm/display_setup.sh,写入以下内容:

#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

添加执行权限:

chmod +x /etc/lightdm/display_setup.sh

编辑/etc/lightdm/lightdm.conf,写入以下内容:

[Seat:*]
display-setup-script=/etc/lightdm/display_setup.sh

sddm

编辑/usr/share/sddm/scripts/Xsetup,写入以下内容:

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

gdm

编辑/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

解决画面撕裂问题

编辑/etc/mkinitcpio.conf,修改对应部分:

MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

编辑/etc/default/grub,修改对应部分:

GRUB_CMDLINE_LINUX_DEFAULT="quiet nvidia-drm.modeset=1"  # 此处加nvidia-drm.modeset=1参数

(这里必须是grub引导,其他引导自行百度/谷歌)

生成新的引导文件:

grub-mkconfig -o /boot/grub/grub.cfg # 此处配置文件位置有可能不同,请自行修改

或者(如果已经安装了update-grub的话):

update-grub

nvidia升级时自动更新引导

创建pacman hooks,让每次更新nvidia包的时候更新grub引导

创建hooks目录:

mkdir /etc/pacman.d/hooks

编辑/etc/pacman.d/hooks/nvidia.hook,写入以下内容:

[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia
Target=linux
# Change the linux part above and in the Exec line if a different kernel is used

[Action]
Description=Update Nvidia module in initcpio
Depends=mkinitcpio
When=PostTransaction
NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'

参考:

archlinux配置gtx 1650
comment评论
Search
search