这个教程网上很多,由于我的发行版是Debain,于是按照Debian wiki上的教程来安装驱动
安装驱动
$ sudo apt install nvidia-driver
如果之前安装了bumblebee和bbswitch,卸载之
$ sudo apt purge bumblebee* bbswitch* && sudo apt autopurge
先下砸nvidia-xrun,如果是arch linux及其相关系列的发行版,在aur源里应该有nvidia-xrun相关的软件,直接一键安装就可以,相关操作可以查看Arch Wiki,但是在debian上没有,所以直接去github上下载
$ git clone https://github.com/Witko/nvidia-xrun.git
下载后是一个文件夹,里面有如下文件(有些需要自己创建)和对应目录关系
/usr/bin/nvidia-xrun - the executable script
------------------即nvidia-xrun/nvidia-xrun
/etc/X11/nvidia-xorg.conf - the main X confing file
------------------即nvidia-xrun/nvidia-xorg.conf
/etc/X11/xinit/nvidia-xinitrc - xinitrc config file. Contains the setting of provider output source
------------------即nvidia-xrun/nvidia-xinitrc
/etc/X11/xinit/nvidia-xinitrc.d - custom xinitrc scripts directory
------------------这个目录需要自己创建
/etc/X11/nvidia-xorg.conf.d - custom X config directory
/etc/systemd/system/nvidia-xrun-pm.service systemd service
------------------这个目录需自己创建
/etc/default/nvidia-xrun - nvidia-xrun config file
------------------即nvidia-xrun/config/nvidia-xrun
/usr/share/xsessions/nvidia-xrun-openbox.desktop - xsession file for openbox
------------------这个可以不要
/usr/share/xsessions/nvidia-xrun-plasma.desktop - xsession file for plasma
------------------这个也可以不要
[OPTIONAL] $XDG_CONFIG_HOME/X11/nvidia-xinitrc - user-level custom xinit script file. You can put here your favourite window manager for example
------------------这个也可以不要
上面的文件说明意思是要把下载的文件复制到相应的目录里,比如nvidia-xrun这个可执行脚本应复制到/usr/bin/或者其他在PATH变量的路径里。
- 2.2 修改bus id
通过命令lspci | grep -i nvidia | awk '{print $1}'查看显卡的bus id,如果nvidia-xorg.conf的bus id和命令显示的大致相同(只有数字0的差,表现形式不同)则不用改。
要配置好显卡的pci bus id,修改方法参照下面。
- 2.3 修改
nvidia-xorg.conf
修改模块搜索路径(仅限Debian)
ModulePath "/usr/lib/nvidia/current"
ModulePath "/usr/lib/x86_64-linux-gnu/nvidia"
ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg/modules"
ModulePath "/usr/lib/xorg"
ModulePath "/usr/lib/xorg/modules"
在nvidia-xinitrc 文件中,替换这一行
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/nvidia:/usr/lib:${LD_LIBRARY_PATH}
到这一步,nvidia-xrun所需要的最基本的环境准备好了,可以重启电脑。重启完后用查看nvidia-xrun-pm.service这个服务是否成功执行,若无,则检查其配置文件是否正确。成功则下一步
切换到tty环境,输入账号密码登陆后,尝试启动另一个桌面环境(这里一openbox为例)
$ nvidia-xrun openbox-session
这期间会要输入sudo的密码,输入后nvidia-xrun会打开显卡,读取nvidia-xorg.conf ,并运行程序。默认的openbox运行后会有一个鼠标可以移动,可以右击鼠标看到鼠标的菜单。若失败,参照下列的TroubleShooting
- 1 按要求配置好并重启后,运行
nvidia-xrun后tty里未出现图形界面,同时tty里报错
Reasons
出现这样的原因是因为nvidia-xorg.conf配置文件有问题
Solution
首先停止所有图形界面,切换至一个tty,以root身份登陆,并运行
# Xorg --configure :1
在/root下会生成xorg.conf.new,内容类似这样
Section "ServerLayout"
Identifier "X.org Configured"
......
将开头的ServerLayout的section部分修改为这样
Section "ServerLayout"
Identifier "X.org Configured"
Screen 1 "Screen0" 0 0 # there starts frome 1 to avoid conflict
# Screen 1 "Screen1"
Screen 2 "Screen1" RightOf "Screen0" # Avoid conflict
# Inactive "Screen0"
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
核心是将Screen部分的参数修改,默认情况下标号为0的screen在你开机启用图形界面时就已被占据,所以修改为1和2
AMD核显部分
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
### <percent>: "<f>%"
### [arg]: arg optional
#Option "Accel" # [<bool>]
#Option "SWcursor" # [<bool>]
#Option "EnablePageFlip" # [<bool>]
#Option "SubPixelOrder" # [<str>]
#Option "ZaphodHeads" # <str>
#Option "AccelMethod" # <str>
#Option "DRI3" # [<bool>]
#Option "DRI" # <i>
#Option "ShadowPrimary" # [<bool>]
#Option "TearFree" # [<bool>]
#Option "DeleteUnusedDP12Displays" # [<bool>]
#Option "VariableRefresh" # [<bool>]
Identifier "Card0"
Driver "amdgpu" # 驱动是amdgpu
BusID "PCI:6:0:0" # pci 的bus id要写对,这里是核显的
EndSection
nvidia部分
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
### <percent>: "<f>%"
### [arg]: arg optional
#Option "SWcursor" # [<bool>]
#Option "HWcursor" # [<bool>]
#Option "NoAccel" # [<bool>]
#Option "ShadowFB" # [<bool>]
#Option "VideoKey" # <i>
#Option "WrappedFB" # [<bool>]
#Option "GLXVBlank" # [<bool>]
#Option "ZaphodHeads" # <str>
#Option "PageFlip" # [<bool>]
#Option "SwapLimit" # <i>
#Option "AsyncUTSDFS" # [<bool>]
#Option "AccelMethod" # <str>
#Option "DRI" # <i>
Identifier "Card1"
Driver "nvidia" # Use the non-free nvidia driver
BusID "PCI:1:0:0" # Set the right pci id of Gpu
EndSection
修改完成后将该文件替换原本的nvidia-xorg.conf便可。若再次失败则试试重启
- 2 关于5.9-5.10内核的nvidia驱动补丁
补丁内容如下,来源于nvidia 的开发者社区论坛,到5.11及以后的内核则无需此补丁
--- linux-source-5.10/kernel/module.c.old 2020-10-14 06:51:57.598066293 +0200
+++ linux-source-5.10/kernel/module.c 2020-10-14 07:58:16.504570606 +0200
@@ -1431,6 +1431,7 @@
return 0;
}
+#if 0
static bool inherit_taint(struct module *mod, struct module *owner)
{
if (!owner || !test_bit(TAINT_PROPRIETARY_MODULE, &owner->taints))
@@ -1449,6 +1450,7 @@
}
return true;
}
+#endif
/* Resolve a symbol for this module. I.e. if we find one, record usage. */
static const struct kernel_symbol *resolve_symbol(struct module *mod,
@@ -1474,6 +1476,7 @@
if (!sym)
goto unlock;
+#if 0
if (license == GPL_ONLY)
mod->using_gplonly_symbols = true;
@@ -1481,6 +1484,7 @@
sym = NULL;
goto getname;
}
+#endif
if (!check_version(info, name, mod, crc)) {
sym = ERR_PTR(-EINVAL);
将内容保存为文本文件,再在源码目录下用patch命令打上,再编译内核并安装就可加载驱动
How to use Nvidia-Xrun to unlock your Nvidia laptop's full potential on linux