使用 optimus-manager 来管理显卡切换

在领教过 bumblebee 的 optirun 的兼容性问题; primusrun 关垂直同步的画面撕裂,开垂直同步的输入延迟;直接使用 NVIDIA 的耗电等一系列双显卡之痛之后,发现 optimus-manager 十分适合我。你可以设置开机默认使用 Intel 还是 Nvidia ,你可以随时在这两者之间切换。废话不多说,如何吃上这个方便的工具呢?

安装

安装前须知: optimus-manager 上游直接支持的Display Managersddmlightdmgdm ,其他 DM 要用的话需要额外配置 Xsetup 脚本,这里不介绍。

你可以从 AUR 安装 optimus-manager

也可以从 archlinuxcn 源直接安装:

$ sudo pacman -Sy optimus-manager

装完之后开启服务:

$ sudo systemctl enable optimus-manager.service

配置

非常重要:

确保你 /etc/X11/xorg.conf/etc/X11/xorg.conf.d 下面没有其他显卡和显示相关的配置,如果有的话可以(备份后?)删掉,原因是 optimus-manager 会帮你生成显卡配置文件到 /etc/X11/xorg.conf.d/10-optimus-manager.conf

下面这个目录结构是我的,供参考:

$ tree /etc/X11/
/etc/X11/
├── xinit
│   └── xinitrc.d
│       ├── 40-libcanberra-gtk-module.sh
│       └── 50-systemd-user.sh
└── xorg.conf.d
        └── 10-optimus-manager.conf

3 directories, 3 files

如果你已经安装了 bumblebee ,请执行下面的命令关掉 bumblebeed

$ sudo systemctl disable bumblebeed

检查 /etc/modules-load.d/ 以确保 bbswitch 模块不要在开机的时候被加载

最后别忘了安装 nvidia 闭源驱动,除此之外推荐安装 nvidia-utilslib32-nvidia-utils

配置 optimus-manager

$ sudo mkdir -p /etc/optimus-manager

将 optimus-manager 默认配置拷贝一份到 /etc/optimus-manager 下面进行个性化配置:

$ sudo cp /usr/share/optimus-manager.conf /etc/optimus-manager/optimus-manager.conf
$ sudo vim /etc/optimus-manager/optimus-manager.conf

各选项作用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
[optimus]
# 切换方式,可能值: nouveau, bbswitch, none
# 如果选择 none,Nvidia在你使用 Intel 的时候将一直处于通电状态
# 如果使用 bbswitch, 在你使用 Intel 的时候将无法使用 Nvidia 上的
# 接口输出到外接显示器。
# 使用 bbswitch 必须安装 bbswitch 或者 bbswitch-dkms。
# bbswitch 暂时还不支持 10系以上显卡 (真的不支持?还是 ACPI 锁死问题呢?)
switching=nouveau

# 在 Intel 模式下开启 PCI 电源管理
# 如果不开的话会你会发现耗电量会比较大
# 如果已经使用了 bbswitch 这个选项会被忽略
pci_power_control=yes


[intel]
# 使用哪一个 Intel 驱动
# 可能值: modesetting, intel
driver=modesetting

# 加速模式
# intel 驱动专属,对modesetting无效
# 可能值 : sna, xna
# 留空以使用默认值
accel=

# 开启 TearFree 选项
# intel驱动的选项, 对modesetting无效
# 可能值: yes, no
# 留空以使用默认值
tearfree=

# DRI 版本. 可能值 : 2, 3
DRI=3

# 是否对 nouveau 开启 modesetting.
# 对 intel 驱动无效
# 如果你使用 bbswitch 作为切换方式,这个选项会被忽略
modeset=yes

[nvidia]
# DRI版本,可能值: 2, 3
DRI=3

# 是否开启 modesetting,如果要使用 PRIME Synchronization 来避免
# 画面撕裂的话,必须开启
modeset=yes

# 是否开启 NVIDIA 驱动的 NVreg_UsePageAttributeTable 选项
# 推荐开启,否则可能会导致 CPU 低性能。
PAT=yes

# DPI 值. 帮你设置登录管理器的 DPI
# 原理是启动登录管理器的时候执行:
# xrandr --dpi <dpi value>
# 留空以使用默认值
DPI=


# Nvidia 专有选项,选项之间以逗号分隔
# 支持的选项:
# - overclocking : 开启 CoolBits 并在 NVIDIA 面板中解锁超频选项。
# - triple_buffer : 开启三倍缓冲
options=overclocking

配置好了之后建议直接重启生效。

用法

确保 optimus-manager.service 已经在运行了

那么运行:

$ optimus-manager --switch nvidia

切换到nvidia

运行:

$ optimus-manager --switch intel

切换到Intel

运行:

$ optimus-manager --set-startup=intel

设置开机使用intel

更多用法:

$ optimus-manager --help

图形前端

上游推荐了 optimus-manager-qt

optimus-manager-qt

gnome-shell 拓展 optimus-manager-argos
optimus-manager-argos

前者对于 kde 用户可以直接从 archlinuxcn 源安装 optimus-manager-qt-kde

$ sudo pacman -Sy optimus-manager-qt-kde

对于非 kde 用户,安装 optimus-manager-qt

$ sudo pacman -Sy optimus-manager-qt

后者没人打包,可以去 archlinuxcn/repo 发打包请求?

原理简介

首先 optimus-manager 帮你生成了 /etc/X11/xorg.conf.d/10-optimus-manager.conf 文件,里面是你的显卡配置,内容会随着你显卡切换而改变
接着,以 sddm 为例, optimus-manager 添加了如下配置文件,使得在 sddm 启动时会自动执行脚本 /usr/bin/optimus-manager_Xsetup 来调用 xrander 设置显示器输出。

/etc/sddm.conf.d/10-optimus-manager.conf
---
[X11]
DisplayCommand=/usr/bin/optimus-manager_Xsetup <intel|nvidia>

常见问题

  • acpi 锁死问题, 如果你在用 bbswitch 并且遇到开机之后电脑直接卡死什么也动不了的问题,请尝试使用内核参数acpi_osi="!Windows 2015"acpi_osi=! acpi_osi="Windows 2009"启动,还不行的话尝试acpi_osi=! acpi_osi="Windows 2013 …以此类推, 都不行的话,两个选择:1.自己修ACPI,2.砸买新(这种电脑也表现为windows7死活装不上),垃圾厂子的ACPI就是这么烂,这里点名批评一下:技嘉
    参考自 [NVIDIAOptimus#Lockup_issue(lspci_hangs)]