Ubuntu 16.04里面装nvidia显卡的时候,默认会装上nvidia-prime
,这样用prime-select
命令就可以选择打开还是关闭独立显卡。Ubuntu 18.04里面改变了之前用update-alternative
的方式进行prime-select
的方法,变成用blacklist+grub cmmand+systemd service的方法,用nouveau进行电源管理,然后我装了之后并不能成功工作,所以配置了一下,还原成用bbswitch进行电源管理的方法,虽然切换显卡需要重启,不过还是比不work要好多了。
安装Ubuntu 18.04时可能遇到的问题
在安装Ubuntu18.04的时候,就可能遇到显卡驱动的问题。我在创建启动盘(用dd
或者UltraISO),从U盘启动之后,不管是在启动菜单里面选择"Try Ubuntu 18.04.1 LTS”还是“Install Ubuntu 18.04.1 LTS”,看到Ubuntu的界面之后系统很快就会卡住,问题可是是nouveau导致的。一个简单粗暴的解决办法是在选择Try还是Install的时候,编辑Install的启动命令,移动光标到Install那一条,按e,在linux /boot/vmlinuz-.... ro quiet splash
那一行最后面加上nomodset
,然后按F10启动。这样可以禁止内核加载独立的显卡驱动,代价是安装界面的分辨率会变得很低,所以选择Install,这样可以不显示top panel。
安装完Ubuntu之后,在安装独立显卡之前,有可能还是会遇到系统界面卡住的问题,也可以用上面的方法进入系统,安装NVIDIA显卡之后再重启就可以正常启动。
禁用独立显卡
如果只是想禁用独立显卡的话,可以用下面的步骤。
1.禁用nvidia-fallback.service
# systemctl disable nvidia-fallback.service
2.把nouveau加入blacklist(NVIDIA显卡驱动安装的时候会在/etc/modprobe.d/
新建一个文件把nouveau加到blacklist,如果没有或者没有作用的话可以使用下面的方式)
# vim /etc/default/grub // 打开/etc/default/grub
//找到GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
//在splash后面加上nouveau.blacklist=1
# update-grub
3.使用bbswitch作为电源管理
安装bbswitch-dkms
# apt install bbswitch-dkms
编辑/etc/modules
,加入一行
bbswitch
编辑/etc/modprobe.d/bbswitch.conf
,加入一行
modprobe bbswitch load_state=0 unload_state=1
4.重启
Ubuntu 18.04的prime-select
阅读prime-select
的源码可以得知它切换为intel显卡禁用NVIDIA显卡的时候主要做了下面几件事:
1.在grub的GRUB_CMDLINE_LINUX_DEFAULT参数里面加了一条nouveau.runpm=0,禁止nouveau进行电源管理
2.在‘/etc/modprobe.d’目录下创建了一个/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
3.使用update-initramfs -u
更新了一下rootfs文件
4.systemctl enable nvidia-prime-boot.service
,在nvidia-fallback.service
之后执行,其中的命令是echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
。nvidia-fallback.service
的作用是加载nouveau模块
在启动nvidia显卡的时候,进行了以下工作:
1.删除grub的GRUB_CMDLINE_LINUX_DEFAULT参数里面的nouveau.runpm=0
2.删除在‘/etc/modprobe.d’目录下的/etc/modprobe.d/blacklist-nvidia.conf
3.使用update-initramfs -u
更新了一下rootfs文件
4.systemctl diasble nvidia-prime-boot.service`
这样的话主要的更改内容有三个:
1.注释掉更改grub命令的代码
2.将nvidia-fallback.service
改为加载bbswitch模块
3.更改nvidia-prime-boot.service
,改为使用bbswitch关闭独立显卡echo "OFF" >> /proc/acpi/bbswitch
更改prime-select使其正常工作
如果想要用prime-select来进行切换显卡的话,可以更改一下相关的文件,因为主要的问题在于nouveau作为电源管理并不成功,将其改为bbswitch就行了。
1.更改/lib/systemd/system/nvidia-fallback.service
找到
ExecStart=-/sbin/modprobe nouveau
改为
ExecStart=-/sbin/modprobe bbswitch
然后确保nvidia-fallback.service
没有被disable
# systemctl enable nvidia-fallback.service
2.更改/lib/systemd/system/nvidia-prime-boot.service`
把
ExecStart=/bin/sh -c "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"
改成
ExecStart=/bin/sh -c "echo OFF > /proc/acpi/bbswitch"
3.更改/usr/bin/prime-select
将_diable_nviida
函数的下面两行注释掉
//usr/bin/prime-select
self._add_boot_params(self._grub_cmdline_start, self._grub_path, boot_params)
self._update_grub()
将_enable_nvidia
函数的下面三行注释掉
self._remove_boot_params(self._grub_cmdline_start,
self._grub_path, ['nouveau.runpm', 'video=VGA'])
self._update_grub()
参考
更改日志
- 2018.08.30 创建