对于笔记本来说,独立显卡太耗电了,非常影响续航;但有时候我们又需要用它来运行一些计算密集型程序。这里推荐两种方法来实现显卡切换。
查看独立显卡是否正在使用
在终端输入
lspci | grep NVIDIA
如果跟在显卡型号最后的括号中是rev ff,那么独立显卡已被禁用。 如果是其他数字(如rev 07), 那么独立显卡已被启用。
prime-select / nvidia-settings切换显卡
我是使用ubuntu-drivers autoinstall安装的Nvidia显卡驱动。安装完显卡驱动后,这两个软件就同时安装了。这时你可以在命令行输入
nvidia-settings
之后通过GUI的PRIME Profiles页面来选择使用集显或独显。 等价地,你可以在命令行使用prime-select: 查询当前选择的显卡
prime-select query
切换独显
sudo prime-select nvidia
切换集显
sudo prime-select intel
你需要重启使得上述选择生效。 这种方案的弊端:
当你启动独显时,所有图形程序(比如系统UI)都会在独显上运行;而启用集显时,又完全无法访问独显。因此不能实现集显负责显示,独显负责计算。
每次更改需要重启生效。
为了实现更灵活的管理,你需要Bumblebee。
Bumblebee
安装和使用
安装方法参考这里。 简单来说,如果你使用Ubuntu 14.04以后的系统,那么直接执行
sudo apt-get install bumblebee bumblebee-nvidia primus linux-headers-generic
然后重启就可以了。 此后默认情况下独立显卡被禁用。此时运行
lspci | grep NVIDIA
你应该看到末尾显示rev ff。要使用显卡运行程序,在要运行的程序钱加上optirun, 例如
optirun python
保持python解释器的运行状态,在另一个terminal窗口中执行lspci检查显卡状态,应该发现此时显卡已经被启动了。当使用显卡的程序全部结束后,显卡又随之被禁用.
trouble shooting
然而事情可能并没有这么顺利,我使用Ubuntu18.04 + nvidia-430驱动,运行optirun时遇到了下面的错误:
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected.
如果你的情况类似,那么可以继续参考下面的部分解决。
在/etc/environment最后添加一行
__GLVND_DISALLOW_PATCHING=1
编辑/etc/bumblebee/bumblebee.conf, 修改对应的两行配置:
LibraryPath=/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu
XorgModulePath=/usr/lib/x86_64-linux-gnu/nvidia-430/xorg,/usr/lib/xorg/modules,/usr/lib/xorg/modules/input
你最好检查上面配置的各个路径在你的系统中是否都存在,如果不存在则对应修改。比如,根据你所安装的驱动,/usr/lib/x86_64-linux-gnu/nvidia-430/xorg可能要改为其它值。
编辑/etc/modprobe.d/blacklist-nvidia.conf(如果不存在则创建它)如下:
blacklist nvidia
blacklist nvidia-drm
blacklist nvidia-modeset
#alias nvidia off
alias nvidia-drm off
#alias nvidia-modeset off
然后记得执行
sudo update-initramfs
如果不执行,那么下次开机时,/etc/modprobe.d/blacklist-nvidia.conf 就消失了。至于为什么你可以man update-initramfs 查看改命令的description。
编辑/etc/default/grub,添加 nogpumanager 到GRUB_CMDLINE_LINUX_DEFAULT参数,然后
update-grub
执行
sudo systemctl disable nvidia-persistenced
参考