在前面《完全用Deepin Linux娱乐、工作、学习(1)》一文中,我简单和各位分享了关于Deepin Linux的基础体验。对于Deepin Linux来说其中有它的好也有它的不足,我相信任何人、任何事、任何物不是与生俱来的,都是经过慢慢打磨出来的,就像我们从小长大一样,需要经过很多的事情才会真正长大。同样我们需要给它足够多的时间,相信它包容它,慢慢地它也会长大的,毕竟它还年轻。

        今天我仅仅以我个人笔记本的情况,和大家分享一下关于显卡驱动部份的安装与配置,希望能够给各位起到一个引导性的作用,其中难免会有一些错误,希望不要误导各位,欢迎指正,以便我们更好的将这份资料传递给其它Deepin系统的爱好者。

        因为我的笔记本是双显卡的,即Intel+NVIDIA显卡组合。先简单说一下关于Intel+NVIDIA显卡组合,NVIDIA的Optimus(擎天柱)技术可让笔记本根据性能需要在英特尔集成显卡和NVIDIA独显之间自动切换,以达到节约能耗与平衡性能双需求,但此项技术仅仅支持Windows系统。Optimus技术是不依赖于硬件复杂结构的交火显卡实现独立显卡按需渲染并传输给集成显卡,集成显卡则负责显示功能。当笔记本通过电源供电时,独立显卡将关闭,以延长电池使用时长。多亏了Linux作者Linus Torvalds在芬兰的一个活动中对NVIDIA竖起了中指,这才让NVIDIA工程师致力于Linux上实现Optimus功能,但到目前为止它还不能够真正商用。

wpsD83A.tmp

        为了解决这一窘境,社区提供了另一种解决方案即Bumblebee,Bumblebee一直致力于在Linux下实现NVIDIA的Optimus技术,不过到现在为止,还未能够完全解决,比如说:显卡自动切换等。下面我就来说说Bumblebee上折腾的全过程。

1、可能遇到的坑

        在我安装显卡驱动的时候就遇到了很多的坑,以下坑仅限于Dell XPS 15 9560 4K,其它型号的机器具体不清楚:
坑一:安装完系统后直接更新系统CPU占用100%,基本上没有办法操作了,关于这部份的原因还不仅仅只是显卡驱动造成的,后面我们开篇再述。
坑二:通过Deepin Linux驱动管理器安装驱动,重启笔记本黑屏,通过grub设置Windows2009也无效。
坑三:通过Deepin Linux显卡驱动管理器安装大黄蜂,也不行照样挂。

2、跃坑的正确姿势

个人实测正确安装显卡驱动的姿势:
1)通过命令行安装闭源版独显驱动(试安装了NVIDIA官方的闭源版驱动未成功,根据查看相关资料,说是需要关闭集显,然后再进行独显驱动的安装,这个我没有折腾)。
2)安装闭源版独显驱动以后,配置grub再重启笔记本。
3)安装大黄峰,再重启笔记本。
4)测试集显和独显切换(切换过程需要重启笔记本,可单独使用某个程序调用独显驱动,不需要重启笔记本。),至此显卡驱动安装完成。

3、安装独立显卡驱动

Ctrl+Alt+F2进入tty2模式,然后登录。(此处为Deepin wiki知识库中所述,根据个人测试可以不用进入tty模式进行操作。)
先停止lightdm服务
sudo systemctl stop lightdm #关闭登录管理器服务
如果安装有驱动建议先卸载掉旧版驱动
sudo apt-get remove --purge nvidia*
安装console-setup
sudo apt-get install console-setup
安装源内版本驱动(为闭源版本)
sudo apt-get install nvidia-driver
验证驱动是否安装成功
sudo apt-get install mesa-utils
注解:安装mesa-utils这个包,用来显示系统的glx相关信息。
optirun glxinfo|grep NVIDIA
server glx vendor string: NVIDIA Corporation
OpenGL vendor string: NVIDIA Corporation
OpenGL core profile version string: 4.5.0 NVIDIA 387.34
OpenGL core profile shading language version string: 4.50 NVIDIA
OpenGL version string: 4.6.0 NVIDIA 387.34
OpenGL shading language version string: 4.60 NVIDIA

4、修正重启电脑黑屏情况

        因为对新笔记本的支持问题,16年以后的笔记本可能会出现在安装独显驱动后,如果你马上重启笔记本可能会出现黑屏、挂起或死机的情况,所以在安装完驱动以后,我们需要配置grub,然后让系统启动的时候通过集显启动。
vi /etc/default/grub
修改:
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet"
为:
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet acpi_osi=! acpi_osi='Windows 2009'"(注意:这里的单双引号均为英文符)
重新生成grub配置文件
sudo update-grub
这时候会更新grub.cfg文件,当然我们也可以直接修改grub.cfg文件,位于/boot/grub/grub.cfg。
需要注意的是acpi_osi=! acpi_osi='Windows 2009'配置并不适用于所有笔记本电脑,对于不同的电脑设置不一样,有些需要设置为:acpi_osi="!Windows 2015",具体可以参考以下链接:
https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-234494238

