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 創建