你有搭載Intel + Nvidia雙顯卡的Linux筆電嗎?那麼你可能會碰到以下問題:
- 開機預設都是用Intel內顯渲染,Nvidia獨顯不工作,得用Nvidia PRIME手動切換
- Nvidia獨顯很耗電,開下去續航砍半。
以上問題可以用「EnvyControl」解決,這是一款方便Linux筆電用戶切換內顯(integrated GPU)與獨顯(discrete GPU)的小工具。
它除了能夠讓Linux桌面程式全部以Nvidia獨顯來渲染之外,也可以將Nvidia獨顯完全關閉以節省電量。適合Intel + Nvidia或AMD + Nvidia筆電的用戶使用。
EnvyControl適用於各大Linux發行版,支援Ubuntu、Debian、Fedora、Arch Linux、openSUSE、Gentoo、Void Linux。
1. 為什麼要用EnvyControl#
第一個理由是方便切換獨顯。以我這台MSI Modern 15 A10筆電來說,搭載Intel i5-10210u (UHD 620) 內顯 + Nvidia MX350獨顯,筆電HDMI孔跟Nvidia顯示卡連在一起。預設情況下,開機都是使用Intel內顯當作主顯示卡渲染的,需要進行圖形吃重的渲染工作的時候得透過Nvidia Optimus PRIME指令切換,但是這樣很不方便。EnvyControl的功能可以將Linux開機後的渲染全部交由Nvidia顯示卡執行。
如果不確定Linux電腦是用哪一個當主顯示卡渲染,可以使用指令vulkaninfo --summary
或是glxinfo | grep OpenGL
確認。
第二個理由是解決Nvidia獨顯的耗電問題。Linux筆電耗電的因素很多,除了軟體因素外,還有硬體因素。通常,Linux會透過Power Profiles Daemon服務來控制耗電量,但是這個只對CPU有效,如果電腦有Nvidia獨顯依然會吃電。Linux在安裝Nvidia專有驅動後,它不會自己調節,放著不管會很耗電。而我外出文書處理的時候用不到Nvidia獨顯渲染,空放著耗電的話不如將它關掉,這就是EnvyControl能作到的功能,如此一來能稍微延長些續航力。
部份廠牌的筆電能在UEFI界面關掉Nvidia獨顯,但很可惜的是我這台不支援。
第三個理由,解決Linux發行版之間的差異。部份發行版有自家切換Nvidia獨顯的工具,例如Ubuntu有prime-select,Arch Linux則是Optimus Manager。那麼其他發行版該怎麼辦呢?EnvyControl能解決這個問題。
2. 安裝EnvyControl#
首先要在電腦安裝專有Nvidia驅動,例如Ubuntu參考這篇
用
lspci | grep NVIDIA
和nvidia-smi
指令檢查,應會看到系統目前已載入Nvidia驅動的核心模組參考Github說明安裝EnvyControl,比如Ubuntu就下載deb檔,再用APT安裝:
sudo apt install ./python3-envycontrol_*.deb
- 建議安裝圖形控制面板。
GNOME桌面安裝擴充套件管理員,再安裝GPU profile selector擴充套件,切換按鈕會顯示在系統匣。
KDE Plasma在桌面右鍵 → 進入編輯模式 → 新增元件,下載Optimus GPU Switcher元件,裝好後會顯示在系統匣。
其他桌面請裝EnvyControl-PyQt。
3. EnvyControl提供的模式#
EnvyControl提供三種模式選擇:
Integrated:只使用Intel內顯,將Nvidia驅動的核心模組加入黑名單,完全關閉Nvidia獨顯。此模式筆電的HDMI孔會無法輸出畫面。
Hybrid:將內顯作為主顯示卡,僅特定程式用Nvidia PRIME指令渲染。較新的Nvidia顯示卡尚支援RTD3功能,會在閒置的時候自動關閉Nvidia顯示卡省電。此模式筆電的HDMI孔能正常運作。
Nvidia:建立自訂X.org設定檔,將Nvidia獨顯作為主顯示卡,讓系統全部使用Nvidia獨顯渲染,擺脫Nvidia PRIME指令。這個模式會顯著增加耗電量。此模式筆電的HDMI孔能正常運作。因為技術問題,目前只支援Intel + Nvidia的筆電。還有這個模式只能登入X11工作階段,對Wayland無效。
下面我用指令示範。你有裝EnvyControl圖形控制面板就用按鈕切換即可。
4. 只啟用內顯,關閉Nvidia獨顯省電#
Integrated模式。我個人會選取此模式用以省電。因為RTD3的按需省電模式在Nvidia GTX1650 (Turing架構) 或更新的顯示卡才有,而我的MX350太舊了。
- 使用指令啟用Integrated模式,會花一點時間切換。
sudo envycontrol -s integrated
重開機,執行
lscpi | grep NVIDIA
和nvidia-smi
指令,會看到Nvidia獨顯從PCI列表消失了。用這個指令檢視目前電腦使用的主顯示卡為何:
vulkaninfo --summary
5. 將內顯和Nvidia獨顯都開啟#
這是Hybrid模式。Intel內顯作為主顯示卡,需要Nvidia渲染的時候再使用Nvidia PRIME指令切換。如果Nvidia顯示卡支援RTD3,那麼它會在沒事幹的時候自動關閉省電。
- 切換為Hybrid模式
sudo envycontrol -s hybrid
- 如果你的顯示卡支援RTD3省電模式,那麼便將之開啟:
sudo envycontrol -s hybrid --rtd3
- 重開機。檢視目前電腦使用的主顯示卡為何:
vulkaninfo --summary
6. 將主顯示卡切換成Nvidia獨顯#
Nvidia模式,強制將Nvidia獨顯作為主顯示卡,所有程式都用Nvidia獨顯渲染。
- 此模式僅限X11工作階段使用,Wayland無效。先檢查目前工作階段是否為X11:
echo $XDG_SESSION_TYPE
- 切換為Nvidia模式
sudo envycontrol -s nvidia
- 重開機,檢視目前電腦使用的主顯示卡為何:
vulkaninfo --summary
7. 測試耗電量對比#
測試有開獨顯 vs 關掉獨顯的對比。
開機後使用圖中這些應用程式一小時,再對比耗電量。
Hybrid模式,開著獨顯,使用1小時,電量下降至65%。
Integrated模式,關掉獨顯,使用1小時,電量下降至73%。
對比可以發現儘管差距不大,耗電量還是有差的,包含KDE Plasma預估的電池可用時間。儘管KDE Plasma預估的電池可用時間會依照目前CPU耗電量而浮動(例如有時會突增至20W又降下來),但是關掉獨顯的電量預估時間就是比開著獨顯多出一小時。
上圖也可以看到Power Profile Daemon其實還有「省電」模式的電源設定檔可選,這樣續航力搞不好就半天了。但是你知道的,選這個強行降頻就是卡爆,所以我大部分只使用「平衡」模式。