5、安装bumblebee

        首先我们需要了解bumblebee的功能,在开篇处我们也有说到,bumblebee就是Optimus技术在Linux下的实现。Bumblebee试图模拟Optimus技术的行为,当需要的时候使用独立显卡进行渲染,不需要的时候则关闭。
#安装Bumblebee(适用于闭源驱动)
sudo apt-get install bumblebee-nividia primus nvidia-settings
primus是可选项用于提升性能,nvidia-settings用于图形化界面的设置。
#查看对应bumblebee版本
bumblebeed --version
bumblebeed (Bumblebee) 3.2.1
Copyright (C) 2011 The Bumblebee Project
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
当你看到你的bumblebeed版本是3.2.1的时候,恭喜你,你的电脑是自带电源管理功能开箱即用的,它不需要进行任何设置。
在安装nvidia-settings后,我们可能通过以下命令设置独显或查看独显温度等。
#调用nvidia显卡设置选项
optirun nvidia-settings -c :8
wps2B3D.tmp

6、验证bumblebee是否工作正常

        安装完毕后重启电脑使Bumblebee生效,测试 Bumblebee 是否支持 Optimus功能 ,如果在终端中看到有关NVIDIA的提示和齿轮转动的图形界面,恭喜你Bumblebee的Optimus技术已经开始工作了。
#验证命令
optirun glxgears -info
GL_RENDERER   = GeForce GTX 1050/PCIe/SSE2
GL_VERSION    = 4.6.0 NVIDIA 387.34
GL_VENDOR     = NVIDIA Corporation
wps7B04.tmp

7、深度显卡管理工具驱动切换

        前面讲到通过命令行来安装闭源显卡驱动,其实我们也可以通过深度显卡驱动管理工具来进行驱动的切换,在这里可以将大黄峰方案切换至NVIDIA开源驱动,这里得感谢论坛朋友woodelf解惑。
我们可以通过深度显卡管理工具进行显卡驱动的切换,切换前为:大黄峰方案。
wpsB3F7.tmp
切换后手动重启电脑,在这过程中会重启两次电脑,进入桌面提示切换成功。
wps25EC.tmp
wps25ED.tmp
         但是切换驱动以后发现独显的工作状态为长期开启状态,根据woodelf所述是因为nouveau驱动对我的独显支持不佳,使独显处于常开状态。
lspci | grep NVIDIA
01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1)
rev a1 表示开启,rev ff 表示关闭。
在测试过程中发现当我从NVIDIA开源驱动切回大黄峰方案的时候切换失败。(这里不再述说,开篇再述)

8、解读Bumblebee工作模式

        我们可以通过sudo update-glx --config glx命令进行显卡工作模式的切换,默认情况下采用的是bumblebee自动模式,但我们可以手动进行模式切换。
wps69CD.tmp
那么下面这三种情况有什么不同了?
选项一:mesa-diverted
在Deepin Linux下可开启3D特效,在我的电脑上开启以后,它可以支持intel集显硬件渲染,且支持OpenGL 3.0。
glxinfo | grep render
direct rendering: Yes #开启直接渲染
OpenGL renderer string: Mesa DRI Intel(R) Kabylake GT2  #使用Intel集显硬件渲染。

glxinfo | grep OpenGL
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Kabylake GT2
OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.0.6
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 13.0.6 #支持OpenGL版本
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
但是它还有另外两种工作方式:
第一种是不开启直接渲染,通过间接硬件渲染。
direct rendering: No (LIBGL_ALWAYS_INDIRECT set)
OpenGL renderer string: Mesa DRI Intel(R) Kabylake GT2
第二种是开启直接渲染,但是通过软件渲染。
direct rendering: Yes
OpenGL renderer string: Software Rasterizer
从这三种工作方式的性能上来说,直接硬件渲染速度是最快的,其次是间接硬件渲染,最慢的是软件渲染。
对于独显我们可以使用Primusrun来确认,独显是否支持硬件渲染。
primusrun glxinfo | grep render
direct rendering: Yes
OpenGL renderer string: GeForce GTX 1050/PCIe/SSE2
选项二:nvidia
在Deepin Linux下不支持开启3D特效,简单说就是它不支持3D显示,只支持2D显示。使用的是glamor模式,glamor是一种使用OpenGL的2D加速方式。
选项三:bumblebee 手动模式
暂时不清楚bumblebee手动和自动模式有什么区别,希望知道的朋友在后面留言告知。

9、测试显卡是否支持2D或3D

        glxgears是流行的OpenGL测试,渲染非常简单的齿轮,输出帧率。尽管glxgears可以测试显卡驱动直接渲染能力,但是它已经过时,不能代表GNU/Linux图形显示的现状以及OpenGL的全部能力。glxgears仅测试了一小部分OpenGL功能。在glxgears中体现的性能提升在游戏中并不能感受到。它并不能够真正完美的测试显卡性能,所以“glxgears is not a benchmark”。

1)测试集显

glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
304 frames in 5.0 seconds = 60.702 FPS
300 frames in 5.0 seconds = 59.996 FPS
300 frames in 5.0 seconds = 59.997 FPS
300 frames in 5.0 seconds = 59.997 FPS

2)测试独显

primusrun glxgears
301 frames in 5.0 seconds = 60.107 FPS
300 frames in 5.0 seconds = 59.997 FPS
300 frames in 5.0 seconds = 60.000 FPS
300 frames in 5.0 seconds = 59.995 FPS

        在测试性能的时候,我们会发现不管是独显还是集显都不超过60FPS,这是因为显示屏的原因。实际上bumblebee 设计之初就对大于60FPS的帧率进行了丢弃操作,以避免无用的计算,如果你需要测试全部的显卡FPS,可以通过关闭垂直同步再进行测试。

3)关闭垂直同步测试集显

vblank_mode=0 glxgears
13583 frames in 5.0 seconds = 2716.592 FPS
20703 frames in 5.0 seconds = 4140.438 FPS
38129 frames in 5.0 seconds = 7625.753 FPS
38583 frames in 5.0 seconds = 7716.458 FPS
35381 frames in 5.0 seconds = 7076.138 FPS
37755 frames in 5.0 seconds = 7550.912 FPS
39684 frames in 5.0 seconds = 7936.765 FPS
38865 frames in 5.0 seconds = 7772.929 FPS

4)关闭垂直同步测试独显

vblank_mode=0 primusrun glxgears
14129 frames in 5.0 seconds = 2825.743 FPS
15388 frames in 5.0 seconds = 3077.595 FPS
15437 frames in 5.0 seconds = 3087.335 FPS
14720 frames in 5.0 seconds = 2943.999 FPS
13834 frames in 5.0 seconds = 2766.678 FPS
11818 frames in 5.0 seconds = 2363.512 FPS
13979 frames in 5.0 seconds = 2795.728 FPS
15798 frames in 5.0 seconds = 3159.472 FPS

10、测试显卡性能

对于显卡性能测试,可以使用Unigine Heaven 4.0工具进行测试。
下载地址:http://m11-assets.unigine.com/d/Unigine_Heaven-4.0.run
下载以后,授权可执行权限,再解压,进入对应目录,执行heaven。
chmod –R 777 ./Unigine_Heaven-4.0.run
sh ./Unigine_Heaven-4.0.run
cd Unigine_Heaven-4.0

1)集显性能测试

./heaven
点击“run”进去以后按F9,然后再点击“benchmark”进行测试即可。(注:个人采用默认基准进行测试)
集显测试结果:
深度截图_选择区域_20180414120611

2)独显性能测试

optirun ./heaven
独显测试结果:
深度截图_选择区域_20180414120527
        从测试的结果来看,独显的性能明显高于集显,但因为个人笔记本只安装了Deepin Linux单系统,所以没有办法在Windows下测试对应显卡性能是否优于Linux。

10、应用调用独显方法

在bumblebee模式下,我们如果需要使用独显来跑程序或游戏时候,终端执行如下命令即可:
#使用独显运行command程序
optirun command 或 primusrun command
#桥接方式
optirun -b primus command #使用独显运行command程序,提升性能。
例如运行virtualbox:
sudo optirun virtualbox#使用独显(NVIDIA显卡)运行virtualbox
在我们通过N卡来启动和关闭virtualbox的时候,我们可以通过命令来查看是否采用独立显卡运行,当使用optirun命令的程序关闭后,系统将会自动关闭独显(NVIDIA显卡)。
#当独显开启virtualbox时,显卡状态
optirun --status
Bumblebee status: Ready (3.2.1). X is PID 4125, 2 applications using bumblebeed.
#当独显关闭virtualbox时,显卡状态
optirun --status
Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.
当然我们还可以用它来运行浏览器等程序,如:optirun vmware、optirun firefox等
#独显运行特定应用小技巧
         如果你需要渲染的程序很多,你不想每次都从命令行启动的话,可以去修改 /usr/share/applications/<application>.desktop 文件,在 Exec= 后面加上 primusrun或optirun 再跟程序路径与名称,这样以后双击对应应用图标时,它就会以独显来运行对应应用了。

11、写在最后

        就个人而言目前还没有办法能够完美的理解bumblebee,毕竟我不是一位显卡驱动的开发者,但希望以上的叙述能够帮忙到各位,解决显卡驱动所带来的困惑。