注: 以下全部在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
编辑/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
编辑/usr/share/sddm/scripts/Xsetup
,写入以下内容:
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
编辑/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
创建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'
参考: