Ubuntu 18.04配置prime-select切換/關閉獨立顯卡


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM