我的筆電是 ThinkPad P15 Gen 2,Intel + NVIDIA 雙顯卡配置(RTX A5000 Laptop GPU),跑 KDE neon(基於 Ubuntu 24.04)Wayland。裝好 nvidia-driver-580-opennvidia-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 跑程式