dcLunatic's blog

arch如何使用独显

字数统计: 1.8k阅读时长: 7 min
2018/09/10 Share

Arch双显卡问题——如何使用独显

概述

NVIDIA独立显卡,可以代替普通的集成显卡做显示,也可以独立于CPU之外来处理一些图形数据。性能优于集成显卡。所以玩游戏的时候,使用独立显卡会优于默认的集成显卡,会给我们带来给更好的游戏体验,比如在帧频方面上,独立显卡要远高于集成显卡。
总而言之,显卡越高端,玩游戏(特别是大型游戏)的游戏体验越好

当然,如果没有什么特殊要求的话,只安装集成显卡对应的驱动就可以了,一般都是Intel的,我的是Intel+NVIDIA的,(近日听说steam上又多了好多款可以在linux上运行的游戏了^_^),所以就得要考虑下这个问题了。

Windows下,这些都不需要我们所操心了,但在Linux下,默认的独立显卡驱动是开源的nouveau,但是使用这个驱动会导致无法正常进入我们的桌面系统,而且,虽然nouveau是开源的,但是,它在显卡切换上性能比较差,不能与闭源的NVIDIA驱动相比,同时也不支持任何的省电功能(使用NVIDIA独立显卡会更耗电)

如果说电脑是独显+集显的,然后只安装了独显驱动,不装集显驱动的话,会导致屏幕黑屏的,因为NVIDIA的optimus功能会将独显的绘制结果交由集成显卡来显示。
当然,黑屏的原因不只只有这个,比如下面会遇到的装了集显独显驱动后,开机还是黑屏的情况。

所以考虑采取使用闭源的NVIDIA驱动,符合以下条件的,出门左拐,走好不送哈:

  1. 没有独立显卡的
  2. BIOS不支持的(这个请自行查询)
  3. 不能接受闭源软件的

安装NVIDIA驱动和Bumblebee

默认情况下,如果使用安装系统提供的独立显卡驱动nouveau会导致无法正常进入桌面,一般情况下,都是把这个驱动给禁用掉nouveau.modeset=0,也就是说不然独显工作,就可以正常使用了。

首先查看下自己电脑的显卡情况,使用命令lspci | grep -i vga,可以看到如下的结果

1
2
3
4
dclunatic@dcLunatic ~                                                                    [17:30: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 ff)

可以看到Intel的集成显卡NVIDIA的独立显卡
安装对应的显卡驱动,具体的可参照下图安装
vga
这里我选用的是xf86-video-intelnvidia,使用命令pacman -S xf86-video-intel nvida安装。
闭源NVIDIA驱动支持官方的Optimus功能,它能够最大程序的发挥出NVIDIA显卡的性能,但是却不支持切换显卡,意味着你就只能使用独立显卡,再也不能使用集成显卡了,据说也会有更多的bug。

这里说下Optimus技术,它是一种不依赖于硬件的独立显卡实现。独立显卡按需渲染,继而交由集显显示。当笔记本通过电池供电时,独显关闭;使用电源供电时,打开独显,通过这样,来增强笔记本的续航能力。

这里使用第三方程序Bumblebee来实现类似于Optimus的功能,它是Linux上Optimus的替代品之一。它通过virtualGL或者primus来实现独显渲染,集显显示的功能。独立显卡在空闲的时候会被禁用掉。

接下来就开始对应的程序包了,pacman -S bumblebee mesa bbswitchbumblebee提供是主要程序实现的包,mesa提供开源的OpenGL实现,而bbswtich负责切换显卡。还可以安装nvidia-utils来提供更多的支持。

如果你的系统是32位的,那么你需要启用Multilib,要安装lib32-virtualgllib32-nvidia-utilslib32-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

黑屏问题

  1. 刚刚上面说的,只装了独显驱动,没有装集显驱动

  2. NVIDIA对Linux不友好
    针对这种情况,我们只需要在内核启动时加入如下参数即可acpi_osi=! acpi_osi='Windows 2009',告诉它我是Windows,赶紧工作吧。

    此处参考rovo98的某篇博客

简单用法

到了这里后,基本上就装好了,以下附上日常的使用方法。

  1. 使用glxgears可以进行帧频测试,检测Bumblebee是否工作,它包含在刚刚安装的mesa-demos包中,正常来说在刚刚安装mesa就会安装了。使用命令optirun glxgears -info可以进行帧频测试,并且会打印出一些必要的信息,如果去掉参数-info,则不输出这些信息,仅进行帧频测试。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dclunatic@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
    同时你可以在屏幕上看到一个有三个齿轮转动的窗口。
    frametest
  2. 打开NVIDIA的设置面板可以使用命令opirun -b none nvidia-settings -c :8
    nvidia-setting
  3. 可以查看**/proc/acpi/bbswitch文件的内容来确定独立显卡是否又启用。当然也可以查看已加载的pci模块**来查看。使用命令lspci | grep -i vga
    1
    2
    3
    4
    dclunatic@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)
    最后的ff代表是关闭着的。
    1
    2
    3
    4
    dclunatic@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)

这样则是开着的。

  1. 可以使用命令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
    19
    dclunatic@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

原文作者:dcLunatic

原文链接:http://dclunatic.github.io/%E7%8B%AC%E6%98%BE.html

发表日期:September 10th 2018, 2:21:32 am

更新日期:July 11th 2021, 9:13:49 pm

版权声明:转载的时候,记得注明来处

CATALOG
  1. 1. Arch双显卡问题——如何使用独显
    1. 1.1. 概述
    2. 1.2. 安装NVIDIA驱动和Bumblebee
    3. 1.3. 黑屏问题
    4. 1.4. 简单用法
    5. 1.5. 其他方法