在openSUSE上使用Bumblebee禁止使用Nvidia显卡

如今有很多笔记本电脑都配备了双显卡,一块集成的 Intel 显卡,一块性能更好一些的 NVIDIA 显卡。
可是在平时的使用中可能根本用不上 NVIDIA 的那块显卡,那么为了使这样的笔记本电脑更省电,那么在平时的使用中可以禁用 NVIDIA 的显卡,而只使用集成的显卡。 Bumblebee 就是一个开源项目,在 Linux 上实现了 NVIDIA 的 Optimus 技术,在需要的时候使用 NVIDIA 的显卡。

我的电脑是 Lenovo ThinkPad T440s ,配备了如下的两块显卡:

  1. 00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09)
  2. VGA compatible controller: NVIDIA Corporation GK208M [GeForce GT 730M] (rev ff)

而我使用的系统是 openSUSE Leap 42.1,下面就看看如何在该系统上禁用 NVIDIA 的显卡。

安装所需的软件包

首先添加如下安装源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo zypper ar -r http://download.opensuse.org/repositories/X11:/Bumblebee/openSUSE_Leap_42.1/X11:Bumblebee.repo 
```

刷新后,安装如下软件包:

`bumblebee nvidia-bumblebee bbswitch bbswitch-kmp-default`

如果你是64位系统,还请安装

`nvidia-bumblebee-32bit`

之后还需要将用户添加入 bumblebee 和 video 两个组:

``` bash
sudo usermod -a bumblebee username
sudo usermod -a video username

启动服务

安装完以上软件包之后,需要启动连个服务:

1
2
sudo systemctl enable bumblebeed  
sudo systemctl enable dkms

然后检查 /etc/modprobe.d/50-blacklist.conf 文件,确保 blacklist nouveau 存在(除非你确定要使用 nouveau 驱动)。 之后

1
2
3
4
5
6
7
8
9
10
11
mkinitrd
```

重启系统。

#### 查看状态

重启之后,使用如下命令查看状态

``` bash
optirun --status

如果显示的结果是:

Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.

那么恭喜,你已经配置成功并且禁用了 NVIDIA 的显卡。 如果你想测试你的 NVIDIA 的显卡,可以运行如下命令:

1
optirun glxsheres

这是将会启用 NVIDIA 显卡来运行该程序,所以如果你想使用 NVIDIA 的显卡来运行某个应用程序,请使用 optirun 命令。

排除问题

如果你在 “optirun –status” 中得到的结果是:

Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is on.

那么首先检查文件 /etc/modprobe.d/50-bbswitch.conf ,看是有如下内容:

options bbswitch load_state=0

然后检查

1
sudo systemctl -l status bumblebeed

看是否有类似如下的信息

/dev/dri/card0: failed to set DRM interface version 1.4: Permission denied

如果有,那么往文件 /etc/bumblebee/xorg.conf.nvidia 里添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
Section "Screen"
Identifier "Default Screen"
Device "DiscreteNvidia"
EndSection
```

然后重启该服务。

在其次,检查

``` bash
dmesg | grep -C 10 bbswitch

看是否有类似如下内容:

ACPI Warning: \_SB_.PCI0.PEG_.VID_.\_DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150410/nsarguments-95)

这样需要在启动内核参数添加 “acpi_osi=!Windows 2013” 后重启系统。
如果想了解更多的情况,请查看考 Github 上的 Bumblebeebbswitch 两个项目。