我有一台配备 GeForce GT 650M 的笔记本电脑。我最近安装了 Kubuntu 20.04 并安装了 nvidia-prime。
我可以在 nvidia-settings 中选择 PRIME 配置文件,并且我有“NVIDIA(性能)”、“NVIDIA On-Demand”和 Intel(省电模式)”。
当我选择英特尔时,我怀疑我的 NVIDIA 卡仍然处于活动状态,因为笔记本电脑似乎比应有的温度高并且电池寿命很差。
在 Kubuntu 18.04 中,我可以使用 bbswitch 关闭 NVIDIA 卡。但是,现在这行不通了。当我尝试 modprobe 时,我收到错误。
$ sudo modprobe bbswitch
modprobe: ERROR: could not insert 'bbswitch': No such device
事实上,dmesg 显示:
[12360.793484] bbswitch: version 0.8
[12360.793498] bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0
[12360.793509] bbswitch: No discrete VGA device found
来自 lspci:
$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
这里仅显示英特尔卡。
所以看起来我的 GPU 根本就不存在。
但是,如果我将 PRIME 配置文件更改为任何 NVIDIA 配置文件,lspci 会显示 NVIDIA GPU,glxinfo 和 friends 会显示正在使用的 NVIDIA 卡。所以它确实有效!
所以我的问题是,Kubuntu 20.04 是否会采取某种措施将 GPU 从 PCI 总线上移除以关闭它(并且无法关闭它)?
最终,我想彻底关闭它(BIOS 中没有选项)。我尝试过使用 bbswitch 方式,但如果还有其他方法,那也行得通。
答案1
好的,我找到了一种不使用 bbswitch 关闭 NVIDIA 卡的方法。我仍然不知道为什么lspci
当我使用 Intel 配置文件而不是任何 NVIDIA 配置文件时 NVIDIA 卡会消失。
这Arch 维基非常有用。我使用那里的信息编写了一个脚本,当我使用 ACPI 调用使用 Intel 卡时,该脚本会关闭 NVIDIA GPU。
首先,安装ACPI调用模块。
$ sudo apt install acpi-call-dkms
然后编辑“/etc/modules-load.d/modules.conf”并acpi_call
在末尾附加。这将在启动时加载模块并激活“/proc/acpi/call”。
下一步是找到 GPU 所需的 ACPI 调用。acpi-call-dkms 软件包附带了一个示例脚本,该脚本可以完成此操作。运行它以找到显示“有效”的代码。
$ sudo /usr/share/doc/acpi-call-dkms/examples/turn_off_gpu.sh
就我的情况而言,它显示我的 NVIDIA GeForce GT 650M 为“\_SB.PCI0.PEG0.PEGP._OFF”。
然后我编写了一个脚本来关闭 GPU,但前提是 PRIME 配置文件“Intel”处于活动状态。对于其他配置文件,该脚本不执行任何操作并保持 NVIDIA GPU 处于活动状态。这样,我仍然可以通过 prime-select 正常使用 NVIDIA GPU。我将脚本保存为“/usr/bin/turn_off_gpu.sh”。
#!/bin/bash
# Change this to whatever /usr/share/doc/acpi-call-dkms/examples/turn_off_gpu.sh tells you
ACPI_CODE="\_SB.PCI0.PEG0.PEGP._OFF"
GPU_IN_USE=$(prime-select query)
if [[ $GPU_IN_USE == "intel" ]]; then
echo $ACPI_CODE > /proc/acpi/call
result=$(cat /proc/acpi/call | tr '\0' '\n')
case "$result" in
Error*)
echo "Failed to turn off discrete GPU. Possible wrong ACPI_CODE?"
exit 1
;;
*)
echo "GPU has been turned off"
exit 0
;;
esac
fi
echo "Discrete GPU is in use, keeping it on"
exit 0
请注意,此脚本需要以 root 身份运行。
最后,我想在启动时运行这个脚本,所以我在“/etc/systemd/system/gpuoff.service”为它创建了一个 systemd 文件:
[Unit]
Description=Turn off GPU if using Intel
[Service]
Type=oneshot
ExecStart=/usr/bin/turn_off_gpu.sh
[Install]
WantedBy=multi-user.target
并启用此功能
$ sudo systemctl enable gpuoff
现在重新启动,当使用 Intel PRIME 配置文件时,GPU 将关闭,而当使用任何其他配置文件时,GPU 将打开。