Linux显卡驱动nvidia折腾记(mint/manjaro/deepin)

近日对我这台笔记本的Nvidia显卡进行测试,在Linux下,分别在mint、manjaro、deepin下做了测试。发现并没有那么理想,这篇文章就是一个记录,涉及的一些命令都有一些参考价值,我的不行,不一定你的也不行,所以大家可以一试。

我的笔记本之前在win下都是用NVIDIA Optimus,NVIDIA Optimus是NVIDIA公司最新开发的双显卡,基于双显卡的智能切换技术,能够根据系统的负载自动切换独立显卡和集成显卡的运行。Optimus技术可完全自动地发挥作用,无需手动更改设置值。采用Optimus技术的笔记本,当系统仅运行一些简单程序、或是仅对处理器有较高要求的大型程序时,Optimus路由会仅让集成显卡工作,而将独立显卡完全关闭。只有在需要用到显卡的大型游戏或程序才切换到独立显卡进行运算。

而在Linux下,双显卡切换技术是Bumblebee ,Bumblebee 致力于使 NVIDIA Optimus 在 GNU/Linux 系统上可用,实现两块不同的供电配置的显卡同时插入使用,共享同一个 framebuffer。

1、LinuxMint

linuxsight@linuxsight-Satellite-L40-A:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1c.4/0000:04:00.0 ==
modalias : pci:v000010DEd00001292sv00001179sd0000FA05bc03sc02i00
vendor : NVIDIA Corporation
model : GK208M [GeForce GT 740M]
driver : nvidia-340 - distro non-free
driver : nvidia-driver-390 - distro non-free recommended
driver : xserver-xorg-video-nouveau - distro free builtin

这将为你提供可以安装的卡供应商、型号和推荐的驱动程序。从上面输出的信息中,我们可以看到推荐的驱动程序是nvidia-driver-390

linuxsight@linuxsight-Satellite-L40-A:~$ sudo ubuntu-drivers autoinstall
[sudo] password for linuxsight:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
lib32gcc1 libc6-i386
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
libnvidia-cfg1-390 libnvidia-common-390 libnvidia-compute-390
libnvidia-decode-390 libnvidia-encode-390 libnvidia-fbc1-390
libnvidia-gl-390 libnvidia-ifr1-390 nvidia-compute-utils-390 nvidia-dkms-390
nvidia-kernel-common-390 nvidia-kernel-source-390 nvidia-utils-390
xserver-xorg-video-nvidia-390
推荐安装:
nvidia-prime libnvidia-compute-390:i386 libnvidia-decode-390:i386
libnvidia-encode-390:i386 libnvidia-ifr1-390:i386 libnvidia-fbc1-390:i386
libnvidia-gl-390:i386
下列软件包将被【卸载】:
libcuda1-340 nvidia-340 nvidia-opencl-icd-340
下列【新】软件包将被安装:
libnvidia-cfg1-390 libnvidia-common-390 libnvidia-compute-390
libnvidia-decode-390 libnvidia-encode-390 libnvidia-fbc1-390
libnvidia-gl-390 libnvidia-ifr1-390 nvidia-compute-utils-390 nvidia-dkms-390
nvidia-driver-390 nvidia-kernel-common-390 nvidia-kernel-source-390
nvidia-utils-390 xserver-xorg-video-nvidia-390
升级了 0 个软件包,新安装了 15 个软件包,要卸载 3 个软件包,有 261 个软件包未被升级。
需要下载 10.8 MB/47.1 MB 的归档。
解压缩后将会空出 130 MB 的空间。

linuxsight@linuxsight-Satellite-L40-A:~$ ubuntu-drivers list
nvidia-340
nvidia-driver-390

linuxsight@linuxsight-Satellite-L40-A:~$ lspci -vnn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation Haswell-ULT Integrated Graphics Controller [8086:0a16] (rev 09) (prog-if 00 [VGA controller

 

linuxsight@linuxsight-Satellite-L40-A:~$ dkms status
nvidia, 390.116, 5.0.0-32-generic, x86_64: installed

安装nvidia-settings软件包,该软件包提供用于配置Nvidia卡设置的图形工具:

sudo apt-get install nvidia-settings

在网上发现大家都在使用双显卡Bumblebee,

bumblebee : 依赖: xserver-xorg-core (>= 2:1.18)

linuxsight@linuxsight-Satellite-L40-A:~$ sudo apt install  xserver-xorg-core

linuxsight@linuxsight-Satellite-L40-A:~$ sudo apt install bumblebee

发现optirun glxgears不行,重启之后发现鼠标键盘都不能动了,这咋回事,宣告失败了。
2、manjaro
在manjaro setting里,我们看到硬件里面提供安装显卡的选项,可惜图忘了保存了。

在网上看了别人的做法:

安装依赖

sudo pacman -S virtualgl lib32-virtualgl lib32-primus primus

安装nvidia闭源驱动与intel驱动混合版bumblebee

sudo mhwd -f -i pci video-hybrid-intel-nvidia-bumblebee

开启自动启动bumblebeed服务

sudo systemctl enable bumblebeed

将用户添加到bumblee组

sudo gpasswd -a $USER bumblebee

但发现第二句无法执行,然后我是在manjaro setting里安装的显卡驱动。

glxgears 测试集显的FPS

optirun glxgears 测试独显的FPS

独显也一直出现错误。

[ 428.549910] [ERROR]You've no permission to communicate with the Bumblebee daemon. Try adding yourself to the 'bumblebee' group
[ 428.549934] [ERROR]Could not connect to bumblebee daemon - is it running?

3、deepin

安装驱动

sudo apt-get install bumblebee-nvidia nvidia-driver nvidia-settings

检查驱动是否安装成功

sudo apt-get install mesa-utils
注解:安装mesa-utils这个包,用来显示系统的glx相关信息。

optirun glxinfo|grep NVIDIA
注解:用optirun调用独显输出系统的glxinfo来查看驱动是否安装成功。如果打开nvidia-settings时提示“You do not appear to be using the NVIDIA X driver”,在terminal中运行如下命令optirun -b none nvidia-settings -c :8

测试 Bumblebee 是否支持你的 Optimus 系统:

optirun glxgears -info

但也是一直出错

linuxsight@linuxsight-PC:~$ optirun glxgears
primus: fatal: failed to load any of the libraries: /usr/lib/x86_64-linux-gnu/nvidia/libGL.so.1:/usr/lib/i386-linux-gnu/nvidia/libGL.so.1:/usr/lib/nvidia/libGL.so.1
/usr/lib/x86_64-linux-gnu/nvidia/libGL.so.1: cannot open shared object file: No such file or directory
/usr/lib/i386-linux-gnu/nvidia/libGL.so.1: cannot open shared object file: No such file or directory
/usr/lib/nvidia/libGL.so.1: cannot open shared object file: No such file or directory

引用网上的一段话:
目前linux下有三种optimus的实现:
l nouveau-only: PRIME GPU offloading using nouveau
l nvidia-only: nvidia's more recent implementation, also packaged as nvidia-prime in Ubuntu
l nouveau or nvidia: bumblebee
ubuntu采用的是第二种,debian只打包了第三种bumblebee。ubuntu的nvidia-prime如果要切换显卡,必须要重启X session,因为在X启动的时候nvidia的驱动模块就已经加载了,也就是说独显是一直在工作的。而debian采用bumblebee,开机加载的是intel的驱动,程序默认也都是用intel的集显,如果需要用独显要用optirun运行程序,这样能做到最大程度的提高电池续航能力。目前debian的nvidia-driver,nvidia-legacy-driver都是默认bumblebee解决双显卡,X启动时,驱动是intel,glx是mesa的glx,但是有些硬件可能会出现驱动是intel,glx却是nvidia的情况,这就会导致opengl的程序跑不起来,需要手动执行sudo update-alternatives --config glx来选择。

两种实现其实各有利弊,debian当前也没有打包prime的打算打包方式不同,debian这边没有打包适配prime的驱动,加prime支持要改东西太多,所以就只用大黄蜂了。

写得有点乱,记录一些命令,提供参考。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: