Arch双显卡问题——如何使用独显
概述
NVIDIA独立显卡,可以代替普通的集成显卡做显示,也可以独立于CPU之外来处理一些图形数据。性能优于集成显卡。所以玩游戏的时候,使用独立显卡会优于默认的集成显卡,会给我们带来给更好的游戏体验,比如在帧频方面上,独立显卡要远高于集成显卡。
总而言之,显卡越高端,玩游戏(特别是大型游戏)的游戏体验越好。
当然,如果没有什么特殊要求的话,只安装集成显卡对应的驱动就可以了,一般都是Intel的,我的是Intel+NVIDIA的,(近日听说steam上又多了好多款可以在linux上运行的游戏了^_^),所以就得要考虑下这个问题了。
Windows下,这些都不需要我们所操心了,但在Linux下,默认的独立显卡驱动是开源的nouveau,但是使用这个驱动会导致无法正常进入我们的桌面系统,而且,虽然nouveau是开源的,但是,它在显卡切换上性能比较差,不能与闭源的NVIDIA驱动相比,同时也不支持任何的省电功能(使用NVIDIA独立显卡会更耗电)。
如果说电脑是独显+集显的,然后只安装了独显驱动,不装集显驱动的话,会导致屏幕黑屏的,因为NVIDIA的optimus功能会将独显的绘制结果交由集成显卡来显示。
当然,黑屏的原因不只只有这个,比如下面会遇到的装了集显独显驱动后,开机还是黑屏的情况。
所以考虑采取使用闭源的NVIDIA驱动,符合以下条件的,出门左拐,走好不送哈:
- 没有独立显卡的
- BIOS不支持的(这个请自行查询)
- 不能接受闭源软件的
安装NVIDIA驱动和Bumblebee
默认情况下,如果使用安装系统提供的独立显卡驱动nouveau会导致无法正常进入桌面,一般情况下,都是把这个驱动给禁用掉nouveau.modeset=0
,也就是说不然独显工作,就可以正常使用了。
首先查看下自己电脑的显卡情况,使用命令lspci | grep -i vga
,可以看到如下的结果
1 | dclunatic@dcLunatic ~ [17:30:23] |
可以看到Intel的集成显卡和NVIDIA的独立显卡
安装对应的显卡驱动,具体的可参照下图安装
这里我选用的是xf86-video-intel和nvidia,使用命令pacman -S xf86-video-intel nvida
安装。
闭源NVIDIA驱动支持官方的Optimus功能,它能够最大程序的发挥出NVIDIA显卡的性能,但是却不支持切换显卡,意味着你就只能使用独立显卡,再也不能使用集成显卡了,据说也会有更多的bug。
这里说下Optimus技术,它是一种不依赖于硬件的独立显卡实现。独立显卡按需渲染,继而交由集显显示。当笔记本通过电池供电时,独显关闭;使用电源供电时,打开独显,通过这样,来增强笔记本的续航能力。
这里使用第三方程序Bumblebee来实现类似于Optimus的功能,它是Linux上Optimus的替代品之一。它通过virtualGL或者primus来实现独显渲染,集显显示的功能。独立显卡在空闲的时候会被禁用掉。
接下来就开始对应的程序包了,pacman -S bumblebee mesa bbswitch
,bumblebee提供是主要程序实现的包,mesa提供开源的OpenGL实现,而bbswtich负责切换显卡。还可以安装nvidia-utils来提供更多的支持。
如果你的系统是32位的,那么你需要启用Multilib,要安装lib32-virtualgl和lib32-nvidia-utils或lib32-nvidia-340xx-utils来和64位的对应。参见上图。
修改配置文件/etc/bumblebee/bumblebee.conf,将Driver
的值设置为nvidia
,来让其使用nvidia驱动,其次将PMMethod
的值设置为bbswitch
,让它使用刚刚安装的bbswitch来进行显卡的切换。修改配置文件/etc/modprobe.d/bbswitch.conf,添加options bbswitch load_state=0 unload_state=0
来设置bbswitch的状态。使用命令modprobe bbswitch
来加载这个模块。
将要使用Bumblebee的用户添加到bumblebee组中,gpasswd -a username bumblebee
,并将bumblebeed服务设为开机启动,systemctl enable bumblebeed
,启用它systemctl start bumblebeed
。
黑屏问题
刚刚上面说的,只装了独显驱动,没有装集显驱动。
NVIDIA对Linux不友好
针对这种情况,我们只需要在内核启动时加入如下参数即可acpi_osi=! acpi_osi='Windows 2009'
,告诉它我是Windows,赶紧工作吧。
简单用法
到了这里后,基本上就装好了,以下附上日常的使用方法。
- 使用glxgears可以进行帧频测试,检测Bumblebee是否工作,它包含在刚刚安装的mesa-demos包中,正常来说在刚刚安装mesa就会安装了。使用命令
optirun glxgears -info
可以进行帧频测试,并且会打印出一些必要的信息,如果去掉参数-info
,则不输出这些信息,仅进行帧频测试。同时你可以在屏幕上看到一个有三个齿轮转动的窗口。1
2
3
4
5
6
7
8
9dclunatic@dcLunatic ~ [18:47:10]
> $ optirun glxgears
4929 frames in 5.0 seconds = 985.449 FPS
4955 frames in 5.0 seconds = 990.948 FPS
4968 frames in 5.0 seconds = 993.534 FPS
4843 frames in 5.0 seconds = 968.508 FPS
4806 frames in 5.0 seconds = 961.181 FPS
5712 frames in 5.0 seconds = 1142.322 FPS
5218 frames in 5.0 seconds = 1043.451 FPS
- 打开NVIDIA的设置面板可以使用命令
opirun -b none nvidia-settings -c :8
- 可以查看**/proc/acpi/bbswitch文件的内容来确定独立显卡是否又启用。当然也可以查看已加载的pci模块**来查看。使用命令
lspci | grep -i vga
。最后的ff代表是关闭着的。1
2
3
4dclunatic@dcLunatic ~ [18:42:01]
> $ lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06)
01:00.0 VGA compatible controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)1
2
3
4dclunatic@dcLunatic ~ [18:42:23]
> $ lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06)
01:00.0 VGA compatible controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)
这样则是开着的。
- 可以使用命令
tee /proc/acpi/bbswitch <<< "ON"
或者tee /proc/acpi/bbswitch <<< "OFF"
来开启和关闭NVIDIA独立显卡。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19dclunatic@dcLunatic ~ [18:44:40]
> $ cat /proc/acpi/bbswitch
0000:01:00.0 OFF
dclunatic@dcLunatic ~ [18:44:45]
> $ sudo tee /proc/acpi/bbswitch <<< "ON"
ON
dclunatic@dcLunatic ~ [18:44:52]
> $ cat /proc/acpi/bbswitch
0000:01:00.0 ON
dclunatic@dcLunatic ~ [18:44:57]
> $ sudo tee /proc/acpi/bbswitch <<< "OFF"
OFF
dclunatic@dcLunatic ~ [18:45:06]
> $ cat /proc/acpi/bbswitch
0000:01:00.0 OFF其他方法
参见https://wiki.archlinux.org/index.php/NVIDIA_Optimus
,里面有使用nouveau的,还有nvidia-xrun的。
参考:
https://wiki.archlinux.org/index.php/NVIDIA_Optimus
https://wiki.archlinux.org/index.php/Bumblebee