我的筆電是 ThinkPad P15 Gen 2,Intel + NVIDIA 雙顯卡配置(RTX A5000 Laptop GPU),跑 KDE neon(基於 Ubuntu 24.04)Wayland。裝好 nvidia-driver-580-open 和 nvidia-prime 之後,想切換到 hybrid 模式省電。
結果 prime-select on-demand 一執行,重開機就黑螢幕。
先講結論:prime-select 這東西不要碰。
它切換模式的方式是直接寫 blacklist 檔案把 NVIDIA 模組擋掉,然後你下次想用 hybrid 模式的時候,它不會幫你清乾淨。黑螢幕的原因就是 NVIDIA 模組被擋了但系統又嘗試載入它。
排查的過程很煩。
先是發現 prime-run 指令根本不存在。nvidia-prime 套件竟然沒包含這個腳本,要自己建:
cat > /tmp/prime-run << 'EOF'
#!/bin/bash
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia "$@"
EOF
chmod +x /tmp/prime-run
sudo mv /tmp/prime-run /usr/bin/prime-run
然後改用 EnvyControl 來管理 GPU 切換,因為 prime-select 顯然靠不住:
wget -O /tmp/python3-envycontrol.deb \
https://github.com/bayasdev/envycontrol/releases/download/v3.5.1/python3-envycontrol_3.5.1-1_all.deb
sudo apt install /tmp/python3-envycontrol.deb
sudo systemctl mask gpu-manager.service
sudo envycontrol -s hybrid --rtd3
重開機。
nvidia-smi 還是失敗。
查了一下模組設定:
$ modprobe --showconfig | grep nvidia
blacklist nvidia
blacklist nvidia_drm
blacklist nvidia_modeset
罪魁禍首是 /lib/modprobe.d/blacklist-nvidia.conf:
# Do not modify
# This file was generated by nvidia-prime
blacklist nvidia
blacklist nvidia-drm
blacklist nvidia-modeset
alias nvidia off
alias nvidia-drm off
alias nvidia-modeset off
這是之前用 prime-select intel 留下的。prime-select 切到純內顯模式時會寫這個檔案,但你之後想換回 hybrid,它不會刪掉。
刪掉它:
sudo rm /lib/modprobe.d/blacklist-nvidia.conf
sudo update-initramfs -u
sudo modprobe nvidia
終於成功了:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05 Driver Version: 580.95.05 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| 0 NVIDIA RTX A5000 Laptop GPU Off | 00000000:01:00.0 Off | N/A |
+-----------------------------------------+------------------------+----------------------+
以後就只用 envycontrol 切換模式。prime-select 這東西碰了就是踩雷。
如果不小心黑螢幕進不去系統,進 recovery mode 執行:
sudo rm /lib/modprobe.d/blacklist-nvidia.conf
sudo update-initramfs -u
常用的指令備忘:
envycontrol --query # 查詢目前模式
sudo envycontrol -s integrated # 純內顯
sudo envycontrol -s hybrid --rtd3 # 混合模式 + 省電
sudo envycontrol -s nvidia # 純 NVIDIA
prime-run ./my-app # 指定用 NVIDIA 跑程式